1 下載協議
1.1 JTAG協議
JTAG全稱 joint test action group,邊界掃描系統協議;是調試芯片的通用標准協議;
1.2 SWD協議
SWD全稱 serial wire debug,串行調試協議;也是調試芯片的通用標准協議;
2 SWJ-DP
SWJ-DP全稱 serial wire/JTAG - debug port,串行和邊界掃描系統調試端口;為stm32系列的程序下載端口;
SWJ-DP可復用成JTAG調試接口、SW調試接口,分時復用JTAG協議、SWD協議進行下載;
2.1 stm32f1系列引腳分配

2.2 SWJ-DP功能框圖
功能如圖332所示:通過AHB-AP訪問cm3的總線矩陣,除cm3核心外的所有范圍都可以訪問讀取;

3 下載器
使用下載器下載:通過約定好的引腳端口、使用約定好的通訊方式、把代碼寫入芯片內部的特定位置;
STM32可以使用ULINK2下載器、JLINK下載器、STLINK下載器,以及各種抄板前三種下載器;
3.1 ULINK2下載器
生產公司:英國ARM-Keil公司
適用芯片:8051,Cortex-M,ARM7,ARM9,C166內核系列芯片
適用MDK:KEIL MDK
適用協議:JTAG協議,SWD協議
特點:目前為止沒有用過
3.2 JLINK下載器
生產公司:德國SEGGER(大約叫賽格)公司
適用芯片:8051,Cortex-Mxxx,Cortex-Axxx,ARM7/ARM9/ARM11,Cortex-R4/R5內核系列芯片
適用MDK:幾乎全部MDK,實在太多了就不寫了;
適用協議:JTAG協議,SWD協議,SPI協議
特點:目前功能最全,性能最穩定的JTAG下載器;支持好幾種pins的標准JTAG接口;
3.3 STLINK下載器
生產公司:意法半導體公司
適用芯片:STM8,STM32系列
適用MDK:KEIL,STM32CubeIDE,IAR等,沒有JLINK兼容的多;
適用協議:STM8使用SWIM(single wire interface module)協議,STM32使用JTAG協議、SWD協議
特點:下載器分別引出了兩個接口,SWIM接口給STM8使用,SWJ-DP接口給STM32使用;
4 不使用下載器下載
不使用下載器下載:通過約定好的引腳端口、使用約定好的通訊方式、把代碼寫入芯片內部的特定位置;
4.1 IAP
IAP全稱 in-applicatin programing,在線應用編程下載;沒有接觸的機會也就沒有了解的興趣了;
4.2 ISP
ISP全稱 in-system programming,在線系統編程下載;
ISP下載時,不能直接通過MDK下載,需要借助flash_loader.exe / fly_mcu.exe下載;
ISP下載時,下載軟件通常通過usart1外設,與出廠bootloader程序直接通訊,bootloader將收到的代碼搬運到flash內部的啟動位置;
下載軟件不僅可以通過usart1下載,部分系列芯片還可以使用spi、can、iic等外設;其他外設估計大概率遇不到;
bootloader程序怎么將代碼搬運到flash內部並沒有告訴我們,我也懶得找為什么了;
4.3 ISP一鍵下載電路
ch340電平轉換芯片作用是直接將USB差分電平信號轉換為TTL信號傳遞給單片機;
大約是ch340廠家將RTS、DTR引腳控制封裝進flymcu.exe並提供了電路接法;
flymcu.exe軟件關於RTS、DTR的配置選擇為:"DTR的低電平復位,RTS高電平進bootloader",離譜媽媽快來開門;
以下倒推一下那倆三極管的作用,為了方便推導,pnp三極管在此簡寫為n型管、npn三極管在此簡寫為p型管;
手上只有正點的板子所以用他的電路圖,電路boot[1:0]是通過跳線帽手動修改的,本節前提手動配置了[boot1]=0b;

4.3.1 ISP下載
(1) [x:boot0]= x1b,reset先拉低再拉高;此時單片機根據boot[1:0]=x1b 從地址0x1FFF F000啟動,ISP下載;
(2) [x:boot0]= x0b,reset先拉低后拉高,此時單片機根據boot[1:0]=x0b 從地址0x0800 0000啟動,執行程序;
注意,如果[boot0]=0b,意味着RTS通過R48拉到了vcc,那么p型管始終截止,還怎么控制reset值呢?保留疑問繼續;
4.3.2 ISP一鍵下載
(1) RTS=1,DTR=1
n型管截止斷路boot0接地,boot0=0;p型管截止斷路reset接vcc,reset=1;
ch340上電初始化值;此時n型管不控制boot0狀態,p型管不控制reset值;
(2) RTS=0,DTR \
n型管導通10k和1k電阻串聯后分壓,boot0=1;p型管導通reset接RTS,reset=0;
ISP地址啟動;此時reset低電平有效,芯片復位;當前狀態假設持續10ms,F1系列reset復位信號持續典型值為2.5ms;
(3) RTS \ ,DTR=1
n型管狀態不變,boot0=1;p型管截止斷路reset接vcc,reset=1;
ISP地址啟動;此時reset釋放,執行程序;芯片讀取boot[1:0]=01b,啟動ISP下載,直到flymcu.exe下載完成;
(4) RTS=1,DTR \
此時n型管截止斷路boot0接地,boot0=0;p型管截止斷路reset接vcc,reset=1;
此時n型管不控制boot0狀態,p型管不控制reset值;
(5) isp下載完成后,從flash地址重新啟動的reset信號不是ch340控制的
可能是由於勾選了flymcu.exe的“編程后執行”提供的,可能是由內核電源模塊提供的;
4.3.3 ISP一鍵下載bug
當usb轉串口接電腦之后,再給單片機上電的瞬間DTR和RTS的電平變化導致競爭冒險,使得單片機可能反復重復復位;
以上是野火說的,可以解釋以下bug;
當使用STLINK下載同時,同時使用ch340的usb轉串口,直接拔掉電腦端stlink_usb,usb轉串口會一直重復發送信息;
usb轉串口會一直重復發送信息,說明此時芯片在反復重啟,反復復位;
可能是因為stlink拔掉的時候reset信號出現了毛刺,可能通過電路板走線影響上了ch340的復位;
然后導致ch340的DTR和RTS的競爭冒險所以單片機一直在復位;
STM32 SWD下載口無法下載的原因和解決辦法 - 創世界 - 博客園 (cnblogs.com)
5 小結
感覺自己棒棒噠;
