徐岳清
(無錫機電高等職業(yè)技術(shù)學校,江蘇 無錫214000)
STM32系列單片機專為要求高性能、低成本和低功耗的應用設(shè)計,按照內(nèi)核架構(gòu)分別有Cortex-M0、Cortex-M3和Cortex-M4 3種,雖內(nèi)核不同,但是全系列均支持片內(nèi)ISP(in-system programmable,系統(tǒng)在線可編程)下載編程模式,并且采用同一種通信協(xié)議,因此均可以通過USART接口實現(xiàn)ISP編程。
在批量生產(chǎn)中,STM32常見的燒錄方式基本為3種方式。其一為預燒錄,在貼片前,使用批量燒錄器對芯片進行統(tǒng)一燒錄;其二為聯(lián)機燒錄,即在貼片完成后使用JLINK或者STlink和PC機,使用相應的燒錄軟件通過芯片的SW接口進行燒錄或者通過串口進行ISP燒錄;其三為脫機燒錄,在貼片完成后使用單個SW接口脫機燒錄器進行程序燒錄。第1種方法燒錄速度最快,但是需要拆包裝燒錄,燒錄完成后還要再重新包裝,操作比較煩瑣;第2種方式燒錄速度一般,采用SW接口稍快,但是需要占用2個IO口,如果采用ISP方式,則由于ST官方提供的Flash Loader Demonstrator軟件操作步驟較多,導致燒錄速度和效率最低[1];第3種較快,但是由于SW脫機燒錄器只支持一個SW燒錄口,因此只能一次燒錄一片。
鑒于上述幾種方式的優(yōu)缺點,本設(shè)計采用STM32F302RBT6單片機,設(shè)計了脫機ISP燒錄工具。STM32F3系列基于 Cortex-M4內(nèi)核,帶有DSP和FPU指令,性價比與STM32F1系列相比更好,STM32F302RBT6單片機采用TQFP64封裝,具有1個USB接口,2個SPI接口、3個USART接口和2個UART口,USART口支持同步模式,本設(shè)計全部按照異步模式即UART模式使用,因此可以實現(xiàn)通過5路UART同時燒錄5片STM32系列單片機。
STM32系列單片機通常支持3種啟動模式,在上電時通過BOOT0和BOOT1管腳電平區(qū)分。當BOOT0為低電平時,從用戶閃存啟動,這是正常啟動模式;當BOOT0為高電平時,如果BOOT1為低,則從系統(tǒng)存儲器啟動,芯片出廠時在這個區(qū)域放置了bootloader,即自舉程序也叫內(nèi)嵌啟動代碼,該程序出廠后無法修改,可用于通過USART、USB或者其他方式把應用程序燒錄到用戶閃存;當BOOT0為高電平時,如果BOOT1為高時,從芯片內(nèi)置RAM啟動。在STM32F0系列中,僅由BOOT0一個管腳用于選擇下載模式,當BOOT0為低電平時,從用戶閃存啟動;當BOOT0為高電平時,從系統(tǒng)存儲器啟動,即啟動自舉程序。
通過設(shè)置BOOT0=1,BOOT0=0在 MCU啟動時就可以進入自舉模式,自舉程序?qū)呙鑅SARTx-Rx引腳,等待接收0x7F數(shù)據(jù)幀,該數(shù)據(jù)幀的持續(xù)時間經(jīng)過SysTick的測量和相關(guān)計算,可以得出當前數(shù)據(jù)幀的波特率,從而MCU自動配置通信波特率,實現(xiàn)波特率自適應,支持的波特率范圍為1 200~115 200。然后發(fā)送確認字節(jié)(0x79)返回主機,表示STM32已準備好接收命令。自舉程序流程框圖如圖1所示。
圖1 使用USART的STM32自舉程序流程框圖
STM32單片機自舉程序支持的命令中常用的見表1,主控端的每條命令都是按照一個字節(jié)命令和一個字節(jié)命令補碼方式發(fā)送,每個通信數(shù)據(jù)包結(jié)尾均包含一個字節(jié)校驗,校驗值為前面所有字節(jié)的異或運算結(jié)果,實現(xiàn)通信數(shù)據(jù)包的有效性驗證。器件在每個數(shù)據(jù)包被接受后使用ACK(0x79)應答,被丟棄后使用 NACK(0x1F)應答。因此主機在發(fā)生完一條命令或者數(shù)據(jù)包后,通過接收到的應答命令,就可以判斷器件是否正常接收。
表1 USART bootloader命令[3]
由于STM32是32位機,因此對器件的數(shù)據(jù)寫入操作必須按照32位對齊方式寫入數(shù)據(jù),不足位使用0xFF補齊,寫入數(shù)據(jù)必須為4字節(jié)的倍數(shù),最大數(shù)據(jù)塊的長度為256字節(jié)。為了提高寫入的速度,本設(shè)計選用256字節(jié)作為數(shù)據(jù)塊長度。
通過前面的分析可以得知,控制一個STM32器件的啟動模式,需要控制BOOT0、BOOT1和電源的上電順序,為了減少人工操作,實現(xiàn)全自動化編程,需要使用MOS管控制3個信號的電平,如圖2所示,其中 USART1_BOOT0,USART1_BOOT1和USART1_VCC為單片機IO口,采用NMOS管控制,高電平導通,低電平截止,右側(cè)與USART1一起組成一組下載控制口,所使用的上電控制順序為:USART1_BOOT0高電平,USART1_BOOT1低電平,USART1_VCC高電平啟動引導程序并完成ISP下載,下載完成后USART1_VCC設(shè)置為低電平,然后再設(shè)置USART1_BOOT0為低電平,USART1_BOOT1低電平,USART1_VCC高電平啟動應用程序。
圖2 MOS管控制組電路圖
由于串口不可以一對多組網(wǎng)通信,因此,每個器件均需獨立的串口進行通信。本設(shè)計的硬件結(jié)構(gòu)如圖3所示。
本設(shè)計使用點陣顯示屏作為人機顯示接口,用于顯示燒錄文件名稱、被燒錄器件的芯片型號、可燒錄器件數(shù)量以及燒錄狀態(tài)等信息。顯示屏全部采用中文化菜單和提示信息,支持中英文混合顯示。同時采用5個獨立的三色LED,用于提示燒錄的進程,對應的燒錄口燒錄過程中顯示黃色,燒錄成功時顯示綠色,燒錄失敗時顯示紅色,同時使用蜂鳴器在燒錄結(jié)束時進行鳴叫提示,從而可以增加操作的直觀性和易用性。
按鍵可以用來啟動燒錄,設(shè)置燒錄參數(shù),包含是否啟用讀保護、是否限制燒錄次數(shù)、是否啟用保密功能、是否自動設(shè)定硬件序列號以及設(shè)置序列號的起始編碼以及遞增規(guī)則,當啟用硬件序列號自動燒錄功能時,在芯片內(nèi)部flash指定地址寫入唯一編碼和硬件序列號。
圖3 燒錄器結(jié)構(gòu)框圖
SPI Flash用于存儲待燒錄二進制bin文件,可以存儲多個二進制bin文件,燒錄時通過按鍵選擇其中一個進行燒錄。燒錄器通過USB口與PC機通信,連接PC機時,燒錄器通過內(nèi)置軟件和對應的PC機驅(qū)動,把USB虛擬成一個串口,PC機上的專用軟件通過該虛擬串口,可以完成程序下載、燒錄參數(shù)設(shè)置等功能。系統(tǒng)供電可以使用5V直流電源適配器,也可以通過USB口的5V電源供電。
本設(shè)計的軟件流程如圖4所示,系統(tǒng)上電后,首先進行初始化,然后等待USB口消息和按鍵消息,通過USB口上位機可把待下載的二進制文件下載到下載器板載的SPI Flash存儲器上,同時設(shè)置待下載文件對應下載配置參數(shù),包含起始地址、可下載最大次數(shù)、是否啟用讀保護等參數(shù)。每個下載文件和對應的配置參數(shù)均單獨保存,使用按鍵選擇對應的下載文件后,與之相關(guān)的配置參數(shù)也自動調(diào)取并顯示。如果需要更改待下載參數(shù),也可以通過按鍵修改并保存。燒錄器選擇好下載文件和下載配置參數(shù)后,即可以啟動一鍵下載。一鍵下載啟動后,每個下載端口對應的MOS開關(guān)組同時打開,然后5路串口依次發(fā)送版本讀取命令0x01,得到應答后,該端口置為有效,否則置為無效,顯示屏上對應組號顯示“未發(fā)現(xiàn)可燒錄芯片!”。對于有效的端口,LED亮黃燈,然后依次發(fā)送芯片ID讀取命令,獲取待下載芯片的ID并在液晶屏顯示,然后根據(jù)待下載文件大小和起始地址,擦除待占用的芯片內(nèi)部flash,擦除完成后,從SPI Flash讀取下載文件內(nèi)容,并依次寫入有效端口連接的芯片。下載完成后,自動進行讀取校驗功能,即把已下載的程序全部讀取出來并和待下載文件比較,如果比較結(jié)果正確無誤,說明下載已成功,此時LED亮綠燈,蜂鳴器響1聲;如果校驗出錯,說明下載失敗,此時LED亮紅燈,蜂鳴器連響2聲。無論下載失敗還是成功,下載結(jié)束后,均判斷是否關(guān)機,如果不關(guān)機,則自動回到等待USB響應和按鍵響應。
圖4 軟件功能流程圖
為了提高燒錄速度,STM32F302RBT6單片機的5個串口均使用中斷發(fā)送和接收,SPI Flash啟用DMA讀取,從而SPI Flash讀寫和5個串口的接收均可以并行執(zhí)行。即首先啟用SPI Flash DMA讀取,待DMA讀取256字節(jié)完成時,再啟用5個串口中斷發(fā)送,然后在串口發(fā)送的同時再次啟用SPI Flash DMA讀取,待DMA讀取256字節(jié)完成時,判斷串口發(fā)送中斷標志是否置位,如果中斷標志有效則啟用再次啟動串口中斷發(fā)送,否則等待串口發(fā)送完成中斷,從而可以大大提高并行處理性能,提高系統(tǒng)效率。
為了驗證本設(shè)計的高效率特點,特意選用市面上常用的3種下載方式進行對比測試,即J-link,ST-link,脫機SW燒錄器,這3種燒錄器的共同點是全部采用SWD接口,需要在硬件電路設(shè)計時預留燒錄口才能使用。本設(shè)計采用USART接口,不占用系統(tǒng)IO口資源,程序下載完成后可以用于通信口。本測試使用50k二進制bin文件分別進行擦除、編程和校驗測試測試,測試數(shù)據(jù)見表1。其中J-Link和ST-Link均采用PC機做主機,和PC的整體響應速度相關(guān),由于J-Link比ST-Link的速度高,因此在時間上用時較短。SWD脫機燒錄器,由于響應較快,因此用時最少。本設(shè)計一次性燒錄5片,平均每片只需3.86s。
從數(shù)據(jù)可以看出,由于本設(shè)計采用的STM32 F302RBT6具有靈活的DMA處理和多串口中斷處理機制,通過中斷觸發(fā)和DMA操作,大大提高了系統(tǒng)的并行處理速度,從而實現(xiàn)編程5片比編程1片僅僅多用時3.4s,同時該MCU采用支持DSP和FPU指令,在提示并行下載速度的同時,確保了液晶屏得以流暢刷新顯示。使用本文設(shè)計的編程器,如果算上裝夾時間,最快在30s內(nèi)就可以燒錄5片單片機,可以大大提高生產(chǎn)效率。
表2 燒錄器時間參數(shù)
該燒錄器支持STM32全系列單片機,可以實現(xiàn)一對五脫機編程,一鍵下載和加密保護功能在大大提高了生產(chǎn)效率同時也提高了程序安全性。其燒錄方便,操作簡單,可以滿足生產(chǎn)線批量燒寫需求,并且只需使用USART接口,燒錄完成后,USART可以被應用程序再次使用,不浪費任何單片機資源。本方案在解決原廠提供的燒錄軟件不足的同時,也為推廣高性價比的STM32系列單片機提供了便利。
[1]陳晨,董為云.基于STM32的 USB通信程序設(shè)計[J].電子技術(shù)與軟件工程,2014(1):266.
[2]鄧國榮.基于STM32SPI接口的M25P80FALSH的驅(qū)動程序設(shè)計與實現(xiàn)[J].機電信息,2013(6):144-145.
[3]ST.USART protocol used in the STM32bootloader[EB/OL].[2014-06-27].http://www.stmcu.org/document/download/index/id-208524.
[4]ST.STM32F301x6/8and STM32F318x8advanced ARM-based 32-bit MCUs[EB/OL].[2014-06-23].http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00094064.