內(nèi)容包括ISP、IAP、ICP三種燒錄方式的詳細(xì)介紹,STM32單片機(jī)與宏晶STC單片機(jī)燒錄方法,STM32單片機(jī)自動(dòng)ISP的詳細(xì)介紹(附電路原理圖)。
目錄:
- 一、燒錄方式簡(jiǎn)介
- 二、燒錄方式詳述
- 1、ISP:In System Programming
- 2、IAP:In Applicatin Programming
- 3、ICP:In Circuit Programing
- 三、相關(guān)總結(jié)
- 1、形象點(diǎn)的描述
- 2、STM32進(jìn)入BootROM的方式
- 3、STM32自動(dòng)ISP、RS232通信
- 1)自動(dòng)ISP硬件電路
- 2)注意事項(xiàng)
一、燒錄方式簡(jiǎn)介
單片機(jī)的燒錄方式主要可以分為ICP(在電路編程)、IAP(在應(yīng)用編程)以及ISP(在系統(tǒng)編程)。玩單片機(jī)的都應(yīng)該聽(tīng)說(shuō)過(guò)IAP、ICP和ISP這幾個(gè)詞。
ISP:In System Programing,在系統(tǒng)編程
IAP:In Application Programing,在應(yīng)用編程
ICP:In Circuit Programing,在電路編程
JTAG(Joint Test Action Group)編程:通過(guò)JTAG協(xié)議進(jìn)行編程
SWD(Serial Wire Debug)編程:通過(guò)SWD協(xié)議進(jìn)行編程
UART編程:通過(guò)UART進(jìn)行編程
用一張圖形象的表示一下,如下。
圖1.1.1
從圖上看,ISP和ICP是處于最頂層的技術(shù)。描述的是一種編程結(jié)構(gòu),所使用到的協(xié)議、通信端口等,不同芯片有不同的定義。
IAP在第二層,是一種編程方式。實(shí)現(xiàn)方式是將一段目標(biāo)芯片可執(zhí)行的代碼通過(guò)某種通信協(xié)議下載到芯片RAM中并由芯片執(zhí)行,由該代碼實(shí)現(xiàn)具體操作以達(dá)到編程的目的。這種方式需要芯片支持通過(guò)某種通信協(xié)議。
對(duì)芯片的RAM進(jìn)行讀寫(xiě)并能控制其CPU。這是在編程結(jié)構(gòu)下的一種編程方式,像AK100Pro、SmartPRO、5000U-Plus等燒錄器,都用到了這種編程方式。
最下面的是硬件通信協(xié)議,UART是最早應(yīng)用在單片機(jī)里面的串行通信技術(shù)。JTAG和SWD是ARM內(nèi)核芯片興起之后,逐漸流行起來(lái)的,這三種技術(shù)描述的是編程過(guò)程中硬件層使用的通信協(xié)議,是最底層的一些技術(shù)規(guī)范。
用一個(gè)表格來(lái)對(duì)比這幾種通信協(xié)議的特性:
綜合上面所述,只要UART、JTAG、SWD這些硬件通信協(xié)議能保證電氣連接的規(guī)范性和穩(wěn)定性,那么ISP、IAP就能對(duì)芯片正確地編程。
二、燒錄方式詳述
1、ISP:In System Programming
利用單片機(jī)的串行口接到計(jì)算機(jī)的RS232口,通過(guò)專門(mén)設(shè)計(jì)的固件程序來(lái)編程內(nèi)部存儲(chǔ)器。芯片可以在目標(biāo)板上,不用取出來(lái),設(shè)計(jì)目標(biāo)板的時(shí)候?qū)?a target="_blank">接口設(shè)計(jì)在上面。所以叫"在系統(tǒng)編程",即不用脫離系統(tǒng)。程序升級(jí)需要現(xiàn)場(chǎng)解決,但不必拆機(jī)器。比如:利用STC-ISP對(duì)STC芯片編程,如圖2.1.1,祥見(jiàn)“STC_ISP下載軟件問(wèn)題匯總與解決”;利用mcuisp或FlyMcu對(duì)STM32編程,如圖2.1.2所示。
圖2.1.1
圖2.1.2
2、IAP:In Applicatin Programming
IAP的實(shí)現(xiàn)一般需要很少的外部電路輔助實(shí)現(xiàn),由芯片自身(或外圍的芯片)通過(guò)一系列操作將代碼寫(xiě)入。從結(jié)構(gòu)上將Flash存儲(chǔ)器映射為兩個(gè)存儲(chǔ)體,當(dāng)運(yùn)行一個(gè)存儲(chǔ)體上的用戶程序時(shí),可對(duì)另一個(gè)存儲(chǔ)體重新編程,之后將控制從一個(gè)存儲(chǔ)體轉(zhuǎn)向另一個(gè)。比如STM32微處理器通過(guò)SEGGER J-Flash下載程序,祥見(jiàn)“J-Link使用匯總(STM32F103)”。
圖2.2.1
MCU內(nèi)部都是首先執(zhí)行一段獨(dú)立的Boot代碼(這段Boot代碼一般是出廠預(yù)置,或使用編程器燒錄,通常只有1k或4k,SST通常是占用一塊獨(dú)立的Block,Philips通常是讓BootROM地址與其他Flash重疊,以達(dá)到隱藏的效果),Boot負(fù)責(zé)控制擦除程序存儲(chǔ)器及給程序存儲(chǔ)器編程的代碼(或是處理器外部提供的執(zhí)行代碼),然后通過(guò)某種與PC計(jì)算機(jī)的通信方式(如ethernet網(wǎng)口),將用戶指定的某個(gè)在PC上編譯完成的MCU可運(yùn)行的二進(jìn)制代碼文件編程入MCU內(nèi)的程序存儲(chǔ)器。
ISP和IAP最大的不同是:由誰(shuí)來(lái)觸發(fā)進(jìn)入BootROM。
ISP有4種觸發(fā)方式:
1)由外部硬件電路:如VDD保持高電平,給RST連續(xù)3個(gè)脈沖;
2)檢測(cè)狀態(tài)位:如ISPEN,為0時(shí)PC指針從0000H開(kāi)始執(zhí)行;為1時(shí),通過(guò)“引導(dǎo)向量”計(jì)算出“ISP代碼”的位置。每次復(fù)位后都會(huì)檢測(cè)該狀態(tài)位;
3)中止控制符信號(hào)觸發(fā)芯片復(fù)位:中止控制符信號(hào)就是指在異步串行口的接收腳上出現(xiàn)長(zhǎng) 達(dá)一幀長(zhǎng)度的低電平,這里一幀的長(zhǎng)度與異步串行口的工作模式有關(guān)。
4)直接調(diào)用ISP:用戶程序也可以調(diào)用,但是很危險(xiǎn)。
4種方式的目的相同,即進(jìn)入ISP子程序。比如Philips出廠的ISP子程序在1E00H-1FFFH,只要能引導(dǎo)PC指針指向1E00H就可以了。進(jìn)入ISP代碼的目的是進(jìn)入BootROM。
IAP的觸發(fā)簡(jiǎn)單一些,沒(méi)有外部觸發(fā)。通過(guò)一些指示位(SST為SC0/SC1、SFCF[1,0];Philips為一段IAP子程序,保存在FF00H~FFFFH地址空間中),達(dá)到引導(dǎo)至BootROM的目的。
殊途同歸,ISP、IAP所進(jìn)入的BootROM里面駐留的Boot代碼,才是最終目標(biāo)。
3、ICP:In Circuit Programing
1)MCU只要處于上電狀態(tài)即可,不必預(yù)燒任何代碼進(jìn)MCU。
2)燒錄范圍涵蓋整顆MCU,包括 APROM、DataFlash、CONFIG、LDROM和 ROMMAP。
3)芯片在LOCK的狀態(tài)下,無(wú)法只更新某一區(qū)塊,只能在erase-ALL之后,更新某一區(qū)塊,再逐一燒回其它區(qū)塊;
因?yàn)镮CP的本質(zhì)就是走串行接口的Writer Mode,芯片被LOCK之后,除了erase-ALL,所有燒錄動(dòng)作皆會(huì)被禁止。
4)因?yàn)闊浖兇馐荌CP硬件的行為,MCU無(wú)法自己更新自己,所以給系統(tǒng)設(shè)計(jì)者的彈性較小。例如無(wú)法藉由ICP去實(shí)現(xiàn)IAP的功能。
5)需要其他硬件支持(如NU-LINK等)
6)不嚴(yán)格來(lái)說(shuō),ISP和IAP也屬于在電路編程。
三、相關(guān)總結(jié)
1、形象點(diǎn)的描述
ISP是把房子拆了再重造一間,但是地基保留,那么在造好之前當(dāng)然是不能住人。
IAP是在造好的房子里邊進(jìn)行一些裝修,當(dāng)然人可以繼續(xù)住。
ICP是對(duì)房子地基與房子的整體重構(gòu)。
2、STM32進(jìn)入BootROM的方式
詳細(xì)的說(shuō)明參閱“STM32單片機(jī)1之二、STM32_啟動(dòng)模式配置說(shuō)明“。
3、STM32自動(dòng)ISP、RS232通信
1)自動(dòng)ISP原理
當(dāng)燒錄程序時(shí),我們希望BOOT0=1,BOOT1=0。當(dāng)燒錄完成后希望BOOT0=0,BOOT1=0。這里只需考慮BOOT0的高低。查看STM32的參考手冊(cè),如下圖。
圖3.3.1
綜上所述可以得到:
(1)系統(tǒng)上電,BOOT0需為L(zhǎng),進(jìn)入模式一。上電復(fù)位后,在SYSCLK的第4個(gè)上升沿,BOOT引腳的值將被鎖存,進(jìn)入主閃存存儲(chǔ)器,執(zhí)行我們燒錄的代碼。
(2)燒錄HEX文件時(shí),BOOT0需為H,進(jìn)入模式二。系統(tǒng)必須復(fù)位一次(系統(tǒng)上電后默認(rèn)執(zhí)行代碼,即模式一),讓系統(tǒng)重新鎖存BOOT引腳。系統(tǒng)進(jìn)入模式二,開(kāi)始燒錄HEX文件。
(3)程序下載完畢后,若設(shè)置了“編程后執(zhí)行”,系統(tǒng)再次進(jìn)入模式一,STM32會(huì)再次被復(fù)位,此時(shí)DTR#引腳為高,RTS#引腳為低,STM32復(fù)位后,DTR#引腳設(shè)置為低,RTS#引腳設(shè)置為高,那么Q2和Q3都不導(dǎo)通,此時(shí),STM32重新開(kāi)始啟動(dòng)后,檢測(cè)到BOOT0為0,在燒錄完成后會(huì)有報(bào)告:“成功從08000000開(kāi)始運(yùn)行”,程序開(kāi)始正常運(yùn)行。
圖3.3.2
圖3.3.3的電路可實(shí)現(xiàn)自動(dòng)ISP、串口通信、USB供電三種功能。
圖3.3.3 成熟電路
串口下載軟件可選用FlyMcu或mcuisp,通過(guò)串口的DTR和RTS信號(hào)來(lái)自動(dòng)配置BOOT0和RESET信號(hào),不需要用戶手動(dòng)切換它們的狀態(tài),直接串口軟件自動(dòng)控制,可以方便的實(shí)現(xiàn)一鍵程序燒錄,這里我稱之為自動(dòng)ISP。
CH340G上電后DTR#和RTS#都為高電平,在用FlyMcu燒寫(xiě)軟件時(shí),軟件下方選擇“DTR的低電平復(fù)位,RTS高電平進(jìn)BootLoader”。
圖3.3.4
CH340G在實(shí)際操作時(shí)引腳的變化為“DTR#拉高(軟件DTR低電平),RTS#拉低(軟件RTS高電平)”,即軟件設(shè)置和實(shí)際情況相反。 畫(huà)個(gè)時(shí)序圖,直觀一些。
圖3.3.5
首先,F(xiàn)lyMcu軟件控制DTR輸出低電平,則DTR#引腳輸出高, 然后RTS置高,則RTS#引腳輸出低,這樣Q3導(dǎo)通,BOOT0被拉高,即實(shí)現(xiàn)設(shè)置BOOT0為1,同時(shí)Q2也會(huì)導(dǎo)通,STM32的復(fù)位腳被拉低,實(shí)現(xiàn)復(fù)位。
延時(shí)100ms后,F(xiàn)lyMcu軟件控制DTR為高電平,則DTR#引腳輸出低電平,RTS維持高電平,則RTS#引腳繼續(xù)為低電平,此時(shí)STM32的復(fù)位引腳,由于Q2不再導(dǎo)通,變?yōu)楦唠娖剑琒TM32結(jié)束復(fù)位,但是BOOT0還是維持為1,從而進(jìn)入ISP模式,接著FlyMcu就可以開(kāi)始連接STM32下載代碼,從而實(shí)現(xiàn)自動(dòng)ISP。
2)注意事項(xiàng)
(1)CH340在剛上電,穩(wěn)定需要幾秒鐘時(shí)間,在此期間,DTR引腳會(huì)有兩次或三次變低的情況,這樣會(huì)引起單片機(jī)上電后復(fù)位
兩三次,穩(wěn)定后不會(huì)影響程序運(yùn)行。若不想讓單片機(jī)上電復(fù)位好幾次,上電的時(shí)候把DTR與RESET斷開(kāi)即可。
(2)PLC通過(guò)485線控制變頻器調(diào)速,電腦用USB轉(zhuǎn)串口連接PLC。用CH340的話,變頻器一旦啟動(dòng),電腦端和PLC的通訊很容易中斷,用FT232則無(wú)此問(wèn)題。個(gè)人認(rèn)為穩(wěn)定性:FT232>PL2303>CH340,這也反映在價(jià)格上。
(3)國(guó)產(chǎn)類STM32單片機(jī),本人測(cè)試過(guò)北京兆易創(chuàng)新GD32F103VET6、珠海艾派克APM32F103VCT6、重慶雅特力AT32F403AVGT7,使用FlyMcu軟件,mcuisp軟件會(huì)產(chǎn)生各種不適。
評(píng)論
查看更多