最近我在用 CH340B 制作一個(gè) UEFI Shell 助手工具(開(kāi)源硬件),但是在設(shè)計(jì)時(shí)發(fā)現(xiàn)串口無(wú)法達(dá)到需要的波特率。最高只有 115200*2 和我預(yù)期的 1Mhz 相差甚遠(yuǎn)。為了排除我代碼問(wèn)題,特別設(shè)計(jì)測(cè)試程序如下:
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; ????} }
這個(gè)代碼是運(yùn)行在 ESP32 上的 Arduino 代碼,動(dòng)作非常簡(jiǎn)單:不斷從串口接收數(shù)據(jù),如果1s以內(nèi)沒(méi)有數(shù)據(jù)就將收到數(shù)據(jù)的 checksum 和收到的數(shù)量打印出來(lái)。測(cè)試使用你們家的工具發(fā)送一個(gè) 64K 文件,其中65535個(gè)0,1個(gè)為1因此checksum 輸出應(yīng)該為1。下面是我遇到的問(wèn)題:
這是我制作的設(shè)備,我使用 CH340B 芯片:
測(cè)試可以看到每次發(fā)送都會(huì)有多接收漏數(shù)據(jù)和出錯(cuò)的情況,如果我將波特率降低為 115200 那么是完成正常的。
下面是我的電路圖
CH340B 在背面, RX/TX 有一個(gè)過(guò)孔連接到 ESP32上:
作為對(duì)比,我進(jìn)行如下實(shí)驗(yàn)
1.使用DFRobot 的 FireBeetle, 它用的是 CH340C 的芯片:
同樣的代碼,運(yùn)行結(jié)果如下,可以看到?jīng)]有問(wèn)題。這個(gè)實(shí)驗(yàn)?zāi)軌蛘f(shuō)明前面的測(cè)試代碼沒(méi)有問(wèn)題。
2.使用nanoESP32 開(kāi)發(fā)板,測(cè)試結(jié)果和前面類似,在1M波特率下工作一塌糊涂,這個(gè)使用的是 Ch340C 芯片
3. ESP32-S2-Saola-1 樂(lè)鑫科技 ESP32-S2 開(kāi)發(fā)板,這是 ESP32 官方開(kāi)發(fā)板使用的是 CP210X 的芯片,可以看到工作良好。
所以,我現(xiàn)在不清楚我遇到的問(wèn)題是什么原因?qū)е碌摹N矣X(jué)得有如下可能性:
1.????? 假的 CH340B;
2.????? 布線問(wèn)題. 我發(fā)現(xiàn)之前的也有同樣的問(wèn)題,例如:CH340B 在頂部,也有同樣的現(xiàn)象
希望得到大佬的指點(diǎn),以便解決這個(gè)問(wèn)題。謝謝!