從入門(mén)到精通:USB轉(zhuǎn)TTL芯片的進(jìn)階應(yīng)用全解析
在日常的開(kāi)發(fā)調(diào)試中,我們常常使用 J-Link 等下載器來(lái)為 MCU 下載程序。今天,通用電路抄作業(yè),分享一個(gè)可以一鍵自動(dòng)下載的調(diào)試器,也是 USB 轉(zhuǎn) TTL 串口自動(dòng)下載電路。
本文引用地址:http://www.bjwjmy.cn/article/202506/471442.htm什么是自動(dòng)下載呢?自動(dòng)下載就是 ISP ( In-System Programming )在系統(tǒng)可編程,指電路板上的帶引導(dǎo)代碼的空白器件可以編程寫(xiě)入最終用戶代碼,通過(guò)單片機(jī)專用的編程接口(一般是串口等)對(duì) MCU 內(nèi)部的用戶區(qū) Flash 存儲(chǔ)器進(jìn)行在線編程。
除了日程調(diào)試可以使用之外,這種自動(dòng)下載方式更適合批量生產(chǎn)燒錄,固件遠(yuǎn)程O(píng)TA升級(jí)。大家熟悉的MCU,像STM32系列、 ESP32 / ESP8266 、Arduino、NXP LPC 系列以及很多國(guó)產(chǎn)的MCU,都是支持的。
我們以 STM32F103 單片機(jī)為例,STM32單片機(jī)的芯片手冊(cè)里面關(guān)于引導(dǎo)模塊的描述,是通過(guò)配置 BOOT[1:0] 引腳,來(lái)實(shí)現(xiàn)三種不同的模式:
最后一種,就是 ISP 自動(dòng)下載模式了。
知道了 ISP 啟動(dòng)條件,就可以設(shè)計(jì)一鍵下載電路了。
我們?cè)O(shè)計(jì)的這個(gè)電路,通過(guò) USB 轉(zhuǎn) TTL 串口,在 PC 端通過(guò)串口下載工具,把固件下載到 MCU 中, MCU 通過(guò) BOOT1/0 組合設(shè)置為 ISP 啟動(dòng)模式, MCU 運(yùn)行內(nèi)置的引導(dǎo)程序,這個(gè)內(nèi)置的引導(dǎo)程序是出廠就寫(xiě)好的,無(wú)法修改,只能讀取。這個(gè)程序可以把串口接收到的 hex 文件寫(xiě)到用戶區(qū) 0 × 08000000 開(kāi)頭的 Flash 中,從而實(shí)現(xiàn)用戶固件下載的功能。
串口自動(dòng)下載器主要由以下電路組成:1. 電源電路:通過(guò)J1的TYPE-C接口輸出VBUS-5V通過(guò)可恢復(fù)熔絲F1以及C2,C3濾波電容,為 FT232RL 提供穩(wěn)定的5V電壓直流電,R1和D1是LED指示燈,方便觀察是否有5V輸入,這里的可恢復(fù)熔絲F1為一級(jí)電源保護(hù),一級(jí)電源轉(zhuǎn)換是VBUS-5V通過(guò) AMS1117-3.3 LDO轉(zhuǎn)出3.3V為外設(shè)提供穩(wěn)定的直流電;
2.USB轉(zhuǎn)TTL-UART電路:使用的是大家都熟悉的 FT232 接口芯片,這款芯片工作穩(wěn)定,并自帶了 RXD/TXD 收發(fā)引腳狀態(tài)輸出,正好我們可以使用個(gè)收發(fā)狀態(tài)輸出功能,增加串口數(shù)據(jù)收發(fā) LED 指示燈 D2/D3 ,這樣方便我們更直觀看到接受和發(fā)送數(shù)據(jù); D4/D5 為 BAV99 二極管保護(hù)電路,在這里是起到鉗位保護(hù)作用,防止 RXD/TXD 引腳的電壓過(guò)高,避免過(guò)高電壓損壞接口芯片。
3.外置接口:這塊由 J2/J4/J6 三個(gè) 2.54mm 排針,用來(lái)連接外設(shè)如 STM32 的開(kāi)發(fā)板或者核心板的電源和 BOOT0 以及 RESET 完成對(duì)單片機(jī)的串口程序下載;
4.一鍵自動(dòng)下載電路:由 Q1/Q2/D4/R10/R11 組成,通過(guò)串口轉(zhuǎn) USB 接口芯片 FT232 的 DTR# 和 RTS# 引腳,來(lái)控制一鍵下載電路,從而控制連接在電路上的 STM32 的 RESET 和 BOOT0 引腳的高低電平,引導(dǎo) STM32 內(nèi)置 BootLoader 程序進(jìn)入 ISP 模式,配合 STM32 的 BOOT0 , RESET 引腳,來(lái)達(dá)到通過(guò)串口一鍵下載和運(yùn)行的效果,省去了購(gòu)買(mǎi)仿真器的費(fèi)用,下載程序也變得簡(jiǎn)單方便。
原理是 :開(kāi)發(fā)板默認(rèn)BOOT1為0,BOOT0為0。要想STM32串口ISP下載模式開(kāi)啟,需要把BOOT0設(shè)置為1。此時(shí)RTS為低電平時(shí),Q1三極管 SS8550 滿足導(dǎo)通條件導(dǎo)通,3.3V電壓通過(guò)Q1到BOOT0引腳拉成高電平,所以BOOT0輸出高電平1,復(fù)位電路NRST默認(rèn)為高電平,通過(guò)DTR復(fù)位STM32,使系統(tǒng)進(jìn)入ISP模式,STM32系統(tǒng)存儲(chǔ)器啟動(dòng)BootLoader,BootLoader程序ST自帶的引導(dǎo)程序,通過(guò)BootLoader將程序從串口下載到Flash中;這樣程序?qū)嶋H上是通過(guò)串口最終下載到了FLASH中,上位機(jī)自動(dòng)控制RTS和DTR引腳,控制BOOT0和NRST,BOOT0置為0,NRST置為1,程序從flash啟動(dòng)。接下來(lái),就用實(shí)驗(yàn)驗(yàn)證我們?cè)O(shè)計(jì)的這個(gè)電路是否可行。首先打開(kāi)軟件:
準(zhǔn)備下載程序:① 選擇“端口 Port ”( FlyMcu 會(huì)自動(dòng)搜索 FT232RL 串口對(duì)應(yīng)的端口),設(shè)置“ 115200bps ”② 選擇“需要下載的程序文件”(編譯生成的 .hex 文件)。③ 勾選“編程前重裝文件”, FlyMcu 會(huì)在每次編程前,將 .hex 文件重新裝載一遍,在代碼調(diào)試的時(shí)候比較有用。④ 勾選“編程后執(zhí)行”,可以在下載完程序之后自動(dòng)運(yùn)行代碼,無(wú)需再按復(fù)位鍵來(lái)運(yùn)行代碼,便于代碼調(diào)試。特別注意:不要勾選“使用 RamIsp ”,使用 RamIsp 可能會(huì)導(dǎo)致無(wú)法正常下載。不要勾選“編程到 FLASH 時(shí)寫(xiě)選項(xiàng)字節(jié)”。⑤ 在左下方選擇“ DTR 的低電平復(fù)位, RTS 高電平進(jìn) BootLoader ”, FlyMCU 會(huì)通過(guò) DTR 和 RTS 信號(hào)來(lái)控制板載的一鍵下載功能電路,實(shí)現(xiàn)一鍵下載功能。這個(gè)是必要的選項(xiàng)(在 BOOT0 接 GND 的條件下)。設(shè)置完成之后,就可以下載了。
時(shí)間原因,我們只演示這一種應(yīng)用,這個(gè)串口模塊還可以為 Arduino 一鍵下載程序,還有串口調(diào)試等諸多功能!
評(píng)論