(沈陽新松機器人自動化股份有限公司,沈陽 110168)
近年來,消費類電子產品的競爭不斷加劇,以ARM微控制器(MCU)為核心的電子產品隨著產品迭代速度的不斷加快得到更廣泛的應用。而由于受產品性能提升、產品功能增加、原控制器芯片停產等因素的影響,微控制器通常會面臨換型及升級。本文介紹了換型過程中需要考慮的因素、選型方案以及軟硬件功能在新平臺上的移植過程。
原產品中應用的微控制器型號為Microchip公司的AT91SAM7X256(以下簡稱AT91),采用ARM7 TDMI架構,最高主頻達55 MHz,內部SRAM空間為64 KB,Flash空間為256 KB,主要實現網絡通信、CAN通信、電量監控、固件升級以及一些計算功能,根據功能需求移植了μC/OS-II嵌入式實時操作系統及LwIP嵌入式網絡協議棧。新產品中增加了新的通信協議以及更復雜的計算過程,對微控制器的主頻要求提高,且對內部RAM及Flash容量要求更大,需要對微控制器進行升級或者換型。
在微控制器選型時,需要綜合考慮新控制器主頻、外設接口要求、芯片體積要求、功耗要求、內部存儲資源要求、硬件及軟件功能實現的難易程度、后期服務及維護的難易程度等因素。AT91微控制器采用ARM V4體系結構,在ARM體系結構的不斷升級中逐漸被低成本、低功耗且性能更高的ARM V7-M系列微控制器所替代。通過對這一系列產品的市場調研,ST公司的STM32F系列產品及TI公司的Tiva C系列微控制器基本符合新產品對微控制器的主頻、外設接口、芯片體積以及內部存儲空間要求。因為STM32F系列產品市場占有率較高,且STM32F具有Cortex-M0、Cortex-M3、Cortex-M4、Cortex-M7多種系列的產品,每一系列產品都有部分芯片外設接口相同,芯片引腳兼容,可直接替換升級。考慮到產品未來升級時可以降低板卡制作成本以及芯片的出貨量,最終選擇了STM32F407VGT6(以下簡稱STM32F407)作為新的MCU。該芯片主頻可達168 MHz,內部SRAM存儲空間為192 KB,Flash存儲空間為1 MB,內部具有以太網、CAN、SPI、USB、UART等多種外設接口,采用LQFP100封裝,額定功耗為500 mW左右。雖然該MCU與AT91的引腳數相同,但引腳不兼容,需要根據引腳定義重新繪制PCB;而軟件移植方面,Micrium官網上可以找到μC/OS-II系統在STM32F407下移植的工程示例,為代碼的移植過程節省了開發及調試的時間。
通過對市場上主流微控制器芯片的調研,選擇了STM32F407作為新的MCU,并通過硬件指標確認其基本滿足芯片選型要求。為進一步論證方案的可行性,應通過運行一些簡單的程序對兩款芯片的性能進行對比,以此評定經過選型的芯片是否滿足新的應用需求。
兩款芯片的性能評估主要從兩個方面入手,考察微控制器GPIO接口翻轉頻率及運算速度。首先考察的是GPIO接口翻轉的頻率,在主函數中循環翻轉某個GPIO端口的電平,應用邏輯分析儀觀察電平翻轉情況并測量高低電平的持續時間。隨后,為了評估微控制器的運算速度,編輯了Calculate( )函數,根據運算完成的時間來評估兩款微控制器的性能,評估結果如表1所列。

表1 微控制器性能評估對照表
在GPIO接口翻轉頻率測試的代碼中,首先要在初始化的過程中對系統時鐘進行設置,AT91的時鐘由外部時鐘晶振提供,通過倍頻與分頻,最終選擇了40 MHz作為系統時鐘頻率。而STM32F407的時鐘頻率設置文件system_stm32f4xx.c可以通過官方提供的時鐘配置文件來自動生成。為了方便計算與比較,系統時鐘設置為120 MHz,測試結果表明,STM32F407的電平翻轉周期為8.125 ns,占空比約為50%,波形接近方波,周期為16.25 ns,頻率為60 MHz。而AT91的I/O接口翻轉頻率除受系統時鐘頻率影響外,還受其自身端口通信頻率限制,頻率為6.6 MHz,占空比為50%,方波周期為304 ns,頻率為3.3 MHz。
用于評估運算時間的Calculate函數是從產品應用中提取出的一個計算函數,函數包括了參數初始化及計算兩部分,運算的類型包括加、減、乘、除及乘方運算5種類型,兩款芯片采用了相同的運算函數及相同的開發環境,最終的運算時間分別為316 μs及1.36 ms, STM32F407對該函數的運算速度約等于AT91微控制器的4.3倍。
根據上述對比可以得出結論,STM32F407微控制器的GPIO翻轉的頻率和Calculate函數運算速度都是AT91的3倍以上,滿足新功能對控制器性能的需求。另外,假設微控制器的運算速度與系統時鐘及DMIPS兩個參數相關,并存在線性關系,則STM32F407的運算速度應為AT91的(120×1.25)/(40×0.9)=4.2倍,與測試的實際結果近似,則微控制器的運算性能與系統時鐘及MIPS指標有較強的相關性。雖然微控制器的計算速度還與編譯工具的版本及代碼的編碼效率等因素相關,但該方法有助于快速評估及對比MCU的運算性能,對新器件的選型有一定指導意義。
嵌入式微控制器的最小系統主要包括系統時鐘、電源、復位電路、程序下載電路,這些基本電路是硬件功能移植過程中首要考慮的環節。雖然MCU廠商不同,體系結構不同,但同屬ARM架構,所以在功能不變的前提下,最小系統的電路也基本相同,只需要根據芯片的引腳定義找到對應的引腳即可。
AT91最小系統中采用外部的18.432 MHz晶體及芯片內部的PLL將系統時鐘設置為40 MHz。而在新產品中,為了使CAN、SPI接口通信頻率與原通信頻率保持一致,仍使用18.432 MHz的晶體及PLL將系統時鐘設置為40 MHz的整倍數為120 MHz,這樣既能提高系統的主頻、GPIO接口電平翻轉速率及MCU的運算速度,也能夠使外設接口的通信頻率與原產品一致,使新產品的板卡能夠替代原產品中的微控制器板卡。對于電源電路部分,由于MCU的電源電壓通常為3.3 V,電流一般不超過500 mA,所以電源電路部分基本一致。同樣相同的部分還有復位電路,只需要將復位電路的RESET網絡接到MCU對應的復位引腳即可。
MCU通常需要應用到JTAG接口及JTAG仿真器進行程序下載及調試,但是在產品批量生產階段,為了方便生產人員下載固件及服務人員的現場維護,要求實現程序下載的電纜易于獲取及攜帶。原產品AT91可應用工裝軟件SAM-BA和MINI USB電纜通過USB接口實現程序的燒錄功能。在新平臺上仍應用此方法實現此功能,但因ST提供的工裝軟件STM32 Flash Loader是通過RS232串口燒錄程序,為簡化下載電纜,在新板卡上添加一個Mini USB接口,并通過PL2303HXD芯片將USB轉換為UART串口。這樣,只需要一根MINI USB電纜就可以將MCU的固件程序通過上位機及工裝軟件下載到Flash中,實現程序的燒錄功能。圖1和圖2是USB轉串口的電路圖,圖1中TXD和RXD是PL2303HXD芯片的串口發送及接收引腳,應分別與STM32F407的UART串口的接收及發送引腳連接。圖2中的0 Ω電阻可用于計算機給MCU板卡單獨提供5 V電源來調試,而無需另接外部電源。

圖1 USB轉UART芯片PL2303HXD電路圖

圖2 USB接口電路圖
實現最小系統的功能后,還需要重點關注MCU提供的外設接口,這些接口通常與GPIO引腳復用,通過軟件代碼的配置來實現不同的功能。在硬件平臺移植的過程中,應通過閱讀芯片手冊對比不同MCU外設引腳分配的情況。AT91微控制器GPIO引腳數為62個,編號為PA0~PA30、PB0~PB30,每個端口都可以單獨配置為GPIO或者對應的外設接口使用;STM32F407微控制器GPIO引腳數為80個,編號為PA0~PA15、PB0~PB15、PC0~PC15、PD0~PD15、PE0~PE15,可配置的I/O引腳更多,這樣配置方案也更加靈活,能夠最大限度地應用MCU上的各個引腳。
微控制器板卡需要實現多個板卡間的網絡通信功能,所以在板卡上集成了一個以太網交換機芯片KSZ8995,完成以太網MAC層到物理層之間的協議轉換。KSZ8995是一款低功耗、高性能的以太網交換芯片,內部包括5個10/100M以太網收發器,具有兩種MII配置方式(MAC和PHY),可通過SPI接口對其進行初始化、參數配置、狀態管理等操作。
圖3是以太網交換機芯片的外圍參考電路,芯片的左側上半部分引腳是MII的交換層接口,使用到的引腳共16個,詳細的引腳定義可以參閱芯片手冊;左側下半部分引腳是MII的物理層接口,這里由于STM32F407提供MII交換層接口,所以沒有使用。芯片右側為物理層通信接口,用于連接以太網變壓器及其它的網絡通信板卡,黑色方框圈出的是八對差分線,在PCB布線時應按照差分布線方式做等長處理。芯片上方引腳為電源和地引腳,該芯片需要提供3.3 V、2.5 V及1.8 V電源;芯片下方引腳為SPI通信引腳、復位引腳及時鐘引腳。該芯片在初始化時需要通過MCU的SPI接口設置MII的通信頻率、通信模式(全雙工),并且發送寫使能指令開啟交換機芯片的通信功能。芯片的時鐘引腳外接一個25 MHz的晶振,因為網絡接口的數據采用4線傳輸方式,這樣網絡通信的速度最高可達100 MHz。

圖3 以太網交換機芯片KSZ8995參考電路
微控制器平臺換型帶來的軟件方面的變化體現在3個方面,微控制器底層驅動文件的變化、集成開發環境的變化、與μC/OS-II系統及LwIP以太網協議棧相關接口文件的變化。描述μC/OS-II系統及LwIP以太網協議棧在STM32平臺上移植的文章較多,在此不多贅述,重點介紹底層驅動文件和集成開發環境的變化。
所謂的底層驅動文件包括引導文件、時鐘配置文件、BSP(板級支持包)文件以及一些微控制器和體系結構相關的頭文件。雖然不同平臺這些文件的格式不同,但文件中的內容不可或缺。以STM32F407為例,引導文件和時鐘配置文件的名稱分別為startup_stm32f4xx.s和system_stm32f4xx.c。匯編文件的作用主要包括初始化堆棧和中斷向量表,中斷向量表中定義的中斷除了系統異常中斷外,還包括外設中斷;時鐘配置文件的作用是通過晶振和內部PLL設置系統時鐘。初始化過程結束后,引導文件將跳轉到主函數main中運行。AT91的引導文件名稱是cstartup.s79,完成堆棧及系統異常中斷的初始化,并將程序跳轉到main函數中運行,在main函數里完成對系統時鐘的設置。STM32F407的Cortex-M4內核提供了一個NVIC(內嵌向量中斷控制器),可實現中斷的嵌套、自動保存和恢復,動態改變中斷優先級等功能,并對外設中斷進行了統一的定義及管理。如需使用某一外設中斷,只需找到對應的中斷并定義其內容即可,而AT91平臺的外設中斷函數則需要用戶自行定義。
STM32F407平臺與AT91平臺的另一個區別是BSP文件的提供。為了節省研發人員產品開發時間,ST提供了一個比較完善的BSP包,其中包括了微控制器主要外設接口的驅動固件庫,庫文件夾的名稱為STM32F4xx_StdPeriph_Driver,內部包含了外設驅動文件和頭文件。庫函數中實現了對外設寄存器的操作,并對外封裝成一個個功能單一的函數。用戶只需要了解函數的功能,而不需要了解寄存器的定義,就可以應用外設資源,這樣能夠顯著加快板卡開發的時間,同時也提高了上層應用代碼的可移植性,方便日后MCU的換型升級。因為在產品的開發過程中,AT91沒有提供比較完善的BSP文件,為了方便代碼移植,自定義了板級支持包BSP.c文件,將對外設寄存器操作的函數封裝到該文件中,供上層應用函數調用,并且盡量避免在應用函數中直接操作內部寄存器。這樣在代碼的移植過程中,只需將BSP.c文件替換為STM32F4驅動固件庫中的文件,而上層的應用函數不需要做過多的修改。
集成開發環境的變化也是平臺切換過程中需要考慮的因素。隨著ARM體系結構的不斷升級,集成開發工具需要不斷更新軟件版本以支持各MCU廠商推出的最新版本的芯片。在開發AT91的代碼時,選用的是IAR V4.42版本,而開發STM32F4的代碼時,IAR軟件版本已經升級到了V6.4,兩個版本的工程文件不兼容,且IAR V4.42版本不支持STM32F4系列的微控制器,所以新的功能不能基于原始工程文件開發,而應基于ST官網上提供的STM32F4系列MCU的工程示例文件來開發。文件中已經提供了工程必備的引導文件、時鐘配置文件、BSP包以及主函數的定義,需要在工程中自行移植μC/OS-II系統、LwIP協議棧以及應用層的相關函數。

[1] 黨武松,范寒柏,胡楊.STM32F207和DM9161A的高速以太網接口設計[J].單片機與嵌入式系統應用,2013(10).
[2] 肖繼軍.基于KS8995的以太網交換機設計與實現[J]. 科技廣場,2012(3).
[3] 劉火良,楊森. STM32庫開發實戰指南:基于STM32F4[M].北京:機械工業出版社,2017.
[4] 劉火良,楊森. STM32庫開發實戰指南[M].北京:機械工業出版社,2013.