mDiskInquiry返回总是NAK[原创]

我用的是hostdisk.c,系统为小端格式

除了底层函数的驱动函数变了,其他的没有改变 还有系统为72M晶振,所以延时us函数改了下

问题简要说明: 主函数进行到 s = mDiskCapacity( buf ); /* 获取磁盘容量 */ 就会死机 跟进去发现 /* 从USB盘的IN端点输入CSW */ 返回:Nak

现象: 发送以下31个字节(发送完成后马上读出来的) 55 53 42 43 74 03 74 03 24 00 00 00 00 00 80 00 06 12 00 00 00 24 00 00 00 00 00 00 00 00 00 /* 向USB盘的OUT端点输出CBW */ 返回:sucess/* IN数据同步,操作成功 */ CH374回复以下36个字节 00 80 00 06 12 00 00 00 24 00 00 00 00 00 00 00 00 00 00 25 34 00 08 60 01 00 20 60 05 00 20 10 00 00 00 10 /* 从USB盘的IN端点输入CSW */ 返回:Nak

这是程序的串口调试信息,有人可否解释下为什么总是返回NAK呢? -------------------------- Wait Device In Reset Device Start Full-Speed Device GetDeviceDescr: *C:R *C:I *C:S 12 01 00 02 00 00 00 40 D6 10 01 11 00 01 00 01 02 01 SetUsbAddress: *C:R *C:S

GetConfigDescr: *C:R *C:I *C:S *C:R *C:I *C:S 09 02 20 00 01 01 00 80 FA 09 04 00 00 02 08 05 50 00 07 05 01 02 40 00 00 07 05 82 02 40 00 00 SetUsbConfig: *C:R *C:S

Disk Inquiry: *B:C=12H *B:I=24 *B:S


邮件已经给您发送,请查收。


刘工,你好! 收到了你的邮件,做了一下测试,问题依旧。 我的us延时函数应该没问题的,不知道哪里出的问题。

一楼描述的有点错误: s = mDiskInquiry( buf ); /* 获取磁盘特性 */ 就会死机 不好意思,我粘错了


你把你的U盘接到计算机上面去,然后使用“BUSHOUND”这个软件跟踪下数据,看下在计算机上面是怎么操作的。然后按照计算机的操作步骤来操作。


对于USB2.0协议不是很熟悉,mDiskInquiry这个函数发送 55 53 42 43 74 03 74 03 24 00 00 00 00 00 80 00 06 12 00 00 00 24 00 00 00 00 00 00 00 00 00 可不可以帮忙看下这些字节对么?

CH374回的数据应该不对,对的应该是“USB 2.0 (HS) FLASH DISK”之类的信息,所以我怀疑我发送的数据就是错的~


你不需要了解很多,你直接把U盘接到计算机上面,采用BUSHOUND这个软件去看下数据就知道你发的数据是否有问题了。我们CH374发的数据应该和计算机上面是一样的。


但是BUSHOUND软件只能看到指令 12 00 00 00 24 00 00 00 还有长度,其他的信息都被解析了,不能看到底层的数据?


完全可以看到啊,你设置不正确,把缓冲区开大点。


研究了BUSHOUND好长时间,仍然是发送的数据只能看到 12 00 00 00 24 00 这6个字节,其他的都看不到。是不是这个软件不能看到发送端的全部数据? 回的数据应该是全了,但是现在的问题是回的数据不正确,所以急需确认是否主机发送的数据就是错的? 能不能把374与单片机的数据通讯协议完整版的发给我一份呢?


这个不是CH374的通信协议,你去网上搜索MASSUFI协议的PDF文档以及MASSBULK这2个协议。


我看了协议了,确实很复杂~

如果可以的话,您能不能帮我看下一楼的底层数据对不呢?回头会研究这个协议的,只是现在我想验证下操作U盘没问题就可以~或者是您提供我一份从U盘插入至初始化正常期间单片机与374的所有底层交互数据也可以,有了底层数据只要程序一样应该可以分析出哪里的问题吧~

麻烦您了!


CH374回复以下36个字节 00 80 00 06 12 00 00 00 24 00 00 00 00 00 00 00 00 00 00 25 34 00 08 60 01 00 20 60 05 00 20 10 00 00 00 10 这个数据本身是正确的,没有错误。 我们提供的函数对用户来说不需要任何修改,你怎么判断返回NAK的?


刘工,调试记录比较多,发你邮箱了~


你把你的工程发给我,另外你换个U盘测试一下。


我有三个U盘都试过了,都是一样的现象。

谢谢刘工,晚上发吧~现在不方便


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