完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
您好,
我在使用CH32V307 提供的例程学习使用这个高速usb的外设。在使用例程时我碰到了几个问题。 1)在端点初始化 USBHS_Device_Endp_Init 的时候有 USBHSD->UEP1_TX_LEN = 512; USBHSD->UEP1_TX_CTRL = USBHS_EP_T_AUTOTOG | USBHS_EP_T_RES_ACK; USBHSD->UEP1_RX_CTRL = USBHS_EP_R_AUTOTOG | USBHS_EP_R_RES_ACK; 这里是不是应该吧TX_LEN设为0,并且用将TX设为NAK呢?初始化时并没有数据才对? 2)在USB_CLEAR_FEATURE这段代码中我看到了 case 0x02: /* SET Endp2 Rx to USBHS_EP_R_RES_ACK;USBHS_EP_R_TOG_0 */ USBHSD->UEP2_TX_CTRL = USBHS_EP_R_RES_ACK | USBHS_EP_R_TOG_0; break; 这里的UEP2_TX_CTRL应该为UEP2_RX_CTRL吧,这是单纯打错了吧。抓个小虫 3)我试着把这个例程里EP1,EP2的TX全部设为NAK,并且把原本把EP1 RX 数据转到TX数据的代码注释掉后,发现我如果从主机请求数据,每两次中一次是timeout(正确的),但是另一次会返回空字符或者不定的字符。请问这是什么原因?在端点终端过后硬件会把之前设置的NAK清零成ACK吗?代码如下: else if( end_num == 1 ) { if( rx_token == PID_IN ) { USBHSD->UEP1_TX_CTRL &= ~USBHS_EP_T_RES_MASK; USBHSD->UEP1_TX_CTRL |= USBHS_EP_T_RES_NAK; } else if( rx_token == PID_OUT ) { rx_len = USBHSD->RX_LEN; for( i=0; iUEP1_TX_LEN = rx_len; //USBHSD->UEP1_TX_CTRL &= ~USBHS_EP_T_RES_MASK; //USBHSD->UEP1_TX_CTRL |= USBHS_EP_T_RES_ACK; USBHSD->UEP1_RX_CTRL &= ~ USBHS_EP_R_RES_MASK; USBHSD->UEP1_RX_CTRL |= USBHS_EP_R_RES_NAK; } } 这部分可能是我对USB或者这个芯片理解不够。麻烦解答一下谢谢。 |
|
相关推荐
2个回答
|
|
|
关于第3点似乎不是单片机的问题,是我用的驱动的问题。我HOST用pyusb测试的,似乎在Windows上如果用libusbk驱动有问题。后来换用winusb,或者linux上用自带的(应该是libusb)就没问题。打扰了。
|
|
|
|
|
|
您好,关于问题1,该例程是为了测试数据收发的,一有IN包来就有数据发送,因此在初始化时LEN就配置为512并配置为ACK;关于问题2,这个地方UEP2_TX_CTRL应该为UEP2_RX_CTRL,感谢你的反馈,例程已修改。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
350 浏览 0 评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
863 浏览 0 评论
1461 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
3418 浏览 2 评论
2822 浏览 1 评论
安卓手机支持外接otg扩展坞 然后使用ch340+ch9329控制电脑吗
1808浏览 1评论
1461浏览 1评论
350浏览 0评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
863浏览 0评论
468浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 09:19 , Processed in 0.629917 second(s), Total 44, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1046