Program to update the D7A modem's firmware.

Dependencies:   modem_ref_helper DebouncedInterrupt

Committer:
Jeej
Date:
Tue Aug 20 13:51:30 2019 +0000
Revision:
32:e3ee65b5b835
Parent:
26:7fc24677a950
Release SH2050 v5.3.217

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 0:82a60d86ab2e 1 #include "mbed.h"
Jeej 0:82a60d86ab2e 2 #include "bin.h"
Jeej 22:f2b01e5e087e 3 #include "modem_ref_helper.h"
Jeej 0:82a60d86ab2e 4
Jeej 0:82a60d86ab2e 5 //------------------------------------------------------------------
Jeej 0:82a60d86ab2e 6 // CUP Package files structure:
Jeej 0:82a60d86ab2e 7 // | SIZE | ADDR | BINARY | PAD | CRC | Next Archive
Jeej 0:82a60d86ab2e 8 // | 4B | 4B | XB | 0-3 B | 4B | ...
Jeej 0:82a60d86ab2e 9 // | | | ...
Jeej 0:82a60d86ab2e 10 // |<------------------CRC----------------------->| | ...
Jeej 0:82a60d86ab2e 11 // |<-----------------------SIZE------------------------>| ...
Jeej 0:82a60d86ab2e 12 //
Jeej 0:82a60d86ab2e 13 // Archive must be word-aligned
Jeej 0:82a60d86ab2e 14 // Archives can be concatenated
Jeej 0:82a60d86ab2e 15 // ADDR is the destination address of the installed archive
Jeej 0:82a60d86ab2e 16 // SIZE accounts for whole archive (including itself)
Jeej 0:82a60d86ab2e 17 // Binary size must be multiple of word (i.e pad=4)
Jeej 0:82a60d86ab2e 18 // CRC calculated on whole archive (obviously excluding itself)
Jeej 0:82a60d86ab2e 19 // Values (size,addr) are stored little-endian
Jeej 0:82a60d86ab2e 20
Jeej 0:82a60d86ab2e 21
Jeej 7:5b8648784381 22 extern uint8_t root_key[CUP_DEFAULT_KEY_SIZE];
Jeej 7:5b8648784381 23 extern uint8_t root_key_size;
Jeej 0:82a60d86ab2e 24
Jeej 15:24434827c575 25
Jeej 15:24434827c575 26
Jeej 0:82a60d86ab2e 27 //======================================================================
Jeej 0:82a60d86ab2e 28 // cup_cfg_t
Jeej 0:82a60d86ab2e 29 //----------------------------------------------------------------------
Jeej 0:82a60d86ab2e 30 /// @brief This is the structure of the CUP Config FILE.
Jeej 0:82a60d86ab2e 31 /// This file _MUST_ always be located a the same place (EEPROM
Jeej 0:82a60d86ab2e 32 /// Origin) as BOOT/CUP access it in a hardcoded way.
Jeej 0:82a60d86ab2e 33 /// !! Do NOT touch this except if you're a CUP Master !!
Jeej 0:82a60d86ab2e 34 //======================================================================
Jeej 0:82a60d86ab2e 35 TYPEDEF_STRUCT_PACKED
Jeej 0:82a60d86ab2e 36 {
Jeej 0:82a60d86ab2e 37 // The CUP Command
Jeej 0:82a60d86ab2e 38 uint16_t cmd;
Jeej 0:82a60d86ab2e 39 // Number of Archives to be CUP'ed
Jeej 0:82a60d86ab2e 40 uint16_t arch_nb;
Jeej 0:82a60d86ab2e 41 // This field has 2 meanings:
Jeej 0:82a60d86ab2e 42 // - when read-out it gives start address of CUP-Code file
Jeej 0:82a60d86ab2e 43 // - when written (for a CUP start) it gives the offset (in bytes) at
Jeej 0:82a60d86ab2e 44 // which the first archive is stored in CUP-Code file
Jeej 0:82a60d86ab2e 45 uint32_t src_offset;
Jeej 0:82a60d86ab2e 46 // CRC32 of the arch_nb concatenated archives starting at offset
Jeej 0:82a60d86ab2e 47 uint32_t signature;
Jeej 0:82a60d86ab2e 48 // TODO: Deciphering key. For now CUP MAX size
Jeej 0:82a60d86ab2e 49 uint32_t key;
Jeej 0:82a60d86ab2e 50 // Debug / Uart config
Jeej 0:82a60d86ab2e 51 uint32_t dbg_cfg;
Jeej 0:82a60d86ab2e 52 } cup_cfg_t;
Jeej 0:82a60d86ab2e 53
Jeej 15:24434827c575 54 TYPEDEF_STRUCT_PACKED
Jeej 15:24434827c575 55 {
Jeej 15:24434827c575 56 uint8_t* data;
Jeej 15:24434827c575 57 uint8_t cfg_fid;
Jeej 15:24434827c575 58 uint8_t code_fid;
Jeej 15:24434827c575 59 uint32_t code_size;
Jeej 15:24434827c575 60 uint32_t data_size;
Jeej 15:24434827c575 61 uint32_t local_mtu;
Jeej 15:24434827c575 62 uint32_t nb_archives;
Jeej 15:24434827c575 63 uint32_t signature;
Jeej 15:24434827c575 64 uint32_t mfg_id;
Jeej 15:24434827c575 65 uint32_t dev_id;
Jeej 15:24434827c575 66 uint32_t hw_id;
Jeej 15:24434827c575 67 uint8_t fw_major;
Jeej 15:24434827c575 68 uint8_t fw_minor;
Jeej 15:24434827c575 69 uint16_t fw_patch;
Jeej 15:24434827c575 70 uint32_t fw_hash;
Jeej 15:24434827c575 71 uint8_t target_fw_major;
Jeej 15:24434827c575 72 uint8_t target_fw_minor;
Jeej 15:24434827c575 73 } cup_param_t;
Jeej 4:23cb73bb11b3 74
Jeej 15:24434827c575 75
Jeej 15:24434827c575 76 extern cup_param_t const cup_modem;
Jeej 15:24434827c575 77 extern cup_param_t const cup_bootloader;
Jeej 15:24434827c575 78
Jeej 15:24434827c575 79 void cup_start_update(uint32_t offset, bool bootloader = false);
Jeej 0:82a60d86ab2e 80
Jeej 0:82a60d86ab2e 81