电脑读取U盘时遇到的问题
我计划用嵌入式系统模拟U盘的功能,目前成功识别设备,进行了格式化,但是在断电之后重新连接电脑,电脑再次识别U盘的时候出了问题,无法识别设备,用BusHound读取到的信息显示一开始的get descriptor和inquiry等指令都通过了,识别到了MSD设备,但是在后面电脑在大批量发送READ指令读取数据的时候,在读取的过程中电脑又插入了一个get descriptor的指令 80 06 00 02 00 00 09 00,之后我的程序就卡在一个地方,无法继续读取了,我怀疑是这个指令导致我的USB驱动卡住了,请问有人知道为什么电脑会发送这个指令吗?
80 06 00 02 00 00 09 00
这个命令看着有点不对,数据长度就不正确。设备描述符都是18字节,通过BUSHOUND抓取的都是0x12
第二:”目前成功识别设备,进行了格式化,但是在断电之后重新连接电脑,电脑再次识别U盘的时候出了问题”,这个大概略是你的格式化数据只是写到了缓存中了,没有写以实际的盘中,所以你看到的可以用是假象。
第三INQUIRY命令正确执行了,你得分析其响应的数据是否正确,https://www.usbzh.com/article/detail-1011.html
第四:是否格式化,需要分析READ_CAPACITY命令 https://www.usbzh.com/article/detail-1012.html
感谢站长的回复!
这个获取描述符的命令应该没有错,根据我查的资料,02对应的是配置描述符,长度是9个字节。
不好意思我之前没有说清楚,这个工程我之前用FPGA实现过,整个流程都跑通了,底层的NAND FLASH驱动也是我维护的,而且我是用windows里的磁盘管理格式化的,在格式化完成不断电的情况下还可以正常读写文件,所以应该不存在没写到盘中的情况。
我知道在电脑读取USB设备的最开始电脑会发送get descriptor指令,但是按照正常的流程,通过了识别设备这一步之后应该就不会再发送这个指令了,而是在读取了MBR之后按照FAT32的格式去读取MSD设备里的内容,在BUSHOUND上就表现为大量发送READ指令。按照我之前调试的经验,如果电脑不插入get descriptor指令,而是继续发送READ指令,那么读取MSD设备这一步也可以正常完成,在电脑上就会显示一个U盘。我现在想知道的问题是在什么情况下电脑会在对MSD设备多次READ的时候中途又插入一个get descriptor指令,不知道您是否见到过类似的情况?
是我搞错了。02确实是配置描述符。
我以前遇到过没有写入,但是U盘确实可以读写的功能,而且数据也正常。这就是因为数据量小所以在缓存中引起的。当时重启完电脑后就发现数据不在了。
另外你说的获取配置描述符能发个抓包的图么,这个是这个设备的吗?
并且发上来的配置描述符的内容和之前一样的吗?