Skip to content

Commit 78c9bd1

Browse files
committed
Update abs_block
Add RP2 ignored extension to errata E10 abs_block, to make it more identifiable
1 parent ae9a188 commit 78c9bd1

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

elf2uf2/elf2uf2.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

144145
bool 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

156158
int 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

Comments
 (0)