我们用CH569W开发大容量存储设备,有些SCSI命令不支持时,需要返回STALL。这样调用USB30_IN_Set(ENDP_2, DISABLE, STALL, 0, 0);将IN端口设置为STALL,此时主机返回了C0000011错误,并产生RESET,出现掉盘,这与预期不符。设想应该返回USTS c0000004 stall pid错误代码,而且不能RESET。这个是什么原因?怎么调用才能返回STALL而不产生复位?
用这个例程测试,其中USB函数库已经更新
使用以上EXAM中的库,仍然无法返回上传端点STALL状态。
还是这样调用:USB30_IN_Set(ENDP_2, DISABLE, STALL, 0, 0);
主机端返回了命令超时或C0000011错误
这个CH569的USB3资料有点少啊,不管是芯片手册还是库都没有详细文档,在调试遇到问题时候有点无从下手。有没有详细点的资料啊?
现在用的这个USB3的库版本号读出来是32
上传端点STALL状态设置不成功的问题,把代码中的printf输出全部注释掉就好了(这个原因比较奇怪)。
现在又有新问题,IN端点(ENDP_2)返回STALL成功以后,收到USB_CLEAR_FEATURE,将IN端点(ENDP_2)恢复为ACK状态。不知什么原因主机又返回了C0000011。
希望能够看到USB3处理端点STALL状态的例程参考,谢谢!
谢谢!还有一个很奇怪的现象,设备收到USB_SET_FEATURE(00 03 30 00 00 00 00 00),在处理USB_SET_FEATURE的地方稍有延时,就会导致通信卡顿8s左右才恢复正常。这里仅仅只有两条if判断,而且都不符合进入条件。
把这两条if注释掉就没这个现象了。
试过在这里只有printf输出一点信息,也会导致通信卡顿现象。
@TECH5 "预计本周提供包括端点0、非0端点响应stall的示例代码。"麻烦问一下,这个示例代码有了吗?
您好,留一个邮箱,这边邮件发送给你。
因为是测试代码,不具备完整功能,不便直接贴到帖子里,避免给别人造成误解。感谢。
@TECH5 我的邮箱是这个:个人信息保护,已隐藏,感谢!
邮件已发送,请注意查收。
通常一个stall的处理包含很多步骤。
1、端点传输事务上应答stall状态。
2、可能存在clear feature请求的发生,用于复位端点状态,这取决于主机行为。
3、如果stall行为发生于某一个 类协议 的基础上,可能还需要在后面针对 类协议 进行后续的处理。
单纯的端点应答stall的代码实现: