Skip to content

Firmware m0101

mefistotelis edited this page Sep 20, 2021 · 21 revisions

Table of Contents

Target
Purpose
Versions
Structure
Boot process
OS and Libraries
Flashing
Interfaces

Target

The firmware programs loader part of an Ambarella High Bandwidth Camera SoC. Processor model depends on device generation - see application part target info for details on the model and location of the target chip.

Purpose

Loader is responsible of verifying and starting the application part of the Ambarella firmware. It loads the application into correct address in RAM, and starts its execution. It also contains emergency reflashing procedures, in case the application part seem invalid.

Versions

There are multiple versions, all unencrypted.

Marking Packages Timestamp Overview
00.01.5204 OSMO_FC350Z_FW_V01.00.00.03 2016-05-25
00.01.5217 OSMO_FC350Z_FW_V01.00.00.05 2016-06-06
00.01.5277 OSMO_FC350Z_FW_V01.00.00.06 OSMO_FC350Z_FW_V01.00.00.07 2016-06-29 ... 2016-07-08
00.01.5343 OSMO_FC350Z_FW_V01.00.00.08 2016-07-22
00.01.5346 OSMO_FC350Z_FW_V01.00.00.09 2016-07-26
00.01.5365 OSMO_FC350Z_FW_V01.00.00.11 2016-08-04
00.02.0002 OSMO_FC550R_FW_V01.01.00.01 2016-04-12
00.02.0007 OSMO_FC550R_FW_V01.01.00.03 2016-04-21
00.02.0009 OSMO_FC550R_FW_V01.01.00.04 2016-04-26
00.02.0012 OSMO_FC550R_FW_V01.01.00.10 2016-05-03
00.02.0013 OSMO_FC550R_FW_V01.02.00.11 OSMO_FC550R_FW_V01.03.00.30 2016-05-09 ... 2016-06-16
00.02.0015 OSMO_FC550R_FW_V01.03.00.40 2016-08-24
01.01.4539 P3XW_FW_V01.01.0000 2015-12-15
01.01.4553 P3XW_FW_V01.02.0010 P3XW_FW_V01.03.0010 2016-01-22 ... 2016-03-09
01.02.4935 P3XW_FW_V01.03.0020 P3XW_FW_V01.04.0030 P3XW_FW_V01.04.0036 P3XW_FW_V01.05.0040 2016-03-15 ... 2016-05-09
01.05.2735 P3X_FW_V01.01.0006 P3X_FW_V01.01.0008 P3X_FW_V01.01.0009 P3X_FW_V01.01.1003 2015-04-30 ... 2015-05-12
01.05.3319 P3C_FW_V01.00.0014_Beta 2015-07-21
01.07.2735 P3S_FW_V01.01.0008 P3S_FW_V01.01.0009 2015-05-06 ... 2015-05-12
01.09.3435 P3C_FW_V01.00.0017_Beta 2015-07-30
01.10.3548 P3C_FW_V01.00.0020 P3C_FW_V01.01.0030 2015-08-12 ... 2015-09-02
01.11.4696 OSMO_FC550_FW_V01.01.00.02 2016-01-19
01.13.4312 P3C_FW_V01.02.0040 P3C_FW_V01.03.0050 P3C_FW_V01.04.0050 2015-11-23 ... 2016-03-09
01.14.3061 P3S_FW_V01.02.0007 2015-06-13
01.14.3090 P3S_FW_V01.02.0008 2015-06-17
01.14.4920 P3C_FW_V01.04.0060 P3C_FW_V01.04.0060 P3C_FW_V01.05.0070 P3C_FW_V01.05.0074 P3C_FW_V01.06.0083 P3C_FW_V01.06.0086 P3C_FW_V01.07.0082 P3C_FW_V01.07.0084 P3C_FW_V01.07.0086 P3C_FW_V01.07.0090 2016-03-15 ... 2016-11-08
01.15.3056 P3X_FW_V01.01.1007 P3X_FW_V01.02.0006 2015-06-12 ... 2015-07-10
01.15.4872 OSMO_FC550_FW_V01.01.00.03 2016-02-24
01.16.4879 OSMO_FC550_FW_V01.01.00.04 OSMO_FC550_FW_V01.01.00.05 2016-02-24 ... 2016-03-01
01.19.4923 WM610_FC550_FW_V01.08.00.92 2016-03-24
01.20.3419 P3S_FW_V01.03.0020 2015-07-24
01.21.3647 P3S_FW_V01.04.0010 2015-09-02
01.21.4982 OSMO_FC550_FW_V01.01.00.07 2016-03-14
01.22.4095 P3S_FW_V01.05.0030 P3S_FW_V01.06.0040 2015-11-23 ... 2015-12-22
01.22.5037 OSMO_FC550_FW_V01.01.00.08 2016-03-25
01.23.3419 P3X_FW_V01.03.0020 P3X_FW_V01.04.0005 P3X_FW_V01.04.0010 2015-07-24 ... 2015-09-02
01.23.4920 P3S_FW_V01.07.0060 P3S_FW_V01.08.0080 P3S_FW_V01.09.0060 2016-03-13 ... 2016-05-19
01.23.5071 OSMO_FC550_FW_V01.01.00.09 2016-04-01
01.24.5087 OSMO_FC550_FW_V01.01.00.11 2016-04-07
01.25.5119 OSMO_FC550_FW_V01.01.00.13 2016-04-14
01.25.5432 P3S_FW_V01.10.0090 2016-11-07
01.26.4315 P3X_FW_V01.05.0030 P3X_FW_V01.06.0040 P3X_FW_V01.07.0043_beta 2015-11-23 ... 2015-12-30
01.27.5134 OSMO_FC550_FW_V01.03.00.30 2016-06-16
01.29.4920 P3X_FW_V01.07.0060 2016-03-13
01.29.5379 OSMO_FC550_FW_V01.03.00.40 2016-08-24
01.30.5036 P3X_FW_V01.08.0080 P3X_FW_V01.09.0060 2016-04-05 ... 2016-05-19
01.32.5432 P3X_FW_V01.10.0090 2016-11-07
02.29.4149 OSMO_FW_V01.00.01.19 2015-10-15
02.47.4492 OSMO_FW_V01.04.01.80 2015-12-26
02.56.4772 OSMO_FW_V01.05.01.88 2016-01-31
02.57.4788 OSMO_FW_V01.05.01.89 2016-02-05
02.59.4875 OSMO_FW_V01.05.01.92 OSMO_FW_V01.05.01.93 OSMO_FW_V01.05.01.94 2016-02-25 ... 2016-03-02
02.60.4918 OSMO_FW_V01.05.01.95 2016-03-04
02.61.4968 OSMO_FW_V01.05.01.96 2016-03-10
02.62.4985 OSMO_FW_V01.05.01.97 2016-03-11
02.63.4998 OSMO_FW_V01.05.02.00 2016-03-16
02.65.5033 OSMO_FW_V01.06.02.10 WM610_FW_V01.08.00.92 2016-03-24 ... 2016-03-24
02.67.5234 OSMO_FW_V01.08.02.30 2016-06-16
02.68.5367 OSMO_FC350Z_FW_V01.00.00.12 OSMO_FC350Z_FW_V01.00.00.13 OSMO_FC350Z_FW_V01.00.00.14 OSMO_FC350Z_FW_V01.00.00.15 2016-08-08 ... 2016-08-26
02.68.5408 OSMO_FC350Z_FW_V01.00.00.16 2016-08-26
02.68.5411 OSMO_FC350Z_FW_V01.00.00.17 OSMO_FC350Z_FW_V01.00.00.20 2016-08-29
02.69.5423 OSMO_FC350Z_FW_V01.01.00.21 OSMO_FC350Z_FW_V01.01.00.30 OSMO_FW_V01.08.02.35 2016-09-06 ... 2016-09-21
02.70.5440 OSMO_FW_V01.08.02.36 OSMO_FW_V01.08.02.40 2016-09-24 ... 2016-09-26
02.70.5442 OSMO_FC350Z_FW_V01.02.00.32 OSMO_FC350Z_FW_V01.02.00.33 2016-09-30
02.71.5449 OSMO_FC350Z_FW_V01.02.00.38 OSMO_FC350Z_FW_V01.02.00.40 2016-10-08 ... 2016-10-17
02.73.5514 OSMO_FC350Z_FW_V01.03.00.50 WM610_FC350Z_FW_V01.09.01.40 2016-11-09 ... 2016-11-14

Structure

TODO

Boot process

When the chip goes out of reset, embedded bootrom is executed. The bootrom is delivered by Ambarella, and has no DJI-made modifications. It does print messages to U0 interface during execution.

The bootrom detects RAM and NAND chips, then loads bootloader binary from the NAND to RAM. The bootloader, is based on Ambarella SDK but customized by DJI. The bootrom code then jumps with execution to the bootloader.

The bootloader provisions CPUs with proper startup partitions.

OS and Libraries

The bootloader is based on ThreadX operating system.

Flashing

Check the page about module m0100 for discussion of flashing methods.

Interfaces

Debug serial interface U0

The serial interface can be used to access shell on the Ambarella Linux. It allows both input and output.

A typical boot sequence which can be seen on the Amba U0 interface is as follows:

---------------------------------------------
    Cortex Boot-Up Success

Cortex freq: 504000000
ARM    freq: 132000000
DDR    freq: 528000000
Core   freq: 216000000
iDSP   freq: 264000000
AXI    freq: 168000000
AHB    freq: 108000000
APB    freq: 54000000
UART   freq: 1846153
SD0    freq: 15428571
SD1    freq: 15428571
---------------------------------------------

Start WDT timer OK.
Magic: 0x5acad81e 0x5acad81e 0x5acad81e
System COLD boot.
Continue to booting up ......

This can repeat several times, until a message:

Detecting done ......

All the messages above come from a bootrom, which is not a part of firmware update. After the last message, the bootloader starts. A typical application firmware update log generated by the m0101 firmware is as follows:

[00000000][CA9_0] [DJI] Start WDT of 20 seconds for boot up......

[00000000][CA9_0] [Version 1.0.11824], Oct 16 2015, 14:06:46


[00000000][CA9_0] [DJI] SD Updater Version [v01.23.4920] Build Mar  4 2016 16:57:05


[00000328][CA9_0] [DJI] Stop WDT.

[00000328][CA9_0] [DJI] Firmware updating......

[00000328][CA9_0] Card In Slot.
[00000629][CA9_0] SD clock source, frequency = 216000000
[00000629][CA9_0] SDCalcClk for SD card initiation:: Actual Clk = 140625, pCLK = 128
[00000647][CA9_0] start to check media
[00000653][CA9_0] AmbaSD_InitCard - SD_CARD OK
[00000658][CA9_0] Packet Detected / c:\P3X_FW_V01.02.0007.bin /.

[00000760][CA9_0] [DJI] Try Ddr Param 0.

[00000760][CA9_0] Back up partion data ......
[00038021][CA9_0] Image "System Software" is found!
[00038021][CA9_0] Image "DSP uCode" is found!
[00038021][CA9_0] Image "System ROM Data" is found!
[00038021][CA9_0] Image "Linux Kernel" is found!
[00038021][CA9_0] Image "Linux Root FS" is found!
[00038021][CA9_0] Start firmware CRC check...

[00038021][CA9_0] Checking System Software
[00041353][CA9_0] Verifying image CRC ... done
[00041353][CA9_0]       length:         9035584
[00041353][CA9_0]       crc32:          0x43e88314
[00041353][CA9_0]       ver_num:        1.0
[00041353][CA9_0]       ver_date:       2015/6/13
[00041353][CA9_0]       img_len:        9035328
[00041353][CA9_0]       mem_addr:       0x0e600000

[00041353][CA9_0] Checking DSP uCode
[00042787][CA9_0] Verifying image CRC ... done
[00042787][CA9_0]       length:         3889408
[00042787][CA9_0]       crc32:          0xd6c85dda
[00042787][CA9_0]       ver_num:        1.0
[00042787][CA9_0]       ver_date:       2015/6/13
[00042787][CA9_0]       img_len:        3889152
[00042787][CA9_0]       mem_addr:       0x0ff00000

[00042787][CA9_0] Checking System ROM Data
[00047072][CA9_0] Verifying image CRC ... done
[00047072][CA9_0]       length:         11624704
[00047072][CA9_0]       crc32:          0xc6dfedab
[00047072][CA9_0]       ver_num:        1.0
[00047072][CA9_0]       ver_date:       2015/6/13
[00047072][CA9_0]       img_len:        11624448
[00047073][CA9_0]       mem_addr:       0x03c00000

[00047073][CA9_0] Checking Linux Kernel
[00049026][CA9_0] Verifying image CRC ... done
[00049026][CA9_0]       length:         5301856
[00049026][CA9_0]       crc32:          0xec552c27
[00049026][CA9_0]       ver_num:        1.0
[00049026][CA9_0]       ver_date:       2015/6/13
[00049026][CA9_0]       img_len:        5301600
[00049026][CA9_0]       mem_addr:       0x00508000

[00049026][CA9_0] Checking Linux Root FS
[00059025][CA9_0] Verifying image CRC ... done
[00059025][CA9_0]       length:         27132160
[00059025][CA9_0]       crc32:          0xd546d3e8
[00059025][CA9_0]       ver_num:        1.0
[00059025][CA9_0]       ver_date:       2015/6/13
[00059025][CA9_0]       img_len:        27131904
[00059025][CA9_0]       mem_addr:       0x00001000

[00059498][CA9_0] Program "System Software" to NAND flash ...
[00062694][CA9_0] Done
[00062900][CA9_0] Program "DSP uCode" to NAND flash ...
[00064256][CA9_0] Done
[00064860][CA9_0] Program "System ROM Data" to NAND flash ...
[00068865][CA9_0] Done
[00069143][CA9_0] Program "Linux Kernel" to NAND flash ...
[00071008][CA9_0] Done
[00072426][CA9_0] Program "Linux Root FS" to NAND flash ...
[00081866][CA9_0] Done
[00082199][CA9_0] [DJI] Done!


[00082199][CA9_0] [DJI] Reboot......

Transmission configuration is 115200 8N1.

It is possible to interrupt boot process during bootrom execution by pressing ESC key on serial console. A simple shell appears, where available commands depend on chip type:

AmbaTools> help
help [command]
Get help on [command], or a list of supported commands if a command is omitted.
The following commands are supported:
show
erase
diag
writew
readw

Video i/o interfaces

These interfaces are not used by the loader firmware. See module m0100 documentation for information about the video processing pipeline.

Clone this wiki locally