(沈陽(yáng)新松機(jī)器人自動(dòng)化股份有限公司,沈陽(yáng) 110168)
近年來(lái),消費(fèi)類(lèi)電子產(chǎn)品的競(jìng)爭(zhēng)不斷加劇,以ARM微控制器(MCU)為核心的電子產(chǎn)品隨著產(chǎn)品迭代速度的不斷加快得到更廣泛的應(yīng)用。而由于受產(chǎn)品性能提升、產(chǎn)品功能增加、原控制器芯片停產(chǎn)等因素的影響,微控制器通常會(huì)面臨換型及升級(jí)。本文介紹了換型過(guò)程中需要考慮的因素、選型方案以及軟硬件功能在新平臺(tái)上的移植過(guò)程。
原產(chǎn)品中應(yīng)用的微控制器型號(hào)為Microchip公司的AT91SAM7X256(以下簡(jiǎn)稱AT91),采用ARM7 TDMI架構(gòu),最高主頻達(dá)55 MHz,內(nèi)部SRAM空間為64 KB,F(xiàn)lash空間為256 KB,主要實(shí)現(xiàn)網(wǎng)絡(luò)通信、CAN通信、電量監(jiān)控、固件升級(jí)以及一些計(jì)算功能,根據(jù)功能需求移植了μC/OS-II嵌入式實(shí)時(shí)操作系統(tǒng)及LwIP嵌入式網(wǎng)絡(luò)協(xié)議棧。新產(chǎn)品中增加了新的通信協(xié)議以及更復(fù)雜的計(jì)算過(guò)程,對(duì)微控制器的主頻要求提高,且對(duì)內(nèi)部RAM及Flash容量要求更大,需要對(duì)微控制器進(jìn)行升級(jí)或者換型。
在微控制器選型時(shí),需要綜合考慮新控制器主頻、外設(shè)接口要求、芯片體積要求、功耗要求、內(nèi)部存儲(chǔ)資源要求、硬件及軟件功能實(shí)現(xiàn)的難易程度、后期服務(wù)及維護(hù)的難易程度等因素。AT91微控制器采用ARM V4體系結(jié)構(gòu),在ARM體系結(jié)構(gòu)的不斷升級(jí)中逐漸被低成本、低功耗且性能更高的ARM V7-M系列微控制器所替代。通過(guò)對(duì)這一系列產(chǎn)品的市場(chǎng)調(diào)研,ST公司的STM32F系列產(chǎn)品及TI公司的Tiva C系列微控制器基本符合新產(chǎn)品對(duì)微控制器的主頻、外設(shè)接口、芯片體積以及內(nèi)部存儲(chǔ)空間要求。因?yàn)镾TM32F系列產(chǎn)品市場(chǎng)占有率較高,且STM32F具有Cortex-M0、Cortex-M3、Cortex-M4、Cortex-M7多種系列的產(chǎn)品,每一系列產(chǎn)品都有部分芯片外設(shè)接口相同,芯片引腳兼容,可直接替換升級(jí)??紤]到產(chǎn)品未來(lái)升級(jí)時(shí)可以降低板卡制作成本以及芯片的出貨量,最終選擇了STM32F407VGT6(以下簡(jiǎn)稱STM32F407)作為新的MCU。該芯片主頻可達(dá)168 MHz,內(nèi)部SRAM存儲(chǔ)空間為192 KB,F(xiàn)lash存儲(chǔ)空間為1 MB,內(nèi)部具有以太網(wǎng)、CAN、SPI、USB、UART等多種外設(shè)接口,采用LQFP100封裝,額定功耗為500 mW左右。雖然該MCU與AT91的引腳數(shù)相同,但引腳不兼容,需要根據(jù)引腳定義重新繪制PCB;而軟件移植方面,Micrium官網(wǎng)上可以找到μC/OS-II系統(tǒng)在STM32F407下移植的工程示例,為代碼的移植過(guò)程節(jié)省了開(kāi)發(fā)及調(diào)試的時(shí)間。
通過(guò)對(duì)市場(chǎng)上主流微控制器芯片的調(diào)研,選擇了STM32F407作為新的MCU,并通過(guò)硬件指標(biāo)確認(rèn)其基本滿足芯片選型要求。為進(jìn)一步論證方案的可行性,應(yīng)通過(guò)運(yùn)行一些簡(jiǎn)單的程序?qū)煽钚酒男阅苓M(jìn)行對(duì)比,以此評(píng)定經(jīng)過(guò)選型的芯片是否滿足新的應(yīng)用需求。
兩款芯片的性能評(píng)估主要從兩個(gè)方面入手,考察微控制器GPIO接口翻轉(zhuǎn)頻率及運(yùn)算速度。首先考察的是GPIO接口翻轉(zhuǎn)的頻率,在主函數(shù)中循環(huán)翻轉(zhuǎn)某個(gè)GPIO端口的電平,應(yīng)用邏輯分析儀觀察電平翻轉(zhuǎn)情況并測(cè)量高低電平的持續(xù)時(shí)間。隨后,為了評(píng)估微控制器的運(yùn)算速度,編輯了Calculate( )函數(shù),根據(jù)運(yùn)算完成的時(shí)間來(lái)評(píng)估兩款微控制器的性能,評(píng)估結(jié)果如表1所列。
表1 微控制器性能評(píng)估對(duì)照表
在GPIO接口翻轉(zhuǎn)頻率測(cè)試的代碼中,首先要在初始化的過(guò)程中對(duì)系統(tǒng)時(shí)鐘進(jìn)行設(shè)置,AT91的時(shí)鐘由外部時(shí)鐘晶振提供,通過(guò)倍頻與分頻,最終選擇了40 MHz作為系統(tǒng)時(shí)鐘頻率。而STM32F407的時(shí)鐘頻率設(shè)置文件system_stm32f4xx.c可以通過(guò)官方提供的時(shí)鐘配置文件來(lái)自動(dòng)生成。為了方便計(jì)算與比較,系統(tǒng)時(shí)鐘設(shè)置為120 MHz,測(cè)試結(jié)果表明,STM32F407的電平翻轉(zhuǎn)周期為8.125 ns,占空比約為50%,波形接近方波,周期為16.25 ns,頻率為60 MHz。而AT91的I/O接口翻轉(zhuǎn)頻率除受系統(tǒng)時(shí)鐘頻率影響外,還受其自身端口通信頻率限制,頻率為6.6 MHz,占空比為50%,方波周期為304 ns,頻率為3.3 MHz。
用于評(píng)估運(yùn)算時(shí)間的Calculate函數(shù)是從產(chǎn)品應(yīng)用中提取出的一個(gè)計(jì)算函數(shù),函數(shù)包括了參數(shù)初始化及計(jì)算兩部分,運(yùn)算的類(lèi)型包括加、減、乘、除及乘方運(yùn)算5種類(lèi)型,兩款芯片采用了相同的運(yùn)算函數(shù)及相同的開(kāi)發(fā)環(huán)境,最終的運(yùn)算時(shí)間分別為316 μs及1.36 ms, STM32F407對(duì)該函數(shù)的運(yùn)算速度約等于AT91微控制器的4.3倍。
根據(jù)上述對(duì)比可以得出結(jié)論,STM32F407微控制器的GPIO翻轉(zhuǎn)的頻率和Calculate函數(shù)運(yùn)算速度都是AT91的3倍以上,滿足新功能對(duì)控制器性能的需求。另外,假設(shè)微控制器的運(yùn)算速度與系統(tǒng)時(shí)鐘及DMIPS兩個(gè)參數(shù)相關(guān),并存在線性關(guān)系,則STM32F407的運(yùn)算速度應(yīng)為AT91的(120×1.25)/(40×0.9)=4.2倍,與測(cè)試的實(shí)際結(jié)果近似,則微控制器的運(yùn)算性能與系統(tǒng)時(shí)鐘及MIPS指標(biāo)有較強(qiáng)的相關(guān)性。雖然微控制器的計(jì)算速度還與編譯工具的版本及代碼的編碼效率等因素相關(guān),但該方法有助于快速評(píng)估及對(duì)比MCU的運(yùn)算性能,對(duì)新器件的選型有一定指導(dǎo)意義。
嵌入式微控制器的最小系統(tǒng)主要包括系統(tǒng)時(shí)鐘、電源、復(fù)位電路、程序下載電路,這些基本電路是硬件功能移植過(guò)程中首要考慮的環(huán)節(jié)。雖然MCU廠商不同,體系結(jié)構(gòu)不同,但同屬ARM架構(gòu),所以在功能不變的前提下,最小系統(tǒng)的電路也基本相同,只需要根據(jù)芯片的引腳定義找到對(duì)應(yīng)的引腳即可。
AT91最小系統(tǒng)中采用外部的18.432 MHz晶體及芯片內(nèi)部的PLL將系統(tǒng)時(shí)鐘設(shè)置為40 MHz。而在新產(chǎn)品中,為了使CAN、SPI接口通信頻率與原通信頻率保持一致,仍使用18.432 MHz的晶體及PLL將系統(tǒng)時(shí)鐘設(shè)置為40 MHz的整倍數(shù)為120 MHz,這樣既能提高系統(tǒng)的主頻、GPIO接口電平翻轉(zhuǎn)速率及MCU的運(yùn)算速度,也能夠使外設(shè)接口的通信頻率與原產(chǎn)品一致,使新產(chǎn)品的板卡能夠替代原產(chǎn)品中的微控制器板卡。對(duì)于電源電路部分,由于MCU的電源電壓通常為3.3 V,電流一般不超過(guò)500 mA,所以電源電路部分基本一致。同樣相同的部分還有復(fù)位電路,只需要將復(fù)位電路的RESET網(wǎng)絡(luò)接到MCU對(duì)應(yīng)的復(fù)位引腳即可。
MCU通常需要應(yīng)用到JTAG接口及JTAG仿真器進(jìn)行程序下載及調(diào)試,但是在產(chǎn)品批量生產(chǎn)階段,為了方便生產(chǎn)人員下載固件及服務(wù)人員的現(xiàn)場(chǎng)維護(hù),要求實(shí)現(xiàn)程序下載的電纜易于獲取及攜帶。原產(chǎn)品AT91可應(yīng)用工裝軟件SAM-BA和MINI USB電纜通過(guò)USB接口實(shí)現(xiàn)程序的燒錄功能。在新平臺(tái)上仍應(yīng)用此方法實(shí)現(xiàn)此功能,但因ST提供的工裝軟件STM32 Flash Loader是通過(guò)RS232串口燒錄程序,為簡(jiǎn)化下載電纜,在新板卡上添加一個(gè)Mini USB接口,并通過(guò)PL2303HXD芯片將USB轉(zhuǎn)換為UART串口。這樣,只需要一根MINI USB電纜就可以將MCU的固件程序通過(guò)上位機(jī)及工裝軟件下載到Flash中,實(shí)現(xiàn)程序的燒錄功能。圖1和圖2是USB轉(zhuǎn)串口的電路圖,圖1中TXD和RXD是PL2303HXD芯片的串口發(fā)送及接收引腳,應(yīng)分別與STM32F407的UART串口的接收及發(fā)送引腳連接。圖2中的0 Ω電阻可用于計(jì)算機(jī)給MCU板卡單獨(dú)提供5 V電源來(lái)調(diào)試,而無(wú)需另接外部電源。
圖1 USB轉(zhuǎn)UART芯片PL2303HXD電路圖
圖2 USB接口電路圖
實(shí)現(xiàn)最小系統(tǒng)的功能后,還需要重點(diǎn)關(guān)注MCU提供的外設(shè)接口,這些接口通常與GPIO引腳復(fù)用,通過(guò)軟件代碼的配置來(lái)實(shí)現(xiàn)不同的功能。在硬件平臺(tái)移植的過(guò)程中,應(yīng)通過(guò)閱讀芯片手冊(cè)對(duì)比不同MCU外設(shè)引腳分配的情況。AT91微控制器GPIO引腳數(shù)為62個(gè),編號(hào)為PA0~PA30、PB0~PB30,每個(gè)端口都可以單獨(dú)配置為GPIO或者對(duì)應(yīng)的外設(shè)接口使用;STM32F407微控制器GPIO引腳數(shù)為80個(gè),編號(hào)為PA0~PA15、PB0~PB15、PC0~PC15、PD0~PD15、PE0~PE15,可配置的I/O引腳更多,這樣配置方案也更加靈活,能夠最大限度地應(yīng)用MCU上的各個(gè)引腳。
微控制器板卡需要實(shí)現(xiàn)多個(gè)板卡間的網(wǎng)絡(luò)通信功能,所以在板卡上集成了一個(gè)以太網(wǎng)交換機(jī)芯片KSZ8995,完成以太網(wǎng)MAC層到物理層之間的協(xié)議轉(zhuǎn)換。KSZ8995是一款低功耗、高性能的以太網(wǎng)交換芯片,內(nèi)部包括5個(gè)10/100M以太網(wǎng)收發(fā)器,具有兩種MII配置方式(MAC和PHY),可通過(guò)SPI接口對(duì)其進(jìn)行初始化、參數(shù)配置、狀態(tài)管理等操作。
圖3是以太網(wǎng)交換機(jī)芯片的外圍參考電路,芯片的左側(cè)上半部分引腳是MII的交換層接口,使用到的引腳共16個(gè),詳細(xì)的引腳定義可以參閱芯片手冊(cè);左側(cè)下半部分引腳是MII的物理層接口,這里由于STM32F407提供MII交換層接口,所以沒(méi)有使用。芯片右側(cè)為物理層通信接口,用于連接以太網(wǎng)變壓器及其它的網(wǎng)絡(luò)通信板卡,黑色方框圈出的是八對(duì)差分線,在PCB布線時(shí)應(yīng)按照差分布線方式做等長(zhǎng)處理。芯片上方引腳為電源和地引腳,該芯片需要提供3.3 V、2.5 V及1.8 V電源;芯片下方引腳為SPI通信引腳、復(fù)位引腳及時(shí)鐘引腳。該芯片在初始化時(shí)需要通過(guò)MCU的SPI接口設(shè)置MII的通信頻率、通信模式(全雙工),并且發(fā)送寫(xiě)使能指令開(kāi)啟交換機(jī)芯片的通信功能。芯片的時(shí)鐘引腳外接一個(gè)25 MHz的晶振,因?yàn)榫W(wǎng)絡(luò)接口的數(shù)據(jù)采用4線傳輸方式,這樣網(wǎng)絡(luò)通信的速度最高可達(dá)100 MHz。
圖3 以太網(wǎng)交換機(jī)芯片KSZ8995參考電路
微控制器平臺(tái)換型帶來(lái)的軟件方面的變化體現(xiàn)在3個(gè)方面,微控制器底層驅(qū)動(dòng)文件的變化、集成開(kāi)發(fā)環(huán)境的變化、與μC/OS-II系統(tǒng)及LwIP以太網(wǎng)協(xié)議棧相關(guān)接口文件的變化。描述μC/OS-II系統(tǒng)及LwIP以太網(wǎng)協(xié)議棧在STM32平臺(tái)上移植的文章較多,在此不多贅述,重點(diǎn)介紹底層驅(qū)動(dòng)文件和集成開(kāi)發(fā)環(huán)境的變化。
所謂的底層驅(qū)動(dòng)文件包括引導(dǎo)文件、時(shí)鐘配置文件、BSP(板級(jí)支持包)文件以及一些微控制器和體系結(jié)構(gòu)相關(guān)的頭文件。雖然不同平臺(tái)這些文件的格式不同,但文件中的內(nèi)容不可或缺。以STM32F407為例,引導(dǎo)文件和時(shí)鐘配置文件的名稱分別為startup_stm32f4xx.s和system_stm32f4xx.c。匯編文件的作用主要包括初始化堆棧和中斷向量表,中斷向量表中定義的中斷除了系統(tǒng)異常中斷外,還包括外設(shè)中斷;時(shí)鐘配置文件的作用是通過(guò)晶振和內(nèi)部PLL設(shè)置系統(tǒng)時(shí)鐘。初始化過(guò)程結(jié)束后,引導(dǎo)文件將跳轉(zhuǎn)到主函數(shù)main中運(yùn)行。AT91的引導(dǎo)文件名稱是cstartup.s79,完成堆棧及系統(tǒng)異常中斷的初始化,并將程序跳轉(zhuǎn)到main函數(shù)中運(yùn)行,在main函數(shù)里完成對(duì)系統(tǒng)時(shí)鐘的設(shè)置。STM32F407的Cortex-M4內(nèi)核提供了一個(gè)NVIC(內(nèi)嵌向量中斷控制器),可實(shí)現(xiàn)中斷的嵌套、自動(dòng)保存和恢復(fù),動(dòng)態(tài)改變中斷優(yōu)先級(jí)等功能,并對(duì)外設(shè)中斷進(jìn)行了統(tǒng)一的定義及管理。如需使用某一外設(shè)中斷,只需找到對(duì)應(yīng)的中斷并定義其內(nèi)容即可,而AT91平臺(tái)的外設(shè)中斷函數(shù)則需要用戶自行定義。
STM32F407平臺(tái)與AT91平臺(tái)的另一個(gè)區(qū)別是BSP文件的提供。為了節(jié)省研發(fā)人員產(chǎn)品開(kāi)發(fā)時(shí)間,ST提供了一個(gè)比較完善的BSP包,其中包括了微控制器主要外設(shè)接口的驅(qū)動(dòng)固件庫(kù),庫(kù)文件夾的名稱為STM32F4xx_StdPeriph_Driver,內(nèi)部包含了外設(shè)驅(qū)動(dòng)文件和頭文件。庫(kù)函數(shù)中實(shí)現(xiàn)了對(duì)外設(shè)寄存器的操作,并對(duì)外封裝成一個(gè)個(gè)功能單一的函數(shù)。用戶只需要了解函數(shù)的功能,而不需要了解寄存器的定義,就可以應(yīng)用外設(shè)資源,這樣能夠顯著加快板卡開(kāi)發(fā)的時(shí)間,同時(shí)也提高了上層應(yīng)用代碼的可移植性,方便日后MCU的換型升級(jí)。因?yàn)樵诋a(chǎn)品的開(kāi)發(fā)過(guò)程中,AT91沒(méi)有提供比較完善的BSP文件,為了方便代碼移植,自定義了板級(jí)支持包BSP.c文件,將對(duì)外設(shè)寄存器操作的函數(shù)封裝到該文件中,供上層應(yīng)用函數(shù)調(diào)用,并且盡量避免在應(yīng)用函數(shù)中直接操作內(nèi)部寄存器。這樣在代碼的移植過(guò)程中,只需將BSP.c文件替換為STM32F4驅(qū)動(dòng)固件庫(kù)中的文件,而上層的應(yīng)用函數(shù)不需要做過(guò)多的修改。
集成開(kāi)發(fā)環(huán)境的變化也是平臺(tái)切換過(guò)程中需要考慮的因素。隨著ARM體系結(jié)構(gòu)的不斷升級(jí),集成開(kāi)發(fā)工具需要不斷更新軟件版本以支持各MCU廠商推出的最新版本的芯片。在開(kāi)發(fā)AT91的代碼時(shí),選用的是IAR V4.42版本,而開(kāi)發(fā)STM32F4的代碼時(shí),IAR軟件版本已經(jīng)升級(jí)到了V6.4,兩個(gè)版本的工程文件不兼容,且IAR V4.42版本不支持STM32F4系列的微控制器,所以新的功能不能基于原始工程文件開(kāi)發(fā),而應(yīng)基于ST官網(wǎng)上提供的STM32F4系列MCU的工程示例文件來(lái)開(kāi)發(fā)。文件中已經(jīng)提供了工程必備的引導(dǎo)文件、時(shí)鐘配置文件、BSP包以及主函數(shù)的定義,需要在工程中自行移植μC/OS-II系統(tǒng)、LwIP協(xié)議棧以及應(yīng)用層的相關(guān)函數(shù)。
[1] 黨武松,范寒柏,胡楊.STM32F207和DM9161A的高速以太網(wǎng)接口設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2013(10).
[2] 肖繼軍.基于KS8995的以太網(wǎng)交換機(jī)設(shè)計(jì)與實(shí)現(xiàn)[J]. 科技廣場(chǎng),2012(3).
[3] 劉火良,楊森. STM32庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南:基于STM32F4[M].北京:機(jī)械工業(yè)出版社,2017.
[4] 劉火良,楊森. STM32庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南[M].北京:機(jī)械工業(yè)出版社,2013.