STM32雙核板的應用設計與ISP的從機軟件升級
摘要:針對單片機應用設計中的資源不足、可靠性差和軟件升級問(wèn)題,設計了一款基于Cortex—M3內核的雙核板。該雙核板在不增加開(kāi)發(fā)難度的情況下使單片機資源翻倍;通過(guò)兩個(gè)MCU之間的任務(wù)合理分工和相互監督,提高了整體系統的可靠性;利用CAN總線(xiàn)完成主機與上位機的通信和升級程序的下載,并通過(guò)控制引腳實(shí)現基于ISP功能的從機軟件升級。
本文引用地址:http://dyxdggzs.com/article/201610/307277.htm引言
在單片機的應用設計中,常常會(huì )遇到如下問(wèn)題:其一,某一熟悉類(lèi)型的單片機功能可用,性?xún)r(jià)比也很好,但限于某種內部資源(如串口數、A/D路數等)不足,不得不選用更高檔或不太熟悉的單片機,造成資源的浪費和開(kāi)發(fā)周期的延長(cháng)。其二,在海洋遠程監測等重要領(lǐng)域,對控制器的可靠性要求較高,而單片機存在死機的可能性,即使可以通過(guò)配備看門(mén)狗來(lái)避免這種情況,但這種“粗暴”的復位方式并不合理(首先,復位打亂了正常的數據采集和處理工作,導致重要數據丟失;其次,即便能記錄下復位時(shí)間和次數,但復位原因和復位前狀態(tài)等信息無(wú)法偵測,一些本該解決的BUG被掩蓋,導致頻繁復位)。其三,由于開(kāi)發(fā)周期不足或測試不充分,導致設備投入運行后出現故障,而這些故障往往通過(guò)軟件升級的方式可以解決,但由于設備的應用場(chǎng)所比較特殊(如水下),導致軟件升級的成本很高。
針對上述3種情況,在實(shí)際的項目應用中設計了基于STM32的雙核板,較好地解決了資源不足、穩定性差和基于CAN總線(xiàn)的遠程升級等問(wèn)題,具有性?xún)r(jià)比高、開(kāi)發(fā)周期短等優(yōu)點(diǎn)。
1 雙核板設計
STM32系列單片機具有高性能Cortex—M3內核和外設,功耗低,集成度高,性?xún)r(jià)比高。另外,ST公司還提供了外設的標準庫函數,屏蔽了底層硬件細節,能夠使開(kāi)發(fā)人員輕松完成產(chǎn)品的開(kāi)發(fā),縮短系統開(kāi)發(fā)時(shí)間。正因為如此,STM32系列單片機得到了開(kāi)發(fā)者的青睞。其應用領(lǐng)域和客戶(hù)群不斷擴大。其中的 STM32F107屬于互聯(lián)型系列,具有以太網(wǎng)和CAN總線(xiàn)接口,在數據通信方面具有獨特的優(yōu)勢。一種基于STM32F107的雙核板如圖1所示。
圖1中,兩個(gè)STM32F107最小系統模塊分別稱(chēng)為A-CORE和M-CORE,A-CORE具有外看門(mén)狗,為主機模塊;M-CORE不具有外看門(mén)狗,但其RST/BOOT0引腳受A-CORE的控制,可以通過(guò)串口實(shí)現ISP總線(xiàn)升級,為從機模塊。由于A(yíng)-CORE和M-CORE均具有電源系統、復位電路和下載接口等調試所需的基本要素,因此可以預先焊接和調試好。在具體項目的開(kāi)發(fā)應用中,將雙核板作為一個(gè)獨立的元件嵌入,一些軟件可以提前驗證和編寫(xiě),大大縮短了產(chǎn)品的開(kāi)發(fā)周期。
在正常工作時(shí),主從機兩個(gè)模塊獨立工作,兩者通過(guò)SPI總線(xiàn)相互通信。SPI接口傳輸速率可達到18 Mbps,比I2C和UART通信要快得多。由于采用雙核,通用I/O引腳顯著(zhù)增多,不僅可以完成更加復雜的設計,而且降低了布局布線(xiàn)的難度。對于熟悉 STM32的開(kāi)發(fā)者來(lái)說(shuō),開(kāi)發(fā)難度基本不變,而可使用的資源卻幾乎成倍增加。
在該雙核板的設計中,還考慮了A—CORE對M—CORE的在線(xiàn)升級問(wèn)題。圖1中M—CORE的RST、BOOT0兩個(gè)引腳受A—CORE控制,來(lái)實(shí)現 M-CORE的復位和復位地址選擇;而ISP-AT-MR和ISP-AR-MT兩個(gè)引腳則是作為USART接口,實(shí)現對M-CORE的ISP升級。
2 可靠性設計
在本文的應用中,A—CORE和M—CORE分工合作。A—CORE主要完成系統的管理工作,如人機交互、數據存儲、通信等;M—CORE主要完成信息采集、外部設備控制等功能,這樣設計的優(yōu)點(diǎn)是功能分明、負荷分擔。負責采集控制的M—CORE可以集中精力完成數據采集和輔助的控制工作;而負責管理的A— CORE除了完成人機交互、數據存儲和通信外,還需要定期發(fā)起與M—CORE的通信,以保證相互監督。
M—CORE收到A—CORE的指令后,會(huì )將當前的工作狀態(tài)報告給A—CORE,再由A—CORE通過(guò)CAN總線(xiàn)等手段上傳給更高層的通信主機。如果A— CORE發(fā)現M—CORE不能正?;貜托畔?,則說(shuō)明M—CORE處于不正常狀態(tài),必要時(shí)可實(shí)現對M—CORE的“危機干預”。例如,在連續多次均不能正常通信的情況下,可以認為M—CORE已處于死機狀態(tài),A—CORE將復位M-CORE。A—CORE和M—CORE的狀態(tài)轉換圖如圖2所示。
顯然,這種雙核結構和定時(shí)通信機制,可以使每個(gè)MCU知道對方的工作情況。雖然在結構上分出了A—CORE和M—CORE,但由于每個(gè)MCU都有CAN總線(xiàn)與通信主機相連,因此每個(gè)MCU都可以單獨通向主機匯報工作狀態(tài),匯報的內容都可以通過(guò)CAN總線(xiàn)接收到,因此起到了相互監督的作用。
3 基于CAN總線(xiàn)的軟件升級
具備遠程軟件升級的設備具有更廣泛的適用性,可以在設備安裝到位后,通過(guò)軟件升級在線(xiàn)修復一些問(wèn)題,不但節省人力物力,也可以使設備的功能逐步完善。
雙核板具有CAN總線(xiàn),該總線(xiàn)不但是數據交換的通道,也是軟件升級的通道。上位機可以通過(guò)CAN總線(xiàn)將需要升級的程序代碼下傳到A—CORE,A— CORE控制M—CORE的RST/ BOOT0引腳,使M—CORE復位并進(jìn)入ISP狀態(tài),從而完成在線(xiàn)升級。由此可見(jiàn),要實(shí)現基于CAN總線(xiàn)的在線(xiàn)軟件升級,需要3個(gè)條件:一是待升級系統 M—CORE本身具有ISP功能,能通過(guò)串口實(shí)現程序的下載;二是A—CORE本身集成CAN總線(xiàn),可通過(guò)CAN總線(xiàn)接收上位機發(fā)送的待升級程序代碼;三是A-CORE可以控制M—CORE的RST/BOOT0引腳,完成在線(xiàn)升級。
3. 1 STM32的ISP升級
ISP(In-System Programming)方式相對于傳統的并行編程方式有了極大的進(jìn)步,無(wú)需將單片機從電路板上卸下就可進(jìn)行編程。STM32系列芯片復位時(shí),可以通過(guò)BOOT1和BOOT0的邏輯電平來(lái)決定系統的啟動(dòng)模式,見(jiàn)表1所列。
系統復位時(shí),CPU根據這兩個(gè)引腳的邏輯電平把相應模式的起始地址映射到啟動(dòng)空間(0x 0000 0000)。在啟動(dòng)延遲之后,CPU從位于0x0開(kāi)始的啟動(dòng)存儲區執行代碼。由于實(shí)際應用中很少從內嵌SRAM中啟動(dòng),故可將BOOT1引腳直接設置為低電平,只通過(guò)判斷BOOT0引腳的高低電平來(lái)選擇從用戶(hù)閃存或系統存儲器中啟動(dòng)。若復位時(shí)BOOT0的邏輯電平為高,則復位后從系統存儲器啟動(dòng),可通過(guò) USART1與Bootloader進(jìn)行通信。
STM32芯片具有開(kāi)放式的在線(xiàn)燒錄ISP協(xié)議,允許第三方根據該協(xié)議編寫(xiě)ISP下載軟件,對STM32芯片進(jìn)行FLASH的更新操作。在進(jìn)行ISP方式升級時(shí),先發(fā)送0x7F實(shí)現自動(dòng)波特率匹配,能夠識別最高115 200 bps的串口波特率。如果正確回應0x79,表示命令執行正常。握手正確后,就可以通過(guò)ISP命令實(shí)現對STM32的ISP操作,完成FLASH的擦除和編程。
3.2 FLASH分區存儲
STM32F107片內集成256 KB FLASH和64 KBSRAM,FLASH由主存儲塊(Main Block)和信息塊(Information Block)組成。主存儲塊用于存放用戶(hù)程序,每頁(yè)2 KB,共128頁(yè),容量為32K×64位,地址范圍為0x0800 0000~0x 0803 FFFF;信息塊容量為2 360×64位,分為啟動(dòng)程序代碼和用戶(hù)選擇字節。啟動(dòng)程序代碼從0x 1FFF B000~0x 1FFF F7FF,共18 KB,用戶(hù)選擇字節從0x 1FFF F800~0x 1FFF F80F,共16字節。
A-CORE的FLASH存儲器分區如圖3所示。
0x0800 0000~0x0800 1FFF,共8 KB空間,為Boot-loader代碼空間。
0x0800 2000~0x0801 FFFF,為120 KB空間,存放A-CORE自身程序。
0x0802 0000~0x0803 FFFF,為128 KB空間,存放M-CORE應用程序。
上述空間分配,雖然升級程序的空間受到了限制,但在大多數情況下是可行的,因為A—CORE和M—CORE任務(wù)分擔,其本身的程序量均不足總FLASH容量的一半。如果出現了空間不足的現象,完全可以換用更大容量的MCU。
3.3 軟件升級流程
要完成A—CORE對M—CORE的軟件升級,其過(guò)程可以分為兩個(gè)階段:基于CAN總線(xiàn)的數據傳輸和基于USART的ISP過(guò)程。
(1)基于CAN總線(xiàn)的數據傳輸
當M—CORE需要更新用戶(hù)程序時(shí),上位機將編譯成功的M—CORE升級程序的HEX文件通過(guò)CAN總線(xiàn)發(fā)送到A—CORE。上位機先發(fā)送升級指令,A—CORE接收到升級指令后,將FLASH中M—CORE升級程序區(0x 0800 2000~0x 0801 FFFF)擦除,擦除成功后回復上位機,若回復錯誤信息,則退出升級;上位機接收到回復后,按行發(fā)送HEX文件內容,A—CORE接收到數據后,依次寫(xiě)入A—CORE的M—CORE升級程序區(0x 08002000~0x 0801 FFFF)中,接收完畢后向上位機發(fā)送寫(xiě)入完畢指令。
(2)基于USART的ISP過(guò)程
當A-CORE接收到上位機發(fā)送的升級執行指令后,升級流程如下:
①置M-CORE的BOOT0引腳為高電平,然后置RST引腳為低電平,復位M-CORE,使其從系統的內存模式啟動(dòng),然后將RST引腳拉高。
②A(yíng)—CORE向M—CORE發(fā)送0x7F,M—CORE接收該數據,并根據該數據與A—CORE自動(dòng)匹配波特率,進(jìn)行回復。若回復0X79,則表示可以進(jìn)行相關(guān)擦除和寫(xiě)FLASH操作了,若回復0x1F,則升級失敗。
③A—CORE收到正確的應答,則發(fā)送0x44+0xBB,根據程序大小擦除FLASH,根據STM32F107內部固有的Bootloader串口協(xié)議,擦除完成后回復A—CORE。
④A—CORE等待接收M—CORE的回復,收到正確的應答之后,發(fā)送0x31+0xCE,把存儲到A—COREFLASH中的M—CORE升級程序區的內容寫(xiě)到M—CORE的相應FLASH中,一次寫(xiě)256個(gè)字節,直到把所有的用戶(hù)程序寫(xiě)入用戶(hù)存儲區。
⑤A—CORE控制BOOT0引腳,并控制RST為低電平,對M—CORE進(jìn)行硬件復位,M—CORE重新初始化程序,從而運行剛剛更新的用戶(hù)程序。
軟件升級交互流程如圖4所示。
結語(yǔ)
基于STM32的雙核板可以有效解決單個(gè)微處理器內存資源不夠的問(wèn)題,在基本不增加開(kāi)發(fā)難度的基礎上,使系統資源加倍增加,可以完成更為復雜的應用設計;通過(guò)A—CORE和M—CORE相互監控,提高了整個(gè)系統的可靠性,能夠有效發(fā)現軟硬件隱患;通過(guò)雙核有效的任務(wù)分工,減小了單個(gè)MCU的負擔,使系統運行更加可靠;基于ISP和CAN總線(xiàn)的遠程升級系統,有效利用了CAN總線(xiàn)通信速率高、抗干擾能力強、傳輸距離遠的特點(diǎn)以及STM32系列自身具有的 ISP功能,在設備安裝以后仍能夠升級程序,既方便了智能設備的開(kāi)發(fā),又降低了維護成本。
- STM32單片機中文官網(wǎng)
- STM32單片機官方開(kāi)發(fā)工具
- STM32單片機參考設計
評論