基于PSoC Creator Bootloader更新PSoC?3固件程序
1. 引言
本文引用地址:http://cafeforensic.com/article/117492.htm許多電子產(chǎn)品允許出廠后更新固件程序,從而制造商可以發(fā)布新的固件版本增加功能或是修正錯誤。該功能一般有兩種實現(xiàn)方式:在系統(tǒng)程序燒錄和駐留更新程序。若將待更新的芯片看做從機,將執(zhí)行更新操作的PC或是MCU看做主機,第一種方法通過芯片的燒錄接口,由主機模擬生產(chǎn)時燒錄器的時序,將固件數(shù)據(jù)燒錄至Flash中;第二種方法在從機的運行代碼中實現(xiàn)一段駐留程序,主機通過某種通訊接口與駐留程序通信,將固件數(shù)據(jù)先發(fā)送給駐留程序,然后由該程序更新至Flash。駐留程序在生產(chǎn)時被燒錄,一般只能通過硬件燒錄的方式更新。
這種駐留程序有很多種稱呼,一個常見的名字是Bootloader,或者稱為引導(dǎo)程序。不過,由于駐留程序涉及內(nèi)容較廣,實現(xiàn)穩(wěn)定的更新功能需要較多的開發(fā)投入。Cypress PSoC3芯片族和PSoC Creator 1.0開發(fā)環(huán)境提供了一套完整的Bootloader開發(fā)框架,開發(fā)者無需編寫代碼,即可獲得基于I2C和USB接口的Bootloader功能;或者僅做簡單的二次開發(fā),實現(xiàn)基于其他通訊接口或更新協(xié)議的Bootloader功能,從而縮短產(chǎn)品的研發(fā)周期。
2. 理解PSoC3 Bootloader
PSoC3芯片族是Cypress推出的基于8051核心的可配置片上系統(tǒng)(SoC),其主要特性包括
· 片內(nèi)包含多達64K Flash和8K SRAM;
· 16~24個數(shù)字可編程邏輯器件(PLD),可以實現(xiàn)狀態(tài)機等需求定制數(shù)字邏輯;
· 豐富的固定功能模塊,包括1個使用內(nèi)部晶振的Full-Speed USB2.0模塊,多達4個16位可配置的Timer/PWM/Counter模塊等
· 高性能模擬模塊,如75ns響應(yīng)時間的比較器,最高采樣率192 ksps的12位 Delta-Sigma ADC等。
Cypress提供了與PSoC3配套的開發(fā)環(huán)境PSoC Creator 1.0,將其豐富的片內(nèi)資源抽象成眾多的可配置功能模塊,開發(fā)者可以像設(shè)計電路板原理圖一樣,將所需模塊拖放在設(shè)計圖紙上,連接模塊之間的輸入輸出,然后使用C語言實現(xiàn)產(chǎn)品需求即可。
PSoC3將所有代碼存放在片內(nèi)Flash中,程序執(zhí)行也是基于Flash,因此,Bootloader與應(yīng)用程序分別位于Flash空間的不同位置。圖 1給出了PSoC3 Bootloader的Flash布局。在64K Flash空間中,低地址處存放的是Bootloader,較高地址處存放的是應(yīng)用程序,二者中間有一個填充為零的隔離區(qū),此外,在最高地址還存放著一些公共數(shù)據(jù),包括應(yīng)用程序的起始地址,Bootloader使用的Flash大小,應(yīng)用程序校驗和等。在產(chǎn)品的生命周期里,Bootloader只能在生產(chǎn)時通過硬件燒錄的方式寫入Flash,一旦產(chǎn)品出廠,除非意外情況,Bootloader不會被更新;應(yīng)用程序也在生產(chǎn)時被寫入,但是產(chǎn)品出廠后仍然可以通過Bootloader更新。
圖 1 Bootloader與應(yīng)用程序在PSoC3 Flash空間的布局
為了實現(xiàn)上述的Flash布局,開發(fā)者通常需要設(shè)置眾多的編譯、鏈接參數(shù),這些參數(shù)控制編譯工具鏈生成所需固件映像(Image),但其復(fù)雜性常常令許多開發(fā)者望而卻步。PSoC Creator 1.0提供了一種簡單的方法實現(xiàn)上述操作,將Bootloader與應(yīng)用程序分成兩種工程(Project):bootloader工程和bootoadable工程。前者維護Bootloader的實現(xiàn),后者維護應(yīng)用程序的實現(xiàn),后者將前者作為編譯依賴,即bootoadable工程需要bootloader工程的編譯結(jié)果來完成自身的編譯鏈接。此劃分具有兩個優(yōu)點,一方面將所有編譯工具鏈相關(guān)的參數(shù)設(shè)置與產(chǎn)品開發(fā)分離,完全由PSoC Creator自動處理,減少開發(fā)難度;另一方面易于Bootloader和應(yīng)用程序的維護,如需添加新功能至應(yīng)用程序,僅需改動bootloadable工程即可,避免錯誤修改Bootloader中內(nèi)容。
在技術(shù)實現(xiàn)上,PSoC3 Bootloader可分為三個功能層次,如圖 2所示?;就ㄓ崒雨P(guān)注通訊接口原子級的數(shù)據(jù)收發(fā),不同的通訊接口具有不同的原子級數(shù)據(jù)收發(fā),如SPI和UART一次數(shù)據(jù)收發(fā)都是基于單個字節(jié),而I2C的一次完整數(shù)據(jù)收發(fā)由多個字節(jié)組成的I2C協(xié)議數(shù)據(jù)包。在基本通訊之上,PSoC3 Bootloader已定義了一套與主機通訊的更新協(xié)議,以便接收主機發(fā)送的命令幀,并將處理結(jié)果以狀態(tài)幀通知主機,此部分功能由協(xié)議處理層完成。核心功能層與具體的數(shù)據(jù)收發(fā)無關(guān),此部分僅關(guān)注數(shù)據(jù)幀的解析,處理,F(xiàn)lash的讀寫等核心功能操作。
圖 2 Bootloader功能層次圖
通過此功能層劃分,核心功能層作為公共代碼模塊,所有的Bootloader工程創(chuàng)建時都將其包含在內(nèi),基本通訊層與通訊協(xié)議處理層由實際使用的通訊接口獨立維護。此設(shè)計可以在考慮不同通訊接口差異化的同時,盡量復(fù)用代碼,減少開發(fā)時間與難度。
評論