Program to update the D7A modem's firmware.
Dependencies: modem_ref_helper DebouncedInterrupt
cup.h@32:e3ee65b5b835, 2019-08-20 (annotated)
- 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?
User | Revision | Line number | New 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 |