bootloader 数据解析

解析 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值