在使用恩智浦公司i.MX6系列芯片時,會使用到MFGTool軟件通過連接PC和開發板的USB A型口轉Micro USB線來給相應的芯片燒錄程序,本文主要講解MFGTool軟件燒寫的原理。
一、軟件的構成
以官網下載的L4.1.15_2.0.0-ga_mfg-tools.tar.gz軟件包爲例子。在官網下載好軟件包後在本地解壓,解壓後如下圖所示,其中紅色箭頭所指向的文件及文件夾爲配置下載工具時需要修改及注意的地方。
文件說明:
cfg.ini文件:用來配置鏡像所在的文件夾位置、及ucl2.xml中執行哪個列表的指令、定義一些初始化參數。
UICfg.ini:定義MfgTool軟件能同時燒錄幾塊SoC,官方文檔說明最大設定值4,對應4塊。
Document/: 關於Mfgtool 的使用文檔;
Drivers/: USB iMX_BulkIO_Driver;
Profiles/: 存放要燒錄的image文件以及ucl.xml;
mfgtool.log:關於Mfgtool使用過程中的log記錄。
mfgtool2-***.vbs:.vbs文件是用來執行MfgTool2.exe的腳本並傳遞參數到軟件,如果cfg.ini文件中也定義了同樣的參數默認.vbs中的參數會覆蓋cfg.ini中的參數值。
二、Mfgtool工作原理
參考 517-MFGTOOLCustomizationGuide.pptx官方ppt裏面介紹Mfgtool的啓動流程圖。
1、 當 i.MX6板子上電後,什麼都沒有初始化,只有Chip ROM(芯片的內部ROM)可以運行。Chip ROM的默認程序會去初始化USB,並將其配置爲HID設備。這就是爲什麼板子設置爲Download模式並上電後在PC端的設備管理器可以看到HID-compliant device連上。
2、 一旦PC機檢測到HID設備連上,那麼PC(USB Host)就會去枚舉設備並建立連接。建立連接後的第一件事就是傳送一個mini uboot(firmware)到目標板SoC的Chip RAM(芯片的內部RAM)中然後開始運行mini uboot(firmware)。mini uboot會對目標板進行初始化,主要是初始化 DDR/外部ROM等設備,所以之後DDR及外部ROM已經可以訪問了。mini uboot從mini uboot中提取內存初始化代碼或數據來執行任務。也可以使用內存初始化腳本來獲取初始化數據。
3、 初始化外部基本接口之後,PC端會將mini kernel(firmware)、mini system(firmware)、dtb(firmware)傳送給SoC並放到DDR(外部RAM)指定的地址。然後PC發送命令(ucl2.xml中<CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>)給Chip ROM讓其跳轉到DDR的kernel首地址去執行。
4、 跳轉到kernel之後,初始化USB驅動,並枚舉爲一個MSC設備,此時SoC可以和主機進行高速數據傳輸。
5、 之後PC機MFGTool工具通過ucl2.xml中的腳本逐條執行剩下的指令直到最後遇到Done指令。
注:
* 上面提到的mini uboot、mini kernel、mini system、dtb文件均在軟件目錄下的\Profiles\Linux\OS Firmware\firmware文件夾下。
* mini kernel必須要配置USB、USB大容量存儲驅動、SD卡、UTP等。詳見:mfgtools\Document\V2\Manufacturing Tool V2 Linux or Android Firmware Development Guide V2.docx文檔。
* mini kernel啓動linuxrc作爲第一個進程,linuxrc其實是一個腳本,最終通過執行 uuc 來啓動UTP傳輸協議。UTP是作爲USB Mass Storage(v4 Kernel)驅動的擴展,所以啓動 UTP 必須對 USB 進行復位然後重新枚舉。
到此MFGTool的工作原理基本就講解完。瞭解到MFGTool的工作機制之後會幫助開發人員在今後的開發過程中更容易的去發現問題,也可以爲日後根據各自需要對MFGTool定製提供一個參考。
原文鏈接:https://www.forlinx.com/article_view_367.html