完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
USB_RX_LE偶尔会出现64个长度的情况,按理说接收缓冲区只有64个,这种现象正常,如何读取该值?
另外该读取后不会自动清0,它在什么时候会被置0?谢谢。 |
|
相关推荐
5个回答
|
|
结合你的两个问题:1、长度出现超过64字节 2、读取后不变为0
应该是你在非必要读取USB_RX_LEN的时候去读取了这个寄存器。 USB_RX_LEN我们只在“必须读取”的时候才去读他的值:产生USB中断,且中断原因是成功完成了一次OUT、SETUP事务,也就是成功收到一包数据的时候。这在代码中是有体现,这个寄存器只在USB中断函数中,事务为OUT、SETUP的switch-case分支中被读取,这个时候USB_RX_LEN应该总是小于或等于端点描述符中指示的端点长度。 |
|
|
|
感谢回复。目前看该问题可能和USB没有关系。
使用同一电脑的其他USB口测试发现没有问题,后来测试供电电压,发现芯片脚在使用有问题的USB口时,只有3.1V,芯片工作在56MHz,从而导致芯片内部寄存器/内存数据时不时出现混乱,并且偶然出现自重启现象,通过打印PCON中的bRST_FLAG0/1发现是检测到电压低导致复位。 采用其他USB口供电,有问题的USB口只接数据D+/D-,测试芯片脚电压3.3V,未再出现问题。后使用两片3V3 LDO并联,同时使用有问题的USB口供电,测量芯片管脚供电3.3V,继续测试也没有出现问题,这基本交叉验证了该问题是USB口供电不足导致的。 手册中只提供了Fsys=12MHz 时的Vpot电压大约在2.7V,所以理论上讲3.1V的电压应该不会导致芯片内部寄存器错乱,并复位。芯片工作在 56MHz 时,是否有相关数据?谢谢 |
|
|
|
两种USB口,出现IO电压低的时候的VBUS电压都是多少的?
还有要注意芯片供电电路的接法,5V供电和3.3V供电的电路有所不同,可能也是其中一个原因。(电路设计5V供电,某一时刻外部供电过低,低于3.6V,就会涉及到供电方式这一问题) |
|
|
|
3V3供电,不使用芯片自带的LDO。有问题的USB口VBUS在4.85V左右,正常的USB口VBUS在5.1V左右。
但是因为当前的USB线缆质量参差不齐,如果使用较长的USB延长线,也是可能降低到该电压的。如果能有56MHz的数据就能更好地解释该现象了。 刚刚又测试了不同批次的芯片都有此现象。 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
467 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2871 浏览 2 评论
2359 浏览 1 评论
810浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
637浏览 1评论
495浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
359浏览 1评论
634浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 07:02 , Processed in 1.150192 second(s), Total 87, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号