Difference between revisions of "Firmware file format (.gdf)"
From Granite Devices Knowledge Wiki
| [checked revision] | [checked revision] |
(→Header) |
(→GDF version 400 - draft) |
||
| (One intermediate revision by the same user not shown) | |||
| Line 29: | Line 29: | ||
* ---------------------- | * ---------------------- | ||
* | * | ||
| − | * Note: GDF v400 is not limited to firmware files any more, | + | * Note: GDF v400 is not limited to firmware files any more," |
* it can be used as general purpose data container for up to 4GB data chunks. | * it can be used as general purpose data container for up to 4GB data chunks. | ||
* | * | ||
| Line 40: | Line 40: | ||
* 2 GDF version = 400 | * 2 GDF version = 400 | ||
* 2 GDF backwards compatible version = 400 | * 2 GDF backwards compatible version = 400 | ||
| + | * 4 File category = 100 for firmware files (value range <2^31 is reserved and managed by GD, range from 2^31 to 2^32-1 are free for use by anyone for any purpose) | ||
* 4 number of data chunks in file = N | * 4 number of data chunks in file = N | ||
* | * | ||
| Line 52: | Line 53: | ||
* | * | ||
* 4 file's CRC-32 | * 4 file's CRC-32 | ||
| − | + | * | |
| − | + | ||
| − | + | ||
* data chunk types | * data chunk types | ||
* ---------------- | * ---------------- | ||
| Line 66: | Line 65: | ||
* 7=disclaimer, UTF8 | * 7=disclaimer, UTF8 | ||
* 8=circulation, UTF8 (i.e. customer name) | * 8=circulation, UTF8 (i.e. customer name) | ||
| − | * 20=unix timestamp, S=4 | + | * 20=unix timestamp divided by 4, S=4 |
| − | * 50=target device type ID | + | * 50=target device type ID range, S=8 |
| − | * first 4 bytes are target device ID, i.e. 11000=IONI | + | * first 4 bytes are lowest supported target device ID, i.e. 11000=IONI |
| − | * second 4 bytes are | + | * second 4 bytes are highest supported target device ID's, i.e. 11200=IONI PRO HC |
| − | + | ||
* 100=main MCU FW binary, S=any | * 100=main MCU FW binary, S=any | ||
| − | * 101=main MCU FW unique identifier number, S=4 | + | * 101=main MCU FW unique identifier number (this value is also readable from target device over SM bus), S=4 |
* 102=main MCU FW required HW feature bits, S=4 | * 102=main MCU FW required HW feature bits, S=4 | ||
* helps to determine whether FW works on target | * helps to determine whether FW works on target | ||
| Line 86: | Line 84: | ||
* bits 1-31: reserved | * bits 1-31: reserved | ||
* | * | ||
| − | */ | + | */</pre> |
| − | </pre> | + | |
For practical reading software implementation, see devicedeployment.c from SimpleMotion library. | For practical reading software implementation, see devicedeployment.c from SimpleMotion library. | ||
Latest revision as of 11:34, 11 October 2018
Contents
File format byte by byte[edit | edit source]
All multibyte integers are stored LSB first.
GDF version 300[edit | edit source]
Header[edit | edit source]
IDString - 4 bytes, always="GDFW"
BLFileVersion - 2 bytes, value=300
TargetDriveType - 2 bytes, Argon=4000, Ion=11000, Atomi=14000
HostFWbytes - 4 bytes, number of bytes for STM32 CPU
GCFWbytes - 4 bytes, number of bytes for GraniteCore CPU or 0xffffffff if not included
Data[edit | edit source]
Data of HostFW begins. Amount of bytes is HostFWbytes
Data of GCFW begins. Amount of bytes is GCFWbytes
File checksum[edit | edit source]
FileCksum - 4 bytes calculated from the current file. Simply sum of all unsigned bytes in file except CKSum itself
GDF version 400 - draft[edit | edit source]
Header[edit | edit source]
Version 400 described below:
/* GDF version 400 format
* ----------------------
*
* Note: GDF v400 is not limited to firmware files any more,"
* it can be used as general purpose data container for up to 4GB data chunks.
*
* Binary file contents
* --------------------
*
* bytes meaning:
*
* 4 ASCII string = "GDFW"
* 2 GDF version = 400
* 2 GDF backwards compatible version = 400
* 4 File category = 100 for firmware files (value range <2^31 is reserved and managed by GD, range from 2^31 to 2^32-1 are free for use by anyone for any purpose)
* 4 number of data chunks in file = N
*
* repeat N times:
* 4 data chunk descriptive name string length in bytes = L
* L data chunk descriptive name string in UTF8
* 4 data chunk type
* 4 data chunk option bits
* 4 data chunk size in bytes=S
* S data
* end of repeat
*
* 4 file's CRC-32
*
* data chunk types
* ----------------
* 0=target device name, UTF8
* 1=firmware name, UTF8
* 2=firmware version string, UTF8
* 3=remarks, UTF8
* 4=manufacturer, UTF8
* 5=copyright, UTF8
* 6=license, UTF8
* 7=disclaimer, UTF8
* 8=circulation, UTF8 (i.e. customer name)
* 20=unix timestamp divided by 4, S=4
* 50=target device type ID range, S=8
* first 4 bytes are lowest supported target device ID, i.e. 11000=IONI
* second 4 bytes are highest supported target device ID's, i.e. 11200=IONI PRO HC
* 100=main MCU FW binary, S=any
* 101=main MCU FW unique identifier number (this value is also readable from target device over SM bus), S=4
* 102=main MCU FW required HW feature bits, S=4
* helps to determine whether FW works on target
* device version when compared to a value readable from the device.
* 0 means no requirements, works on all target ID devices.
* 200=secondary MCU FW binary, S=any
*
* note: firmware may contain many combinations of above chunks. in basic case, it contains just chunk type 100 and nothing else.
*
* data chunk option bits
* ----------------------
* bit 0: if 1, GDF loading application must support/understand the chunk type to use this file
* bits 1-31: reserved
*
*/
For practical reading software implementation, see devicedeployment.c from SimpleMotion library.