Difference between revisions of "Firmware file format (.gdf)"

From Granite Devices Knowledge Wiki
Jump to: navigation, search
[checked revision][checked revision]
(GDF version 400 - draft)
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
Argon firmware file contains embedded software for [[Argon (servo drive)]]. Firmware file is generated by makefirmware utily.
 
 
==File format byte by byte==
 
==File format byte by byte==
 
All multibyte integers are stored LSB first.
 
All multibyte integers are stored LSB first.
 +
==GDF version 300==
 
===Header===
 
===Header===
 
IDString - 4 bytes, always="GDFW"
 
IDString - 4 bytes, always="GDFW"
  
BLFileVersion - 2 bytes, current=300
+
BLFileVersion - 2 bytes, value=300
  
TargetDriveType - 2 bytes, Argon=4000, Ion=5000
+
TargetDriveType - 2 bytes, Argon=4000, Ion=11000, Atomi=14000
  
 
HostFWbytes - 4 bytes, number of bytes for STM32 CPU
 
HostFWbytes - 4 bytes, number of bytes for STM32 CPU
  
GCFWbytes - 4 bytes, number of bytes for GraniteCore CPU
+
GCFWbytes - 4 bytes, number of bytes for GraniteCore CPU or 0xffffffff if not included
 +
 
 
===Data===
 
===Data===
 
Data of HostFW begins. Amount of bytes is HostFWbytes
 
Data of HostFW begins. Amount of bytes is HostFWbytes
  
Data of GCW begins. Amount of bytes is GCFWbytes
+
Data of GCFW begins. Amount of bytes is GCFWbytes
 +
 
 
===File checksum===
 
===File checksum===
 
FileCksum - 4 bytes calculated from the current file. Simply sum of all unsigned bytes in file except CKSum itself
 
FileCksum - 4 bytes calculated from the current file. Simply sum of all unsigned bytes in file except CKSum itself
 +
 +
 +
==GDF version 400 - draft==
 +
===Header===
 +
Version 400 described below:
 +
<pre>
 +
        /* 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
 +
        *
 +
        */</pre>
 +
 +
For practical reading software implementation, see devicedeployment.c from SimpleMotion library.
 +
 +
[[Category:Development]]
  
 
[[Category:Development]]
 
[[Category:Development]]

Latest revision as of 11:34, 11 October 2018

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.