请教CH376扇区写的问题

单片机再通过CMD_RD_USB_DATA0命令读出参数,获取共8 个字节的返回结果:首字节是允许写入的扇区数;后4 个字节是允许写入的扇区块的起始绝对线性扇区号LBA(以低字节在前的4 个字节表示的32 位双字数据,最后3个字节没用.) 仿真时,我读回的首字节内容是8, 是表示最大允许写入8个扇区呢 ??? 还是一定要写满8个扇区呢 ??????

手册中写到: 即使单片机发出 DISK_WRITE 命令只写 1 个扇区,正常情况下,单片机也将收到9个中断,前面的8个中断是要求单片机提供数据,最后一个中断是返回最终的操作状态。如果写 4 个扇区,那么正常情况下,单片机将会收到33个中断,前面的 32 个中断是要求单片机提供数据。如果写操作中途失败,单片机将有可能提前收到 USB_INT_DISK_ERR 状态,从而提前结束写操作。 但我在仿真时,在写第一个扇区的过程中,是收到了8个中断,但也收到了16个USB_INT_DISK_WRITE = 1EH, 这是怎么回事呢 ????? 收不到“ USB_INT_SUCCESS ”, 怎么回事 ??

扇区写参考EXAM8。 收不到“ USB_INT_SUCCESS ”,说明数据没有写完。收到了8个中断,怎么可能收到了16个USB_INT_DISK_WRITE = 1EH?!程序中在发完扇区写命令后会得到8字节数据(包括长度信息是9字节),数据的意义见下: if ( s != USB_INT_SUCCESS ) return( s ); xWriteCH376Cmd( CMD01_RD_USB_DATA0 ); xReadCH376Data( ); /* 长度总是sizeof(CH376_CMD_DATA.SectorWrite) */ cnt = xReadCH376Data( ); /* CH376_CMD_DATA.SectorWrite.mSectorCount */ xReadCH376Data( ); xReadCH376Data( ); xReadCH376Data( ); StaSec = CH376Read32bitDat( ); /* CH376_CMD_DATA.SectorWrite.mStartSector,从CH376芯片读取32位的数据并结束命令 */ 第二字节为可写的扇区数,第一字节是后面可以获取的字节数长度8(即8个字节)


我的看法如下: CH376的手册是这样叙述的(摘要如下): 5.35. CMD_SEC_WRITE 该命令用于获取以扇区为单位向当前位置写入数据块的参数信息,不支持SD 卡。命令成功执行后,CH376自动同步移动文件指针,以便下次读写操作能够接着本次写入数据的结束位置开始。该命令需要输入1 个数据,指定请求写入的扇区数,有效值为0 至255,请求扇区数为0 时,仅用于刷新文件长度。如果命令执行完成后中断状态是USB_INT_SUCCESS,那么可以由CMD_RD_USB_DATA0 命令获取共8 个字节的返回结果:首字节是允许写入的扇区数;后4 个字节是允许写入的扇区块的起始绝对线性扇区号LBA(以低字节在前的4 个字节表示的32 位双字数据)。 我认为: 手册的描述是相当的含糊, 甚至造成我们的误解 !!!!!!!!!!!!!!!!!! 应该直接了当的告诉我们: 一共要返回9个字节, 第一个字节是………. 另外,这句话也相当含糊不清: “后4 个字节是允许写入的扇区块的起始绝对线性扇区号LBA(以低字节在前的4 个字节表示的32 位双字数据)。” 手册上首先叙述首字节的含义, 然后就跟着这句话, 我就理解为是首字节后的4个字节, 从你的回答看: 是最后那4个字节: 是LBA. 芯片是你们发明的, 叙述应当清晰准确, 不应当让读者去猜. 按照我的理解,得到的仿真结果是千真万确的, 此种状态也可供你们参考. 不断改进. 是否妥当,请指教.

对你的回答表示诚挚的感谢.


谢谢您提的建议,我们会考虑的


总的来说,CH376还是比较好用的,除了产生以上的一点误解外,仿真还是很顺利的, 目前,我已将文件成功写入优盘中,操作也比较简单。 有些问题我在验证一下,有问题再请教你们。 对你们的支持再次表示感谢。


CH376的手册应该改写,找个语文水平高的工程师写。别让用户费力猜。



只有登录才能回复,可以选择微信账号登录