一、前言
- 打包的目的:
- 將編譯產物bin文件轉換為Boot Package格式。ROM啟動時需要識別這種格式的文件。
- 將Boot Package形成PAC文件用於下載工具燒錄。PAC文件中包含了Dloader、SFS 等其他需要燒錄或參與燒錄過程的文件。
- 打包環境
硬體平台:芯馳 E3640 E3_GATEWAY_A03 開發板
軟體平台:SemiDrive_E3 SSDK PTG3.0/MCAL PTG3.0
二、PAC文件結構和打包過程
- PAC文件是下列文件的集合:
圖 1 pac文件內容
2.下圖為打包過程示意圖:
圖 2 打包步驟
- sfs.img 僅存在於Nor/Hyper Flash的pa c包中,存儲 Flash 信息,供 ROM 啟動時讀取。
- rfd.img 僅存在於 Nor/Hyper Flashpac 包中,用於 Flash 加密啟動。
- 存儲設備 eMMC 與 SDcard 所使用 PAC 文件是一樣的,區別在於工具下載 SDcard 時,僅下載 BOOT2.img 作為 Normal Boot Package 文件,因為 SDcard 僅支持 1 個 Boot Package。
- FDA.img 是 Dloader 或 Flashloader 程序,這裡稱為 Downloader 程序。該程序僅下載時存在於 IRAM,不占用系統的存儲空間。
- 當 FDA.img 為 Dloader 時,撥碼至 USB 模式上電,ROM 啟動後,工先下載 Dloader 程序至 IRAM 中,ROM 接收完 Dloader 程序並校驗通過後在 IRAM 中運行該程序,Dloader 會初始化通訊接口與存儲設備,然後與上位機進行通訊,根據指令將各個 Boot Package、SFS、RFD 文件寫入到存儲設備中。
- 當 FDA.img 為 Flashloader 時,撥碼至 JTAG/SWD 模式上電,工具將 Flashloader 程序加載到 IRAM 中,然後調用 Flashloader 中的函數將各個 Boot Package、SFS、RFD 文件寫入到存儲設備中。
三、 SSDK 之 Python 腳本自動打包
- 編譯後由 SemiDrive 提供的 SSDK 中腳本 tools/genpac.py 自動打包,py 可以解析項目的打包配置文件 pac_config.json,一鍵完成自動打包:
- 將編譯產物 binary 合成 BootPackage;
- 選擇 SFS 的配置文件,將配置文件轉換為 img 用於打包,同時能夠指定 Boot Package 的地址;
- 選擇打包 Dloader 或 Flashloader,對 Dloader 進行簽名,Flashloader 不簽名;
- 可以進行加密配置;
- 形成 SDFactoryTool 軟體燒錄所需的 PAC 文件;
- 指定 SSDK demo 打包
- 打包命令:
prebuilts\windows\python-3.7.0\python.exe tools\genpac.py -b e3_gateway -p gpio -v IAR -c Debug -f devices\E3640\pacconfig\pac_config_sf.json --chipid=E3640 -d dloader
圖3 執行打包命令
- 工具燒錄和啟動驗證
圖4 工具燒錄
圖5 啟動驗證
四、 MCAL 打包流程
- IAR編譯工程
請先通過IAR將想要打包的Project以Release的形式先進行make,
圖6 切換 Release 模式
Project→Edit Configurations→Release
make 後會得到編譯後的工程bin文件。
通過 IAR IDE 環境進行編譯 MCAL 工程,(需為 Release 工程)編譯產物路徑為:
iar/iar_v850/$(PROJECT)/Release/Exe/$(BOARD).bin ;
以 E3_ref_gateway_E3640 為例:
生成的 bin 文件在 \MCAL\MCAL_release\iar\iar_v850\E3_ref_gateway_E3640\Release\Exe 下
圖7 編譯生成文件
- 自動打包
SemiDrive 提供的 MCAL 中包含打包自動打包腳本 tools/mcal_genpac.py , mcal_genpac.py 可以解析項目的打包配置文件 pac_config.json 進行打包,可以一鍵完成,並且已將腳本打包成脫離環境的 exe 可執行文件 tools/mcal_genpac.exe :
- 將編譯產物 binary 合成 BootPackage;
- 選擇 SFS 的配置文件,將配置文件轉換為 sfs.img 用於打包,同時能夠指定 Boot Package 的地址;
- 選擇打包 Dloader 或 Flashloader,對 Dloader 進行簽名,Flashloader 不簽名;(註:默認將board的對應Dloader和Flashloader都打包進Pac包中,默認使用Dloader)
- 可以進行加密配置;
- 形成SDFactoryTool軟體燒錄所需的PAC文件
打包命令:.\tools\mcal_genpac.exe -p E3_ref_gateway_E3640 -v IAR
圖8 執行打包命令
圖9 工具燒錄
圖10 啟動驗證
五、 總結:
編譯時注意 Debug/Release 模式的切換(SSDK 使用 Debug 模式編譯即可,而 MCAL 的 Release 用於通過 SDtools 方式燒寫);
注意兩者打包時 cmd 指令的區別。特別是 MCAL 打包時, E3640 默認為 hyperflash,當需要指定為 norflash 時,需要在後面添加 -f norflash 參數。E3106、E3104、E3110、E3205 系列默認為 norflash,當需要指定為 hyperflash 的時候需要添加 -f hyperflash。(具體命令參數解析和打包的規則見參考文檔)。
如對此有更多需求,敬請聯繫世平集團 ATU 部門,atu.cn@wpi-group.com。
六、 參考文檔
《AppNote_E3_Boot_and_OTA》
《E3系列MCAL打包工具User Guide》
歡迎在博文下方留言評論,我們會及時回復您的問題。如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com
作者:Alan Li / 李亞楠
評論