GD32 USB NAND

[复制链接]
1141|18
手机看帖
扫描二维码
随时随地手机跟帖
986672437|  楼主 | 2022-9-6 20:21 | 显示全部楼层 |阅读模式
最近在用GD32F105的USBFS外设,先是根据官方固件库中的USBDEVICE下udisk的程序,使用内部Flash模拟了一个大容量存储设备的U盘,插上电脑后提示格式化完成后能正常使用没什么问题。然后在EXMC接口上外挂了一片海力士的H27U4G8F,底层的NAND驱动也是移植的别人写好的,根据自己直接调用相关的API进行读写操作都没问题,但是把NAND驱动加入到USBFS的固件程序对应的底层驱动接口就出现了问题,电脑设备管理器显示能枚举出一个大容量存储设备,但是获取设备描述符失败,设备没有启动。使用BUS Bound来总线上的数据传输情况发现,在插上设备后能读到INQUIRY、容量等信息,也能正常读写扇区,但读了几个后就出现发送逻辑单元准备就绪的00命令,然后就会出现SSTS 08 no device这种状态,接着计算机就会停用这个设备,回馈一个设备无法连接的状态,请问这个有人遇到过吗,该怎么去排查解决呢。有懂的帮忙解答一下,求求了。

使用特权

评论回复
986672437|  楼主 | 2022-9-7 12:29 | 显示全部楼层
本帖最后由 986672437 于 2022-9-7 12:31 编辑

有没有人懂这个呀,急着赶工期,求求了

使用特权

评论回复
986672437|  楼主 | 2022-9-7 12:31 | 显示全部楼层
caigang13 发表于 2022-9-7 08:11
不是很懂,帮顶一下。

感谢感谢

使用特权

评论回复
mijinbao| | 2022-9-7 16:53 | 显示全部楼层
MSC设备的Bulk数据交换流程是CBW->DATA->CSW,TestUnitReady(0x00)命令会在无其他数据传输时会定时发送,如果设备没有回应成功的CSW给主机,则主机认为设备已不存在。所以是不是你TestUnitReady命令的响应代码有问题啊?

使用特权

评论回复
mijinbao| | 2022-9-7 17:15 | 显示全部楼层
还有我看网上说,如果某些命令没有正确返回或者逻辑状态错误,系统会下发大量的TEST UNIT READY命令,所以是不是得抓包看哪个命令没有被正确处理

850963185ff7b01c2.png

使用特权

评论回复
986672437|  楼主 | 2022-9-8 08:49 | 显示全部楼层
mijinbao 发表于 2022-9-7 16:53
MSC设备的Bulk数据交换流程是CBW->DATA->CSW,TestUnitReady(0x00)命令会在无其他数据传输时会定时发送, ...

TestUnitReady函数中我直接给它返回了0,这个感觉应该没啥问题
3.png

使用特权

评论回复
986672437|  楼主 | 2022-9-8 09:06 | 显示全部楼层
mijinbao 发表于 2022-9-7 17:15
还有我看网上说,如果某些命令没有正确返回或者逻辑状态错误,系统会下发大量的TEST UNIT READY命令,所以 ...

这个确实如你所说的,就是主机发送的0x28 READ命令设备会没有响应,然后设备发出TEST UNIT READY命令,这个时候设备就已经对主机任何的命令就没响应了,设备收不到答复,就直接断开这个连接,返回no device的状态。然而最大的问题就是它并不是一开始就没响应,而是和设备数据交换了几秒钟后就没响应了。现在的现象是有时候不知道是什么原因,这次插入电脑后它能正常工作,一直对电脑发出的命令做出响应,然后电脑正确枚举连接这个U盘,通过电脑对它进行读写访问操作只要你不拔下来它就一直正常工作,没有一点问题,就如我下图显示的,趁着这次没问题,我通过电脑格式化后,拷贝了一些文件进去;但大多数时候是插上电脑后,刚开始电脑的获取Inquiry描述和0x28读指令都有响应,但读个几个扇区后设备就没有任何响应了,电脑就会发出00指令判断设备是否就绪,电脑主机收不到响应就会把这个设备停掉,返回no device的状态
3.png
2.png
4.png

使用特权

评论回复
986672437|  楼主 | 2022-9-9 11:25 | 显示全部楼层
有人吗,有人吗

使用特权

评论回复
weifeng90| | 2022-9-11 14:01 | 显示全部楼层
楼主解决没

使用特权

评论回复
gouguoccc| | 2022-9-11 18:13 | 显示全部楼层
不懂,帮顶一下。

使用特权

评论回复
986672437|  楼主 | 2022-9-13 17:37 | 显示全部楼层

通过串口打印输出,现在逐级一层一层网上找到问题出在哪了,就是这个对CBW解码函数中,usbd_rxcount_get (udev, MSC_OUT_EP)这个函数返回值有时会出现为0的状况,这个返回值本来应该为0x1F,也就是BBB_CBW_LENGTH宏定义的值,这样就会导致调用msc_bbb_abort (udev)这个函数中止传输,所以主机长时间接收不到返回信息,多次尝试后没有响应则会停掉这个设备,显示no device,具体可以看我贴的图。

1.png
2.png

使用特权

评论回复
986672437|  楼主 | 2022-9-13 17:38 | 显示全部楼层
986672437 发表于 2022-9-13 17:37
通过串口打印输出,现在逐级一层一层网上找到问题出在哪了,就是这个对CBW解码函数中,usbd_rxcount_get  ...

目前也只是发现了问题出在哪,具体怎么解决还没有思路,希望有懂的可以指导一下,感谢感谢

使用特权

评论回复
986672437|  楼主 | 2022-9-15 17:32 | 显示全部楼层
自己再捞一捞,有人懂这个嘛

使用特权

评论回复
tpgf| | 2022-10-7 10:28 | 显示全部楼层
底层的NAND驱动是移植的别人写好的 这个可以确定是可以直接使用的吗

使用特权

评论回复
qcliu| | 2022-10-7 10:50 | 显示全部楼层
返回值为0是CBW解码函数的错误码之一吗

使用特权

评论回复
drer| | 2022-10-7 11:00 | 显示全部楼层
设备发出TEST UNIT READY命令后,主机应该回复什么指令呢

使用特权

评论回复
coshi| | 2022-10-7 11:12 | 显示全部楼层
重新格式化之后的一段时间之内是不是还是好好的呢

使用特权

评论回复
kxsi| | 2022-10-7 11:22 | 显示全部楼层
这种指令和时序之间有严格的对应关系吗

使用特权

评论回复
wiba| | 2022-10-7 11:35 | 显示全部楼层
这种情况的出现和硬件连接有一定的关系吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

0

粉丝