-
Notifications
You must be signed in to change notification settings - Fork 428
Firmware m0101
Target
Purpose
Versions
Structure
Boot process
OS and Libraries
Flashing
Interfaces
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.
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.
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 |
TODO
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.
The bootloader is based on ThreadX operating system.
Check the page about module m0100 for discussion of flashing methods.
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
These interfaces are not used by the loader firmware. See module m0100 documentation for information about the video processing pipeline.
This page is created by drone enthusiasts for drone enthusiasts.
If you see a mistake, or you know more about specific subject, or you see an area for improvement for the wiki - create an issue in this project and attach your patch (or describe the change you propose).