解析 nordic bootloarder 的配置数据和备份数据。只需要将数据按 16 进制打印替换掉下面的数据即可。
buf_fe:表示存放 0xfe000 的数据。
buf_ff:表示存放 0xff000 的数据。
#include <stdio.h>
#include <stdint.h>
#include <string.h>
static uint8_t buf_fe[] = {
0xC7, 0xC2, 0x34, 0x65, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x7A, 0x03, 0x00, 0x8F, 0xFE, 0x7C, 0x43, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x85, 0x02, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0x43, 0x9D, 0x9C, 0x06, 0xD8, 0x6F, 0x17, 0x58, 0xC5, 0xFA, 0x9D, 0x95, 0x25, 0x16, 0x58, 0x4A, 0x21, 0xEB, 0xA5, 0x49, 0xB5, 0x4C, 0x1E, 0x48, 0x56, 0x83, 0xC9, 0xC2, 0xF2, 0x0B, 0x7B, 0x4E, 0x09, 0xA8, 0x4F, 0xE6, 0x56, 0xB0, 0x40, 0xF1, 0x0A, 0xB2, 0xAB, 0x1C, 0xAA, 0x94, 0x55, 0x68, 0x8F, 0x97, 0xFF, 0xC4, 0x53, 0xBE,
0x8D, 0xFC, 0x9A, 0x34, 0x9B, 0x4D, 0xD9, 0x4E, 0x56, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
static uint8_t buf_ff[] = {
0x08, 0xB3, 0xFF, 0x52, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xD8, 0x7A, 0x03, 0x00, 0x8F, 0xFE, 0x7C, 0x43, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xCD, 0x00, 0x00, 0x00, 0xCD, 0x00, 0x00, 0x00, 0x02, 0x7B, 0x84, 0x89, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x91, 0x1C, 0x89, 0x4A, 0x91, 0x1C, 0x89, 0x48, 0x2C, 0x00, 0x00, 0x48, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xCA, 0x01, 0x0A, 0x83, 0x01, 0x08, 0x01, 0x12, 0x7F, 0x08, 0x02, 0x10, 0x34, 0x1A, 0x02, 0xCA, 0x01, 0x20, 0x00,
0x28, 0x00, 0x30, 0x00, 0x38, 0xC8, 0x58, 0x42, 0x24, 0x08, 0x03, 0x12, 0x20, 0xEB, 0x18, 0x38, 0x14, 0x08, 0x7F, 0xB2, 0xBC, 0xBE, 0x70, 0x68, 0xEB, 0x19, 0x77, 0x4A, 0x3B, 0x23, 0xF0, 0x90, 0xB0, 0xA5, 0x36, 0x70, 0x06, 0x96, 0x57, 0x07, 0xB1, 0x3B, 0x0D, 0xCD, 0x76, 0x48, 0x00, 0x52, 0x44, 0x08, 0x03, 0x12, 0x40, 0xD9, 0x22, 0x3D,
0x17, 0x2E, 0x78, 0x4C, 0x6E, 0x41, 0x70, 0x31, 0xD6, 0x5E, 0x76, 0xF7, 0x33, 0xCD, 0xED, 0x70, 0x35, 0xA3, 0xD2, 0xF6, 0x48, 0xE7, 0xC9, 0xE7, 0x7E, 0x09, 0x8B, 0xFE, 0xAB, 0xC6, 0xE7, 0x1B, 0x38, 0x91, 0x9D, 0xE6, 0x40, 0x25, 0x29, 0xC6, 0xEC, 0xC5, 0x32, 0x05, 0x86, 0x6E, 0xE6, 0x24, 0xBE, 0x87, 0x65, 0x88, 0x31, 0x4D, 0xFC, 0x0D,
0x48, 0xED, 0x63, 0xA3, 0x88, 0x10, 0x00, 0x1A, 0x40, 0xF8, 0x76, 0x3D, 0x94, 0x8A, 0xA4, 0xC6, 0x58, 0x15, 0xA2, 0xDD, 0xE6, 0xFE, 0x44, 0x18, 0xEA, 0x9D, 0x66, 0xF2, 0x25, 0x34, 0xF5, 0x65, 0xA5, 0x02, 0x5C, 0xA0, 0x2E, 0xC4, 0x21, 0x32, 0x83, 0x8A, 0x2A, 0xAA, 0x3B, 0xE8, 0xCD, 0x4F, 0xF9, 0x57, 0xB2, 0x0A, 0x42, 0x1E, 0x93, 0x2C,
0xA4, 0xC5, 0x2F, 0x03, 0x5B, 0x39, 0xDB, 0x6E, 0x16, 0xD2, 0x1C, 0x9C, 0x52, 0x51, 0xDD, 0xEC, 0x95, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x76, 0x85, 0x02, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0x43, 0x9D, 0x9C, 0x06, 0xD8, 0x6F, 0x17, 0x58, 0xC5, 0xFA, 0x9D, 0x95, 0x25, 0x16, 0x58, 0x4A, 0x21, 0xEB, 0xA5, 0x49, 0xB5, 0x4C, 0x1E, 0x48, 0x56, 0x83, 0xC9, 0xC2, 0xF2, 0x0B, 0x7B, 0x4E, 0x09, 0xA8, 0x4F, 0xE6, 0x56, 0xB0, 0x40, 0xF1, 0x0A, 0xB2, 0xAB, 0x1C, 0xAA, 0x94, 0x55, 0x68, 0x8F, 0x97, 0xFF, 0xC4, 0x53, 0xBE,
0x8D, 0xFC, 0x9A, 0x34, 0x9B, 0x4D, 0xD9, 0x4E, 0x56, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
#define INIT_COMMAND_MAX_SIZE 512
#define SETTINGS_BOOT_VALIDATION_SIZE 64
#define NRF_DFU_PEER_DATA_LEN 64
#define NRF_DFU_ADV_NAME_LEN 28
typedef struct
{
uint8_t dummy_data[NRF_DFU_ADV_NAME_LEN];
} nrf_dfu_adv_name_t;
typedef struct
{
uint8_t dummy_data[NRF_DFU_PEER_DATA_LEN];
} nrf_dfu_peer_data_t;
typedef enum
{
NO_VALIDATION,
VALIDATE_CRC,
VALIDATE_SHA256,
VALIDATE_ECDSA_P256_SHA256,
} boot_validation_type_t;
typedef struct
{
uint8_t type;
uint8_t bytes[SETTINGS_BOOT_VALIDATION_SIZE];
} boot_validation_t;
typedef struct
{
uint32_t command_size;
uint32_t command_offset;
uint32_t command_crc;
uint32_t data_object_size;
union
{
struct
{
uint32_t firmware_image_crc;
uint32_t firmware_image_crc_last;
uint32_t firmware_image_offset;
uint32_t firmware_image_offset_last;
};
struct
{
uint32_t update_start_address;
};
};
} dfu_progress_t;
typedef struct
{
uint32_t image_size;
uint32_t image_crc;
uint32_t bank_code;
} nrf_dfu_bank_t;
typedef struct
{
uint32_t crc;
uint32_t settings_version;
uint32_t app_version;
uint32_t bootloader_version;
uint32_t bank_layout;
uint32_t bank_current;
nrf_dfu_bank_t bank_0;
nrf_dfu_bank_t bank_1;
uint32_t write_offset;
uint32_t sd_size;
dfu_progress_t progress;
uint32_t enter_buttonless_dfu;
uint8_t init_command[INIT_COMMAND_MAX_SIZE];
uint32_t boot_validation_crc;
boot_validation_t boot_validation_softdevice;
boot_validation_t boot_validation_app;
boot_validation_t boot_validation_bootloader;
nrf_dfu_peer_data_t peer_data;
nrf_dfu_adv_name_t adv_name;
} nrf_dfu_settings_t;
uint32_t crc32_compute(uint8_t const * p_data, uint32_t size, uint32_t const * p_crc)
{
uint32_t crc;
crc = (p_crc == NULL) ? 0xFFFFFFFF : ~(*p_crc);
for (uint32_t i = 0; i < size; i++)
{
crc = crc ^ p_data[i];
for (uint32_t j = 8; j > 0; j--)
{
crc = (crc >> 1) ^ (0xEDB88320U & ((crc & 1) ? 0xFFFFFFFF : 0));
}
}
return ~crc;
}
#define DFU_SETTINGS_INIT_COMMAND_OFFSET (__builtin_offsetof(nrf_dfu_settings_t, init_command))
#define DFU_SETTINGS_BOOT_VALIDATION_SIZE ((3 * sizeof(boot_validation_t)) + 4)
void dfu_settings_printf(uint32_t addr)
{
nrf_dfu_settings_t s_dfu_settings;
uint32_t crc;
if (addr == 0xFE000)
{
printf("\n\n\nADDRESS_FE000 .......\n");
memcpy((uint8_t *)&s_dfu_settings, buf_fe, sizeof(nrf_dfu_settings_t));
crc = crc32_compute((buf_fe+4), DFU_SETTINGS_INIT_COMMAND_OFFSET - 4, NULL);
}
else if (addr == 0xFF000)
{
printf("\n\n\nADDRESS_FF000 .......\n");
memcpy((uint8_t *)&s_dfu_settings, buf_ff, sizeof(nrf_dfu_settings_t));
crc = crc32_compute((buf_ff+4), DFU_SETTINGS_INIT_COMMAND_OFFSET - 4, NULL);
}
else
{
printf("Address invalid.......\n");
return;
}
printf("calc_crc = 0x%08x\n", crc);
printf("crc = 0x%08x\n", s_dfu_settings.crc);
printf("settings_version = 0x%08x\n", s_dfu_settings.settings_version);
printf("app_version = 0x%08x\n", s_dfu_settings.app_version);
printf("bootloader_version = 0x%08x\n", s_dfu_settings.bootloader_version);
printf("bank_layout = 0x%08x\n", s_dfu_settings.bank_layout);
printf("bank_current = 0x%08x\n", s_dfu_settings.bank_current);
printf("bank_0.image_size = 0x%08x\n", s_dfu_settings.bank_0.image_size);
printf("bank_0.image_crc = 0x%08x\n", s_dfu_settings.bank_0.image_crc);
printf("bank_0.bank_code = 0x%08x\n", s_dfu_settings.bank_0.bank_code);
printf("bank_1.image_size = 0x%08x\n", s_dfu_settings.bank_1.image_size);
printf("bank_1.image_crc = 0x%08x\n", s_dfu_settings.bank_1.image_crc);
printf("bank_1.bank_code = 0x%08x\n", s_dfu_settings.bank_1.bank_code);
printf("write_offset = 0x%08x\n", s_dfu_settings.write_offset);
printf("sd_size = 0x%08x\n", s_dfu_settings.sd_size);
printf("progress.command_size = 0x%08x\n", s_dfu_settings.progress.command_size);
printf("progress.command_offset = 0x%08x\n", s_dfu_settings.progress.command_offset);
printf("progress.command_crc = 0x%08x\n", s_dfu_settings.progress.command_crc);
printf("progress.data_object_size = 0x%08x\n", s_dfu_settings.progress.data_object_size);
printf("progress.firmware_image_crc = 0x%08x\n", s_dfu_settings.progress.firmware_image_crc);
printf("progress.firmware_image_crc_last = 0x%08x\n", s_dfu_settings.progress.firmware_image_crc_last);
printf("progress.firmware_image_offset = 0x%08x\n", s_dfu_settings.progress.firmware_image_offset);
printf("progress.firmware_image_offset_last = 0x%08x\n", s_dfu_settings.progress.firmware_image_offset_last);
printf("progress.update_start_address = 0x%08x\n", s_dfu_settings.progress.update_start_address);
printf("enter_buttonless_dfu = 0x%08x\n", s_dfu_settings.enter_buttonless_dfu);
printf("init_command :\n ");
for (int i=0; i<INIT_COMMAND_MAX_SIZE; i++)
printf("%02x", s_dfu_settings.init_command[i]);
printf("\n");
printf("boot_validation_crc = 0x%08x\n", s_dfu_settings.boot_validation_crc);
printf("boot_validation_softdevice :\n ");
printf("boot_validation_softdevice.type = 0x%02x\n ", s_dfu_settings.boot_validation_softdevice.type);
printf("boot_validation_softdevice.bytes = ");
for (int i=0; i<SETTINGS_BOOT_VALIDATION_SIZE; i++)
printf("%02x", s_dfu_settings.boot_validation_softdevice.bytes[i]);
printf("\n");
printf("boot_validation_app :\n ");
printf("boot_validation_app.type = 0x%02x\n ", s_dfu_settings.boot_validation_app.type);
printf("boot_validation_app.bytes = ");
for (int i=0; i<SETTINGS_BOOT_VALIDATION_SIZE; i++)
printf("%02x", s_dfu_settings.boot_validation_app.bytes[i]);
printf("\n");
printf("boot_validation_bootloader :\n ");
printf("boot_validation_bootloader.type = 0x%02x\n ", s_dfu_settings.boot_validation_bootloader.type);
printf("boot_validation_bootloader.bytes = ");
for (int i=0; i<SETTINGS_BOOT_VALIDATION_SIZE; i++)
printf("%02x", s_dfu_settings.boot_validation_bootloader.bytes[i]);
printf("\n");
}
int main(void)
{
dfu_settings_printf(0xFE000);
dfu_settings_printf(0xFF000);
return 0;
}