在使用恩智浦公司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
相关产品:
FETMX6Q-C核心板