esp32-wrover-B的開發板燒入程序不正常


  今天自己做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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM