不使用库函数用CH375对优盘进行初始化(重发,希望置顶)[原创]

所谓的不兼容只是程序中一般不加出错处理造成的,这本来就不符合规范。目前只有一种情况CH375似乎不大搞得定,就是读写端点是同一个时,可惜的是Win2000也不支持这种优盘,所以几乎不用考虑。 我现在使用CH375时是按照下面的流程走的,兼容性大概90%左右(一款清华紫光1G,一款是朗科早期的16M无法支持)。 1.发出DISK_INIT命令,等待成功中断 2.发出DISK_MAX_LUN命令,等待成功中断或STALL。 3.如果第二步成功,则读出当前优盘有几个逻辑单元,并保存。STALL则第四步。

从下面开始,如果出现0x1f中断状态,发出DISK_R_SENSE,并对出错进行处理,如果Sense key = 0x06, Additional Sense code = 0x28,则重复当前命令,否则无法处理此优盘。(请参考USB Mass Storage Class – UFI Command Specification)

4.发出DISK_INQUIRY命令,可能需要出错处理,直到成功。 5.发出DISK_SIZE命令,可能需要出错处理,直到成功。 6.读MBR/DBR,判断文件系统,如果不支持且逻辑单元未全部判断完成,则置为下一个逻辑单元,跳转到第4步,否则无法支持此优盘。(某些插到电脑上出现多个盘符的优盘)

几乎所有的金士顿优盘在第4步必定会出错。某些优盘支持在优盘使用时可以打开/关闭写保护,同样会使读扇区命令出错,也需要重复当前命令。

使用CH375也有半年了,希望这点东西能对要脱离库函数进行开发的人有点帮助。

我是刚开始用CH375做主机读U盘的,在开发过程中遇到很多困难,其中就有U盘兼容性问题, 能否给个CH375初始化源程序?谢谢了 个人信息保护,已隐藏

谢谢了,谢谢了


我使用的单片机估计不会有多少人用的,而且只有汇编语言,所以源程序就算给了也没有多少用处。你可以参考我的算法描述,如果有问题可以问我。


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