@@ -129,7 +129,7 @@ uf2_block gen_abs_block(uint32_t abs_block_loc) {
129129 uf2_block block;
130130 block.magic_start0 = UF2_MAGIC_START0;
131131 block.magic_start1 = UF2_MAGIC_START1;
132- block.flags = UF2_FLAG_FAMILY_ID_PRESENT;
132+ block.flags = UF2_FLAG_FAMILY_ID_PRESENT | UF2_FLAG_EXTENSION_FLAGS_PRESENT ;
133133 block.payload_size = UF2_PAGE_SIZE;
134134 block.num_blocks = 2 ;
135135 block.file_size = ABSOLUTE_FAMILY_ID;
@@ -138,19 +138,21 @@ uf2_block gen_abs_block(uint32_t abs_block_loc) {
138138 block.block_no = 0 ;
139139 memset (block.data , 0 , sizeof (block.data ));
140140 memset (block.data , 0xef , UF2_PAGE_SIZE);
141+ *(uint32_t *)&(block.data [UF2_PAGE_SIZE]) = UF2_EXTENSION_RP2_IGNORE_BLOCK;
141142 return block;
142143}
143144
144145bool check_abs_block (uf2_block block) {
145146 return std::all_of (block.data , block.data + UF2_PAGE_SIZE, [](uint8_t i) { return i == 0xef ; }) &&
146147 block.magic_start0 == UF2_MAGIC_START0 &&
147148 block.magic_start1 == UF2_MAGIC_START1 &&
148- block.flags == UF2_FLAG_FAMILY_ID_PRESENT &&
149+ ( block.flags & ~UF2_FLAG_EXTENSION_FLAGS_PRESENT) == UF2_FLAG_FAMILY_ID_PRESENT &&
149150 block.payload_size == UF2_PAGE_SIZE &&
150151 block.num_blocks == 2 &&
151152 block.file_size == ABSOLUTE_FAMILY_ID &&
152153 block.magic_end == UF2_MAGIC_END &&
153- block.block_no == 0 ;
154+ block.block_no == 0 &&
155+ !(block.flags & UF2_FLAG_EXTENSION_FLAGS_PRESENT && *(uint32_t *)&(block.data [UF2_PAGE_SIZE]) != UF2_EXTENSION_RP2_IGNORE_BLOCK);
154156}
155157
156158int pages2uf2 (std::map<uint32_t , std::vector<page_fragment>>& pages, std::shared_ptr<std::iostream> in, std::shared_ptr<std::iostream> out, uint32_t family_id, uint32_t abs_block_loc=0 ) {
0 commit comments