Program to update the D7A modem's firmware.
Dependencies: modem_ref_helper DebouncedInterrupt
cup.cpp@13:c3324b26d473, 2017-01-11 (annotated)
- Committer:
- Jeej
- Date:
- Wed Jan 11 11:44:05 2017 +0000
- Revision:
- 13:c3324b26d473
- Parent:
- 12:beabd59e0c35
- Child:
- 15:24434827c575
Sanity commit 4.7.28 test
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 "cup.h" |
Jeej | 0:82a60d86ab2e | 3 | #include "bin.h" |
Jeej | 0:82a60d86ab2e | 4 | #include "crc.h" |
Jeej | 0:82a60d86ab2e | 5 | #include "d7a.h" |
Jeej | 0:82a60d86ab2e | 6 | #include "dbg.h" |
Jeej | 0:82a60d86ab2e | 7 | |
Jeej | 0:82a60d86ab2e | 8 | |
Jeej | 12:beabd59e0c35 | 9 | uint8_t const cup_data[CUP_DATA_SIZE] = CUP_DATA; |
Jeej | 0:82a60d86ab2e | 10 | |
Jeej | 9:bd53ca2aece5 | 11 | void cup_start_update(uint32_t offset) |
Jeej | 0:82a60d86ab2e | 12 | { |
Jeej | 0:82a60d86ab2e | 13 | cup_cfg_t cfg = { |
Jeej | 0:82a60d86ab2e | 14 | .cmd = 0x10AD, |
Jeej | 5:ac38f09fd179 | 15 | .arch_nb = 20, |
Jeej | 0:82a60d86ab2e | 16 | }; |
Jeej | 0:82a60d86ab2e | 17 | |
Jeej | 0:82a60d86ab2e | 18 | uint32_t fof = 0; |
Jeej | 7:5b8648784381 | 19 | int32_t rem = CUP_DATA_SIZE; |
Jeej | 0:82a60d86ab2e | 20 | uint8_t percent = 0; |
Jeej | 0:82a60d86ab2e | 21 | uint8_t percent_old = 255; |
Jeej | 0:82a60d86ab2e | 22 | Timer tim; |
Jeej | 0:82a60d86ab2e | 23 | |
Jeej | 12:beabd59e0c35 | 24 | // Put reset pin in input |
Jeej | 12:beabd59e0c35 | 25 | //DigitalIn rst(A3); |
Jeej | 12:beabd59e0c35 | 26 | |
Jeej | 3:a59c8d77006b | 27 | D7A_WRITE((uint8_t*)&cfg, CUP_CFG_FID, 0, 4, root_key); |
Jeej | 0:82a60d86ab2e | 28 | |
Jeej | 0:82a60d86ab2e | 29 | // Upload file |
Jeej | 9:bd53ca2aece5 | 30 | PRINT("Uploading %d bytes to CUP file. (offset %d)\r\n", CUP_DATA_SIZE, offset); |
Jeej | 0:82a60d86ab2e | 31 | |
Jeej | 0:82a60d86ab2e | 32 | tim.start(); |
Jeej | 0:82a60d86ab2e | 33 | |
Jeej | 0:82a60d86ab2e | 34 | while (rem > 0) |
Jeej | 0:82a60d86ab2e | 35 | { |
Jeej | 9:bd53ca2aece5 | 36 | D7A_WRITE(&(cup_data[fof]), CUP_CODE_FID, fof + offset, CUP_LOCAL_MTU, NULL); |
Jeej | 9:bd53ca2aece5 | 37 | rem -= CUP_LOCAL_MTU; |
Jeej | 9:bd53ca2aece5 | 38 | fof += CUP_LOCAL_MTU; |
Jeej | 0:82a60d86ab2e | 39 | |
Jeej | 7:5b8648784381 | 40 | percent = (100*fof)/CUP_DATA_SIZE; |
Jeej | 0:82a60d86ab2e | 41 | if (percent != percent_old) |
Jeej | 0:82a60d86ab2e | 42 | { |
Jeej | 0:82a60d86ab2e | 43 | PRINT("UPLOADING CUP FILE %3d percent\r\n", percent); |
Jeej | 0:82a60d86ab2e | 44 | percent_old = percent; |
Jeej | 0:82a60d86ab2e | 45 | } |
Jeej | 0:82a60d86ab2e | 46 | |
Jeej | 0:82a60d86ab2e | 47 | // Wait to avoid COM faillure |
Jeej | 0:82a60d86ab2e | 48 | Thread::wait(1); |
Jeej | 0:82a60d86ab2e | 49 | } |
Jeej | 0:82a60d86ab2e | 50 | |
Jeej | 0:82a60d86ab2e | 51 | float time_s = tim.read(); |
Jeej | 7:5b8648784381 | 52 | PRINT("CUP: %d bytes written in %.2f sec (%.2f kB/s)\r\n", CUP_DATA_SIZE, time_s, (CUP_DATA_SIZE/time_s)/1024.0); |
Jeej | 0:82a60d86ab2e | 53 | |
Jeej | 3:a59c8d77006b | 54 | // Force PFLASH-cache flushing |
Jeej | 0:82a60d86ab2e | 55 | D7A_FLUSH(CUP_CODE_FID, root_key); |
Jeej | 0:82a60d86ab2e | 56 | |
Jeej | 0:82a60d86ab2e | 57 | // Send Upgrade command |
Jeej | 0:82a60d86ab2e | 58 | cfg.cmd = 0xC0D5; |
Jeej | 7:5b8648784381 | 59 | cfg.arch_nb = CUP_NB_ARCHIVES; |
Jeej | 3:a59c8d77006b | 60 | cfg.src_offset = offset; |
Jeej | 7:5b8648784381 | 61 | cfg.signature = CUP_SIGNATURE; |
Jeej | 0:82a60d86ab2e | 62 | |
Jeej | 0:82a60d86ab2e | 63 | D7A_WRITE((uint8_t*)&cfg, CUP_CFG_FID, 0, 12, root_key); |
Jeej | 0:82a60d86ab2e | 64 | |
Jeej | 7:5b8648784381 | 65 | PRINT("Waiting self reboot...\r\n"); |
Jeej | 4:23cb73bb11b3 | 66 | |
Jeej | 4:23cb73bb11b3 | 67 | d7a_wait_ready(); |
Jeej | 4:23cb73bb11b3 | 68 | |
Jeej | 13:c3324b26d473 | 69 | /* |
Jeej | 4:23cb73bb11b3 | 70 | D7A_READ(&cfg, CUP_CFG_FID, 0, 2, root_key); |
Jeej | 4:23cb73bb11b3 | 71 | |
Jeej | 4:23cb73bb11b3 | 72 | if (cfg.cmd) |
Jeej | 4:23cb73bb11b3 | 73 | { |
Jeej | 7:5b8648784381 | 74 | PRINT("/!\\ CUP Error 0x%04X /!\\\r\n", cfg.cmd); |
Jeej | 4:23cb73bb11b3 | 75 | } |
Jeej | 4:23cb73bb11b3 | 76 | else |
Jeej | 13:c3324b26d473 | 77 | */ |
Jeej | 4:23cb73bb11b3 | 78 | { |
Jeej | 7:5b8648784381 | 79 | PRINT("CUP OK\r\nResetting...\r\n\r\n"); |
Jeej | 4:23cb73bb11b3 | 80 | FLUSH(); |
Jeej | 4:23cb73bb11b3 | 81 | NVIC_SystemReset(); |
Jeej | 4:23cb73bb11b3 | 82 | } |
Jeej | 0:82a60d86ab2e | 83 | } |
Jeej | 0:82a60d86ab2e | 84 |