最近我在用 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
那么是完成正常的。
下面是我的电路图
![](https://file.elecfans.com/web2/M00/4E/FA/pYYBAGK9sp-AGW9zAAF_rMOiHho940.png)
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
在顶部,也有同样的现象
希望得到大佬的指点,以便解决这个问题。谢谢!