串口自動下載電路實質(zhì)為:上位機(jī)通過控制 USB 轉(zhuǎn)串口芯片 DTR、RTS 引腳電平,配合硬件電路使進(jìn)入芯片下載模式
自動下載原理
串口下載的需要依賴 bootload,其流程為在芯片中先下載一個 bootload , 進(jìn)入 bootload 后檢查是否進(jìn)入下載模式,如果未進(jìn)入下載程序,則跳轉(zhuǎn)到實際程序運行。
根據(jù)進(jìn)入 bootload 的方式可分為兩種,一種為進(jìn)入 bootload 由外部引腳控制,例如 STM32 和 ESP8266。
一種是系統(tǒng)復(fù)位時默認(rèn)進(jìn)入 bootload ,例如 STC 的 51 系列和一些自定義的 bootload 。
以 STM32 為例,在芯片出廠時在其系統(tǒng)存儲區(qū)燒錄了一個 bootload ,并通過其 boot0 和 boot1 引腳電平進(jìn)行選擇復(fù)位后進(jìn)入的存儲器。
對于自定義 bootload ,只能在系統(tǒng)復(fù)位時進(jìn)入 bootload ,然后在 bootload 中進(jìn)行進(jìn)一步判斷處理。
自動下載功能需要硬件和軟件兩部分支持,軟件部分包括由上位機(jī)提供的串口下載協(xié)議和串口流控信號。自動下載硬件電路將串口流控信號,轉(zhuǎn)換為對于芯片所需的復(fù)位信號和boot引腳信號。
在串口下載的上位機(jī)程序中,需要控制串口的 DTR(Data Terminal Ready)、RTS(Request To Send) 引腳提供下載開始信號,然后由硬件電路轉(zhuǎn)換為對應(yīng)的復(fù)位信號和 boot 信號。
ESP8266 的自動下載原理分析
以 ESP8266 為例,ESP8266 進(jìn)入下載模式的條件為 GPIO0 引腳為低電平時,復(fù)位芯片( RSTEN 上升沿)。 即 GPIO0 = 0 RST = 0 -> 1
NodeMCU 的自動下載電路如下如所示:
GPIO0 和 RST 默認(rèn)電平為高電平,且需要注意到 RST 引腳有一個復(fù)位電路。
其復(fù)位延時時間約為 1.15 ms。
其自動復(fù)位電路類似三極管雙穩(wěn)態(tài)電路:
- 當(dāng) DTR = 1,RTS = 1 時, VT1截止,VT2截止, RST = 1; GPIO0 = 1
- 當(dāng) DTR = 0,RTS = 0 時, VT1截止,VT2截止, RST = 1; GPIO0 = 1
- 當(dāng) DTR = 1,RTS = 0 時, VT1導(dǎo)通,VT2截止, RST = 0; GPIO0 = 1
- 當(dāng) DTR = 0,RTS = 1 時, VT1截止,VT2導(dǎo)通, RST = 1; GPIO0 = 0
其真值表為:
在狀態(tài) 3) 下載電路 RST 引腳為低,進(jìn)入復(fù)位模式;
在狀態(tài) 4) 下載電路 GPIO0 引腳為低。
由于 RST 引腳帶有復(fù)位電路,在 RST 引腳電平變?yōu)楦唠娖胶?,會有一段時間延時才能恢復(fù)高電平。所以只需要在上位機(jī)代碼中控制 DTR&RTS 引腳電平,依次進(jìn)入狀態(tài)3和狀態(tài)4,ESP8266 就可以進(jìn)入下載模式。
查看 ESP8266 下載工具 pytool.py 代碼:
# 已刪減無關(guān)代碼,原代碼 https://hub.fastgit.org/espressif/esptool/blob/master/esptool.py#L570
# 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.
# 進(jìn)入狀態(tài) 3)
self._setDTR(False) # IO0=HIGH
self._setRTS(True) # EN=LOW, chip in reset
time.sleep(0.1)
# 進(jìn)入狀態(tài) 4)
self._setDTR(True) # IO0=LOW
self._setRTS(False) # EN=HIGH, chip out of reset
time.sleep(0.05)
# 恢復(fù) Flash 啟動模式
self._setDTR(False) # IO0=HIGH, done
使用邏輯分析儀抓取的下載時的 DTR、RTS 信號如下圖所示。
其中紅框所標(biāo)識的就是狀態(tài) 3 -> 4 的變化。由于執(zhí)行代碼也需要時間,實際狀態(tài)變化并不是由狀態(tài)3直接進(jìn)入狀態(tài)4,但是狀態(tài)1和2并不會對下載電路產(chǎn)生影響。
其他
對于不需要 boot 引腳即可進(jìn)入下載模式的bootload,其自動下載同樣是使用上位機(jī)控制 DTRRTS 引腳,只不過它只需要使用一個引腳讓芯片在下載前進(jìn)入復(fù)位模式即可。
通過上面分析,就可以解釋為什么有時在使用串口軟件打開串口后,芯片會自動復(fù)位。
這是因為在串口軟件中默認(rèn)開啟了流控,其流控引腳導(dǎo)致芯片進(jìn)入復(fù)位狀態(tài),所以只需關(guān)閉串口軟件流控,即可避免該現(xiàn)象發(fā)生。
-
usb
+關(guān)注
關(guān)注
60文章
8193瀏覽量
273200 -
STM32
+關(guān)注
關(guān)注
2295文章
11032瀏覽量
365227 -
串口I
+關(guān)注
關(guān)注
0文章
2瀏覽量
5094 -
ESP8266
+關(guān)注
關(guān)注
51文章
965瀏覽量
47444 -
下載電路
+關(guān)注
關(guān)注
3文章
7瀏覽量
4408
發(fā)布評論請先 登錄
ESP8266自動下載電路設(shè)計方案
ESP8266硬件設(shè)計指南的詳細(xì)資料免費下載

ESP8266自動下載電路分析

ESP8266/ESP32自動下載原理
使用MPU6050、ESP8266和Qubitro進(jìn)行ART分析

使用ESP8266 WiFi模塊DIY自動智能喂魚器

使用Arduino編程ESP8266 ESP 01

NodeMCU家庭自動化(ESP8266)

ESP8266自動下載電路分析

評論