[求助]关于CH372外置固件编程枚举过程

一下是CH372的中断请求:

USB总线复位2 USB总线复位2 USB总线复位2 USB总线复位2 端点0接收数据成功,SETUP成功 读取端点0 8字节数据: 0x80 0x6 0x0 0x1 0x0 0x0 0x40 0x0 主机发来USB标准输入请求:获取描述符请求———设备描述符 端点0接收数据成功,OUT成功 端点0发送数据成功,IN成功 USB总线复位2 USB总线复位2 端点0接收数据成功,SETUP成功 读取端点0 8字节数据: 0x80 0x6 0x0 0x1 0x0 0x0 0x40 0x0 主机发来USB标准输入请求:获取描述符请求———设备描述符 端点0接收数据成功,OUT成功 端点0发送数据成功,IN成功 端点0接收数据成功,SETUP成功 读取端点0 8字节数据: 0x0 0x5 0x1 0x0 0x0 0x0 0x0 0x0 主机发来的USB标准输出请求:设置地址 端点0接收数据成功,OUT成功 端点0发送数据成功,IN成功 USB总线复位2 USB总线复位2 端点0接收数据成功,SETUP成功 读取端点0 8字节数据: 0x80 0x6 0x0 0x1 0x0 0x0 0x40 0x0 主机发来USB标准输入请求:获取描述符请求———设备描述符 端点0接收数据成功,OUT成功 端点0发送数据成功,IN成功 端点0接收数据成功,SETUP成功 读取端点0 8字节数据: 0x0 0x5 0x1 0x0 0x0 0x0 0x0 0x0 主机发来的USB标准输出请求:设置地址

在主机发送获取描述符请求后MCU返回了描述符的前8个字节,在接下来的IN成功后没有继续返回剩余的描述符,然后总线复位了2次,接着主机又请求描述符,后面主机请求设置地址0x01,在IN成功后MCU对CH372设置地址,接着主机又复位了两次总线,又请求描述符了 到最后主机提示地址设置失败,枚举失败 不知道哪里出问题了,

CH372外部固件模式模拟设备,在获取设备描述符的时候主机发送setup命令包,接着发送IN包,CH372先把前8个字节数据上传主机(CMD_WR_USB_DATA3),接着主机还会发送IN包,CH372还需要把剩余的设备描述符上传。你的问题是设备描述符只传了8个,没有传完整导致主机一直总线复位。


主机发来setup命令包,端点0接收数据成功,SETUP成功 读取端点0 8字节数据: 0x80 0x6 0x0 0x1 0x0 0x0 0x40 0x0 然后我返回了前8字节的设备描述符 接着就提示端点0接收数据成功,OUT成功,这一步是为什么,这个OUT包也是主机发出的吗,用RD_USB_DATA也读不到数据 然后提示端点0发送数据成功,IN成功,这个IN包是主机发出的,然后我应该继续返回剩余的10字节的设备描述符吗,但是端点0上传缓冲区一次只能发送8字节数据,先发送8字节剩余设备描述符后 主机还会发送IN包吗?然后继续返回剩下的2字节数据,但是为什么主机发的setup包请求设备描述符的数据阶段要求返回0x40(64)字节的数据啊


第一次的OUT应该没有才对,这一步应该读取不到数据,计算机一开始并不知道你的设备描述符有多少个字节,所以先发送0X40个字节的数据,如果你设备描述符有18个字节,那么你只要前面每包为整包数据,那么主机就不会不断的来问你要数据,当传输的包小于8个字节的话或者主机文件要数据,你返回了一个0长度包数据的话,主机认为你的数据传输完成了。可以进行下一次控制传输了。


为什么在Setup之后会有OUT呢


这个建议你查下在读取中断状态之后中断引脚有没有拉低,下面这幅图是标准的枚举过程,只是这个设备的控制端点为64字节:2014658555525.jpg


这个是什么软件


这是我们公司USB分析仪监控软件USB Monitor:http://wch.cn/bbs/View.asp?S=101&I=41382


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