簡單整理下固件、燒寫的定義以及燒寫過程的幾種方式。
一、什么是燒寫(下載)和固件
嵌入式系統需要預先將程序寫入ROM/FLASH中,在啟動時載入運行這些程序,將已經生成的程序寫入ROM/FLASH的過程叫做燒寫。這樣固化在存儲介質上的文件叫固件(firmware)。那么燒寫即為更新固件的過程。
二、常用的幾種燒寫方式
把系統當做一個存儲區域進行燒寫;
采用專門接口及專用的下載線將程序燒寫到固件中。這時CPU除了執行單片機本身的指令之外,還能執行對存儲器進行操作的特殊指令,擦除、燒寫和校驗指令。先通過傳輸相應的指令給CPU執行(擦除、讀入、燒寫、校驗等),這樣完成燒寫。現在普遍使用的JTAG仿真器也是這樣,CPU能執行JTAG的特殊指令,完成對固件的燒寫操作。
引導程序,即單片機中已經存在了一個燒寫程序。啟動單片機時首先運行這程序,程序判斷端口狀態,識別為燒寫的特殊狀態,就從某個端口讀取數據,然后寫入到存儲單元中。如果是正常的狀態,就轉到用戶的程序開始執行。需要觸發硬件選擇用戶程序模式還是燒寫模式。
三、關於ISP、ICP、IAP三種編程方式區別
ISP:In System Programing,在系統編程
ICP:In Circuit Programing,在電路編程
IAP:In Applicating Programing,在應用編程
ICP工作方式:只需要上電,處理器無需工作,更新整個存儲內容的方式,不需要處理器中間操作,不需要存在引導程序,屬於硬件單獨處理行為,芯片編成方式??
ISP工作方式:可以編程寫入最終用戶代碼,而不需要從電路板上取下器件,已經編程的器件也可以用ISP方式擦除或再編程,理解上需要一些必要的硬件邏輯或引導代碼,如使用JTAG下載;
IAP工作方式:IAP從結構上將Flash存儲器映射為多個存儲體區域(引導區、運行區、下載存儲區等等),第一個項目程序存放在應用引導區,不執行正常的功能操作,而只是通過某種通信管道接收程序或數據,執行對其他部分代碼的更新;其他代碼才是真正的功能代碼,存放在程序存儲區。當芯片上電后,首先運行應用引導區程序,它作如下操作,檢查是否需要對第二部分代碼進行更新,存在更新則進行更新后執行,否則直接執行。所以引導區程序應該不可以IAP方式更新。
個人理解:
IAP的方式最為靈活,但是由於使用方式的受到限制,無法對存儲區域的分配進行重新的划分,引導區也應該無法自修改。
ICP硬件基礎型=>ISP借助外力型=>IAP自由獨立型
轉載:http://www.21ic.com/jichuzhishi/mcu/write/2017-05-10/718634.html