完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近我在用 CH340B 制作一个 UEFI Shell 助手工具(开源硬件),但是在设计时发现串口无法达到需要的波特率。最高只有 115200*2 和我预期的 1Mhz 相差甚远。为了排除我代码问题,特别设计测试程序如下:
word checksum=0; word counter=0; unsigned long elsp=0; void setup() { Serial.begin(1000000); delay(300); } void loop() { while (Serial.available()) { char c=Serial.read(); checksum=checksum+c; counter++; elsp=millis(); } if (((millis()-elsp>1000)&&(elsp!=0))) { Serial.print("Received ");Serial.println(counter); Serial.print("Checksum ");Serial.println(checksum,HEX); checksum=0; counter=0; elsp=0; } } 这个代码是运行在 ESP32 上的 Arduino 代码,动作非常简单:不断从串口接收数据,如果1s以内没有数据就将收到数据的 checksum 和收到的数量打印出来。测试使用你们家的工具发送一个 64K 文件,其中65535个0,1个为1因此checksum 输出应该为1。下面是我遇到的问题: 这是我制作的设备,我使用 CH340B 芯片: 测试可以看到每次发送都会有多接收漏数据和出错的情况,如果我将波特率降低为 115200 那么是完成正常的。 下面是我的电路图 CH340B 在背面, RX/TX 有一个过孔连接到 ESP32上: 作为对比,我进行如下实验 1.使用DFRobot 的 FireBeetle, 它用的是 CH340C 的芯片: 同样的代码,运行结果如下,可以看到没有问题。这个实验能够说明前面的测试代码没有问题。 2.使用nanoESP32 开发板,测试结果和前面类似,在1M波特率下工作一塌糊涂,这个使用的是 Ch340C 芯片 3. ESP32-S2-Saola-1 乐鑫科技 ESP32-S2 开发板,这是 ESP32 官方开发板使用的是 CP210X 的芯片,可以看到工作良好。 所以,我现在不清楚我遇到的问题是什么原因导致的。我觉得有如下可能性: 1. 假的 CH340B; 2. 布线问题. 我发现之前的也有同样的问题,例如:CH340B 在顶部,也有同样的现象 希望得到大佬的指点,以便解决这个问题。谢谢! |
|
相关推荐
8个回答
|
|
您好,确认串口信号线是否直连,若串联电阻或经过三极管等均会影响其速率,根据上面的pcb,串口信号受布线影响可能性很小。为方便排查问题,可以考虑在ESP32的接收引脚同时再并联接到另一个USB转串口芯片的接收引脚(用于监控),这样可以明确是否为发送本身问题。
|
|
|
|
|
|
|
|
进一步调试,忽然想起来我之前有打过单独的 CH340B 的板子,于是直接测试 Loop.
正面如下,这个板子足够小,因此应该也没有布线太长的问题: 背后直接用跳线将TX 和 RX 接到一起: 测试方法和之前的相同,可以看到有丢失数据的情况发生。比如:发送 30576 字节,但是接收到的只有 30557字节。再右侧能看到,中间有丢失逗号的情况发生。 |
|
|
|
您好,请问测试时右下角定时时间设置多少,还是发送区中一次发送30576字节?若为单次发送大数据,串口接收溢出的可能性较高。另,有时间可以做下如上的数据监控测试。或者也可以将您测试的设备寄给我做对比验证,排查问题点。
|
|
|
|
一次性发送 32K 数据,然后测试多次。
我使用逻辑分析仪查看了, 每隔 1024 字节会有4ms的间隔,我猜测你们内部缓冲是 1024字节的是吧? 然后我设置每次发送 1024字节,有相同的问题。这个能排除串口接收溢出了吧? 这几天我从立创商城购买了 CH340B 和 CH340C , 然后重新做了一个 PCB 再试试。 如果不好用还请帮忙。谢谢! |
|
|
|
我重新在立创商城下的订单,购买的 CH340B 和 CH340C 的芯片,惊奇的发现他们表现差别很大,CH340C 明显好于 B。
例如,一次性发送 64K 的文件, 1M波特率,Ch340B 就会出现丢失数据的情况: 但是 CH340C 不会 二者使用相同的 PCB, Loopback 测试: 请问他们在使用上,B的需要做特别设定吗? |
|
|
|
您好,使用CH340B不需要特殊设定。看现象,CH340B应为串口数据溢出。另,串口发送数据是不会发生丢失的,只会出现在接收侧。如果要满足高波特率通讯,也可以考虑使用收发效率和支持速率更高的新一代USB转串口芯片:CH343。
http://special.wch.cn/zh_cn/produce/ 另,关于一开始讨论的ESP32接收数据丢失/出错现象并非同一类问题。因USB转串口侧发送数据不会丢失,若接收不完整,怀疑是误差率的问题可能性较高。 |
|
|
|
您好,我前后说的是同一个问题。开始我在 ESP32 上使用你们家的 CH340B 发现有问题,
然后进一步分析发现 CH340 自身 loopback 都能看到同样的现象。前后说的是同一个事情的, 后者是前者分析的结果。 请问 CH340B 接收缓冲区有多大? 我可以修改ESP32 上程序代码来避免这个问题。 谢谢! |
|
|
|
只有小组成员才能发言,加入小组>>
514 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2901 浏览 2 评论
2394 浏览 1 评论
858浏览 2评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
399浏览 1评论
678浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
412浏览 1评论
511浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 14:46 , Processed in 1.207953 second(s), Total 63, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号