完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用STM32串口控制376S当USB host,在发送完数据给USB设备后能正常的收到设备返回的前64个字节数据,再次启动接收,设备就返回NAK了,具体的代码实现如下:
//设置重试次数-不重试,NAK状态返回 Write_CH376_Cmd(CMD_SET_RETRY); Write_CH376_Data(0x25); Write_CH376_Data(0x00); endp6_mode = endp7_mode=0x80; //DATA0发送器 sta = 0; WR_USB_Data(4,(unsigned char *)"001?"); //USB host 发送此命令给USB 设备,设备会返回200个字节的数据 Toggle_send(); sta = Issue_token(Out_Num,DEF_USB_PID_OUT); if(sta == USB_INT_SUCCESS) { Uart3_Rx = 0; for(i=0;i<0xFF;i++) { sta = 0; Toggle_recv(); sta = Issue_token(In_Num,DEF_USB_PID_IN); if(sta == USB_INT_SUCCESS) //前面两次可以返回)0X14,之后就之一返回NAK { memset(Uart3.RX_BUF,0,BUFF_LEN); //Uart3.RX_BUF:串口接收数据缓冲区 Uart3_Rx = 0; //Uart3_Rx:串口中断次数 Write_CH376_Cmd(CMD_RD_USB_DATA0); USB_Delay_us(380000); //由于使用的时串口中断接收,所以在发送完命令后 延时一段时间,等待串口接收完设备DATA0或者DATA1的数据。 sta = 0; } } } void Toggle_recv(void) { Write_CH376_Cmd(CMD_SET_ENDP6);//向CH375的端点缓冲区写入准备接收的数据 Write_CH376_Data(endp6_mode); endp6_mode^=0x40; USB_Delay_us(20); } uint8_t Issue_token(uint8_t endpnum, uint8_t pid) { Write_CH376_Cmd(CMD_ISSUE_TOKEN); //向CH375的端点缓冲区写入准备发送的数据 Write_CH376_Data((endpnum<<4)|pid);//高4位目的端点号, 低4位令牌PID return (Wait_interrupt()); } 该如何修改一下或者哪里有问题才能解决此问题把设备返回来的数据正常全部接收下来?谢谢了。 |
|
相关推荐
3个回答
|
|
你好,当主机发IN包接收到数据后需要切换同步标志实现数据同步,你可以在if(sta == USB_INT_SUCCESS) 下添加toggle_recv()函数切换同步标志。
|
|
|
|
有切换同步标志啊,那个for循环里面就是有切换同步标志的,for循环里面就只能接收到前两个32字节数据的接收,第三次切换完同步标志Toggle_recv();,发送完Issue_token(In_Num,DEF_USB_PID_IN)命令后中断就一直返回NAK了
|
|
|
|
您好,看代码初步判断流程出问题的概率不大,如果是一直返回NAK,有可能是设备确实没有准备好数据返回。可以在电脑端用Bus Hound软件看一下在正常通讯下数据交互的情况,对比一下两种情况下是不是少做了什么操作。
|
|
|
|
只有小组成员才能发言,加入小组>>
480 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2876 浏览 2 评论
2363 浏览 1 评论
821浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
653浏览 1评论
502浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
367浏览 1评论
645浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 17:15 , Processed in 1.146277 second(s), Total 82, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号