【ATU Book-i.MX8系列】 UUU(Universal Update Utility)

關鍵字 :NXPi.MXUUUATU
1. UUU 簡介

UUU 全名為 Universal Update Utility。對 NXP i.MX 系列熟悉的使用者對 MFGTools 一定不會感到陌生,而 UUU 就是從 MFGTools 演進而來的,也稱為 MFGTools v3。至於不熟悉的人也還是得問,這個 UUU(MFGTools)到底是做什麼的?我們不賣關子,它的答案就是進行 Freescale/NXP Chip image 的燒錄。

這個改版的 UUU 有一個重大的改變,在於可運行的環境。原本的 MFGTools 只能提供 Windows 版本,改為 UUU 之後,即可以在 Windows 或是 Linux OS 下進行操作。此外,官方也提供原始碼(https://github.com/NXPmicro/mfgtools/wiki),讓客戶可以基於其核心,自行設計自己的燒錄工具。在這份文件中,會介紹 UUU 的使用方式以及其架構,讓客戶在燒錄時能了解目前燒錄的進度到哪,也有能力在無法燒錄時進行故障排除,進一步可以客製化自己的燒錄工具。

UUU 是一個 command line tools,執行畫面如下圖。


UUU 執行畫面示意圖

 
1.1 UUU 運行環境

  • Windows 10, 64bit
  • Ubuntu 16.14 or above, 64bit

 1.2 License

若需要引用原始碼來開發自己的軟體需要注意相關授權的問題。UUU 基本上為 BSD 授權。而其他配套相關的 linked library,使用的授權列舉如下,

 


2. UUU 指令介紹

一般而言,UUU 可逐行單獨執行,也可以將其收集寫成一個腳本,或是直接採用內建的腳本。另外,UUU 也可以做同時多塊板子同 image 或是不同 image 的燒錄。後續章節我們將會對這些內容做說明。

 
2.1 基本單指令

uuu + protocol:可進行溝通,下載或是直接燒錄


2.1.1 SDP protocol:USB SDP(Standard Downstream Port)協定,可下載映像至板端(internal RAM)。適用於 MX6/7/8M

Run DCD from image with ivt header

uuu sdp: dcd -f

 

Write image to address.

uuu sdp: write -f [-addr 0x000000] [-ivt 0]

 

Jump to image with ivt header

uuu sdp: jump -f [-ivt 0]

 

Boot image, include (dcd, write and jump three commands)

uuu sdp: boot -f [-nojump]

 
2.1.2 SDPS protocol:與 SDP 相同,適用於MX8QXP 和 i.MX8QM。

Send image by sdp command.

uuu sdps: boot -f [-offset 0x0000]

 
2.1.3 SDPU/SDPV protocol:通常接續在 SDP 之後,指令與 SDP 雷同,在 uboot 執行。

Run DCD from image with ivt header

uuu sdpu: delay 1000

uuu sdpu: write -f flash.bin -offset 0x57c00

uuu sdpu: jump

 
2.1.4 FB:Android fastboot protocol in uboot

ucmd:

acmd:

Boot linux kernel

uuu FB: ucmd setenv fastboot_buffer ${loadaddr}

uuu FB: download -f Image

uuu FB: ucmd setenv fastboot_buffer ${fdt_addr}

uuu FB: download -f imx8qxp_mek.dtb

uuu FB: acmd booti ${loadaddr} - ${fdt_addr}

 

Extended environment for fastboot

fastboot_buffer             /* Image download address */

fastboot_bytes              /* reflect previous download image byte size */

 

Write image to emmc

uuu FB: flash -raw2sparse all

 
2.1.5 FBK:Android fastboot protocol in kernel

ucmd:

acmd:

ucp:複製檔案

sync:等待、確保指令結束

複製檔案至指定目的地

uuu FBK: ucp imx8x/flash.bin t:/tmp

 

使用 kernel 指令 dd 進行燒錄

uuu FBK: ucmd dd if=/tmp/flash.bin of=/dev/mmcblk0 bs=1024 seek=32

 
2.2 特定單指令燒錄

uuu + bootloader(等同於 uuu + SDP


2.2.1 下載 bootloader for imx6/imx7/imx8qxp 至 internal RAM

uuu uboot.imx

uuu flash.bin

 
2.3 使用內建的燒錄腳本

實際內容不外乎就是基本單指令的集合。


2.3.1 emmc 專用腳本

uuu -b emmc bootloader                                         /* 寫入 bootloader emmc */

uuu -b emmc_all bootloader rootfs.sdcard           /* 完整燒錄至 emmc */

uuu -b emmc_all bootloader rootfs.sdcard.bz2/*  /*解壓縮後,完整燒錄 emmc */

 
2.3.2 sd 專用腳本

uuu -b sd bootloader                                            /* 寫入 bootloader SD */

uuu -b sd_all bootloader rootfs.sdcard               /* 完整燒錄至 SD */

uuu -b sd_all bootloader rootfs.sdcard.bz2/*  /*解壓縮後,完整燒錄 SD */

 
2.3.3 qspi 專用腳本

uuu -b qspi qspi_bootloader

uuu -b qspi qspi_bootloader m4image

 
2.3.4 spl 專用腳本

uuu -b spl bootloader                                 /* 寫入 spl uboot Internal RAM */

 
2.4 多塊板子燒錄


2.4.1 燒錄選項〝d〞

Daemon mode(可進行重覆燒錄)

uuu -d uuu.auto

 


2.4.2 燒錄選項〝m〞

若同時連接兩塊以上的板子,可以看到類似以下畫面。以此為例,板子 1:2 此時停留在 FB mode,而板子 1:1 停留在 SDP mode

 

所以在後續使用上,利用 -m 可以針對某個或某些 port 進行燒錄。


2.4.3 綜合〝d〞和〝m〞

綜合上述兩個選項,針對不同的 USB port 連續燒錄不同的板子或是不同的 image 的方法如下,

uuu -d -m 1:1 -m 2:1 boardA_uuu.auto        //monitor port 1:1 and 2:1 for boardsA.

uuu -d -m 1:3 -m 4:1 boardB_uuu.auto        //monitor port 1:3 and 4:1 for boardsB.

 
3. 相關設定

3.1 UUU 支援的協定

UUU可以支援多種不同的協定,在不同的平台或是不同的階段下,各平台適用的協定以及各協定的 VID/PID 參考如下。另外,在 console 下,可以使用 uuu -lsusb 立即查詢目前板端的狀態。

 

Pctl              Chip           Vid              Pid              BcdVersion

==================================================

SDPS:           MX8QXP              0x1fc9        0x012f        [0x0002..0xffff]

SDPS:           MX8QM               0x1fc9        0x0129       [0x0002..0xffff]

SDP:             MX7D                   0x15a2       0x0076

SDP:             MX6Q                  0x15a2       0x0054

SDP:             MX6D                   0x15a2       0x0061

SDP:             MX6SL                  0x15a2       0x0063

SDP:             MX6SX                 0x15a2       0x0071

SDP:             MX6UL                 0x15a2       0x007d

SDP:             MX6ULL               0x15a2       0x0080

SDP:             MX6SLL                0x1fc9        0x0128

SDP:             MX7ULP               0x1fc9        0x0126

SDP:             MXRT106X           0x1fc9        0x0135

SDP:             MX8MM              0x1fc9        0x0134

SDP:             MX8MQ               0x1fc9        0x012b

SDPU:          SPL                       0x0525       0xb4a4       [0x0000..0x04ff]

SDPV:          SPL1                     0x0525       0xb4a4       [0x0500..0xffff]

FBK:                                           0x066f        0x9afe

FBK:                                           0x066f        0x9bff

FB:                                             0x0525       0xa4a5

FB:                                             0x18d1       0x0d02

 

 

上圖的例子除了可以理解 USB port 的分佈之外,也可以對應前面的 table,看得出來 Path 1:2 目前處在 FB Protocol,且VID 為 0x0525,PID為 0xA4A5;而 Path 1:1 目前則處在 SDP Protocol,且 VID 為 0x1FC9,PID 為 0x012B,是 i.MX8MQ 板子。

 
3.2 uboot config 需求

  • 為了有效應用 uuu,uboot 需要 enable fastboot,以下是 fastboot 必開選項,而且會在偵測到是 USB 開機的情況下自動執行。

CONFIG_CMD_FASTBOOT=y

CONFIG_USB_FUNCTION_FASTBOOT=y

CONFIG_USB_GADGET=y

CONFIG_USB_GADGET_DOWNLOAD=y

CONFIG_USB_GADGET_MANUFACTURER="FSL"

CONFIG_USB_GADGET_VENDOR_NUM=0x0525

CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5

 

#UDC need change according system, some system use CONFIG_USB_DWC3, some use CONFIG_USB_CDNS3

CONFIG_CI_UDC=y

 

CONFIG_FSL_FASTBOOT=y

CONFIG_FASTBOOT=y

 

#Address need change according system, generally it can be the same as ${LOADADDR}

CONFIG_FASTBOOT_BUF_ADDR=0x83800000

 

CONFIG_FASTBOOT_BUF_SIZE=0x40000000

CONFIG_FASTBOOT_FLASH=y

CONFIG_FASTBOOT_FLASH_MMC_DEV=1

CONFIG_EFI_PARTITION=y

CONFIG_ANDROID_BOOT_IMAGE=y

 

  • 使用 SDP 的話,則需要開啟

CONFIG_SPL_USB_HOST_SUPPORT=y

CONFIG_SPL_USB_GADGET_SUPPORT=y

CONFIG_SPL_USB_SDP_SUPPORT=y

CONFIG_SDP_LOADADDR=0x40400000       #Address need change according system, choose free memory

 
4. 總結

以軟體而言,將 build 好的 image 燒錄至板端然後開機是最最最基本的功課。而後續要展開各式各樣的應用當然也是基於能開機的前提之下,所以如何進行完整的成功的燒錄非常重要。〝工欲善其事、必先利其器〞,這篇文章介紹了 i.mx 的燒錄 tool – UUU,冀望使用者在讀完之後,進一步的了解整個燒錄的過程,為後續的應用起一個好的開局。

 
5. 參考文件

 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

評論