完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
以下是我的发送与接收函数,不知道是哪里不对,设备端始终返回NAK。我可以确定的是,设备端如果正常收到数据,是不会发送NAK的。在另外一公司芯片(具体芯片就不说了,免得说我打广告)上能正常通信,CH573不行。
请问,我这是什么问题呢。 uint8_t QueryRecv(uint16_t loop_value) { uint8_t s = 0, len = 0; R8_UH_RX_CTRL = RB_UH_R_TOG | RB_UH_R_AUTO_TOG; while (loop_value--) { s = USBHostTransact((USB_PID_IN << 4) | 0x81, R8_UH_RX_CTRL, 200000/20); PRINT("IN %02x %drn", s, loop_value); if (s == 0) { len = R8_USB_RX_LEN; PRINT("RECV>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); printf_byte(pHOST_RX_RAM_Addr, len); printf_byte_str(pHOST_RX_RAM_Addr, len); PRINT(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); datacallback(pHOST_RX_RAM_Addr, len); return 0; } DelayMs(1); } return 1; } void QuerySend(uint8_t *buf, uint8_t len, uint8_t flag) { uint8_t s = 0, i=0; memcpy(pHOST_TX_RAM_Addr, buf, len); R8_UH_TX_LEN = len; R8_UH_TX_CTRL = RB_UH_T_TOG | RB_UH_T_AUTO_TOG; s = USBHostTransact((USB_PID_OUT << 4) | 0x01, R8_UH_TX_CTRL, 200000/20); PRINT("SEND %02x %d==========================rn", s, flag); printf_byte(buf, len); PRINT("rn"); printf_byte_str(buf, len); PRINT("rn"); PRINT("====================================rn"); if (s == 0 && flag == 0x01) { DelayMs(1); QueryRecv(1000); } } 烦请大佬费神了 |
|
相关推荐
1个回答
|
|
|
发送和接收函数大体逻辑没有问题,但是要注意每次调用的时候,同步标志tog都会刷新成1,要注意和上一次调用后的同步标志的状态同步。
不同设备,可能会经历不同的枚举过程才能够开始正确传输数据,CH573例程的枚举做到了“SetUsbConfig”,针对设备类看一下是否又缺少的类命令。 可以分享一下操作的设备是什么,看我们是否有相关的操作经验。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
347 浏览 0 评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
861 浏览 0 评论
1461 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
3417 浏览 2 评论
2822 浏览 1 评论
安卓手机支持外接otg扩展坞 然后使用ch340+ch9329控制电脑吗
1808浏览 1评论
1461浏览 1评论
348浏览 0评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
863浏览 0评论
468浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 06:15 , Processed in 0.627600 second(s), Total 44, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1288