今天自己做esp32-wrover-B的開發板,在網上采用了ch340c的自動下載電路。下載后,發現一個問題:在燒入程序后發現,燒入程序正常。但一旦掉電,再次上電后,發現開發板處於 DOWNLOAD_BOOT 模式。
串口返回的數據時發現僅返回了一段文字:
rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2))
waiting for download
最后查了很久,從這里找到答案:https://blog.csdn.net/milk_paramecium/article/details/113063642
因為IO0口被拉到了低電平。但網上資料說進入這個模式需要將IO0口手動接地,拉低電平,而我手上的這個默認就是低電平。最后將IO0口與3.3V連接后恢復正常。
糾結電路為何直接進入DOWNLOAD_BOOT的模式。懷疑是工程底層沒有配置對,然后反復測試,發現ch340未識別時,IO0是3.3V,一旦CH340被電腦識別后,然后IO0是0V。推測是CH340導致IO0不正常。最后照着這個方向去搜尋答案。發現一篇可能是答案(因為還未測試):https://zhuanlan.zhihu.com/p/145369083?from_voters_page=true
大致總結一下:由於這個自動下載電路構成RS觸發器后,
當不同時為0或者1時:
EN = RTS
IO0 = DTR
然而進入下載模式則需要如下的序列
1. IO = 0; EN = 0
2. IO = 0; EN 0 -> 1
我們看下esptool.py里下載相關的代碼
# issue reset-to-bootloader:
# RTS = either CH_PD/EN or nRESET (both active low = chip in reset
# DTR = GPIO0 (active low = boot to flasher)
#
# DTR & RTS are active low signals,
# ie True = pin @ 0V, False = pin @ VCC.
if mode != 'no_reset':
self._setDTR(False) # IO0=HIGH
(1) self._setRTS(True) # EN=LOW, chip in reset
//設置DTR = 1; RTS = 0, EN = 0; IO0 = 1
time.sleep(0.1)//延時100ms
(2) self._setDTR(True) # IO0=LOW
(3) self._setRTS(False) # EN=HIGH, chip out of reset
//設置DTR = 0; RTS = 1,EN = 1; IO0 = 0
time.sleep(0.05)/延時50ms
(4) self._setDTR(False) # IO0=HIGH, done
在(2)的過程中IO0由1->0,EN由0->1的時間為多少呢?
如圖所示:
CHIP_PU即EN,代碼中23階段之后會延時一段時間,而EN由於電容充電,電平並不會立馬變為高電平,而是緩慢上升,以如上參數為例計算,同時參考芯片電氣參數特性
高電平為0.75VDD,則達到高電平按照如下公式計算:
電容的充放電的時間要14ms,代碼中延時了50ms為了等待EN由0->1。
在(1)需要等待一段時間,讓電容放電,保證EN電平下降到電平0,才能保證系統正常復位,在代碼中預留了100ms的等待時間。
我的開發板中C22為100nF充電時間為140ms。明天去試驗一下是否是這個問題。
9.14
今天測試了一下,發現問題並不是出現在C22上,我更換了10uf,1uf,100nf。都沒有使掉電跳出下載模式
根據昨天的資料查找。發現esptool.py的代碼中
DTR RTS EN IO0
(1) 1 0 0 1
(3) 0 1 1 0
(4) 1 X X 1
第四步需要將DTR置為1,IO0置為1
而我的原理圖如下所示
實際測試中,在測ch340c的DTR引腳
1.在掉電后,上電去識別串口:
2.在上電去下載,然后連接串口:
可以發現DTR在掉電識別時和上電下載的狀態是不一樣的,DTR在上電后,連接串口,變成低電平,也使IO0變成0.
最后詢問同學發現是,串口連接助手中有一個選項
對,流控,把流控選擇RTS就可以了。好像選擇這個可以控制ch340的RTS。
至於為什么會使掉電再次上電串口信息流正常,下次再來研究,現在要繼續調試了。
原文借鑒:https://zhuanlan.zhihu.com/p/145369083?from_voters_page=true
https://blog.csdn.net/milk_paramecium/article/details/113063642