@@ -339,7 +339,7 @@ template <typename T> struct range_map {
339
339
// Calculate chunk size for load/save/verify
340
340
// Returns size/100 rounded up to FLASH_SECTOR_ERASE_SIZE
341
341
uint32_t calculate_chunk_size (uint32_t size) {
342
- return ((size/100 + FLASH_SECTOR_ERASE_SIZE - 1 ) & ~(FLASH_SECTOR_ERASE_SIZE - 1 ));
342
+ return ((( size + ( 100 - 1 )) /100 + FLASH_SECTOR_ERASE_SIZE - 1 ) & ~(FLASH_SECTOR_ERASE_SIZE - 1 ));
343
343
}
344
344
345
345
@@ -1811,24 +1811,24 @@ struct memory_access {
1811
1811
1812
1812
virtual uint32_t get_binary_start () = 0;
1813
1813
1814
- uint32_t read_int (uint32_t addr) {
1814
+ uint32_t read_int (uint32_t addr, bool zero_fill = false ) {
1815
1815
assert (!(addr & 3u ));
1816
1816
uint32_t rc;
1817
- read (addr, (uint8_t *)&rc, 4 );
1817
+ read (addr, (uint8_t *)&rc, 4 , zero_fill );
1818
1818
return rc;
1819
1819
}
1820
1820
1821
- uint32_t read_short (uint32_t addr) {
1821
+ uint32_t read_short (uint32_t addr, bool zero_fill = false ) {
1822
1822
assert (!(addr & 1u ));
1823
1823
uint16_t rc;
1824
- read (addr, (uint8_t *)&rc, 2 );
1824
+ read (addr, (uint8_t *)&rc, 2 , zero_fill );
1825
1825
return rc;
1826
1826
}
1827
1827
1828
1828
// read a vector of types that have a raw_type_mapping
1829
- template <typename T> void read_raw (uint32_t addr, T &v) {
1829
+ template <typename T> void read_raw (uint32_t addr, T &v, bool zero_fill = false ) {
1830
1830
typename raw_type_mapping<T>::access_type& check = v; // ugly check that we aren't trying to read into something we shouldn't
1831
- read (addr, (uint8_t *)&v, sizeof (typename raw_type_mapping<T>::access_type));
1831
+ read (addr, (uint8_t *)&v, sizeof (typename raw_type_mapping<T>::access_type), zero_fill );
1832
1832
}
1833
1833
1834
1834
// read a vector of types that have a raw_type_mapping
@@ -4008,8 +4008,8 @@ uint32_t get_access_family_id(memory_access &file_access) {
4008
4008
// No block, so RP2040 or absolute
4009
4009
if (file_access.get_binary_start () == FLASH_START) {
4010
4010
vector<uint8_t > checksum_data = {};
4011
- file_access.read_into_vector (FLASH_START, 252 , checksum_data);
4012
- uint32_t checksum = file_access.read_int (FLASH_START + 252 );
4011
+ file_access.read_into_vector (FLASH_START, 252 , checksum_data, true );
4012
+ uint32_t checksum = file_access.read_int (FLASH_START + 252 , true );
4013
4013
if (checksum == calc_checksum (checksum_data)) {
4014
4014
// Checksum is correct, so RP2040
4015
4015
DEBUG_LOG (" Detected family ID %s due to boot2 checksum\n " , family_name (RP2040_FAMILY_ID).c_str ());
0 commit comments