Also use struct flash_region in flash_read_security(), flash_sector_erase().

This commit is contained in:
René van Dorst
2025-10-05 16:53:46 +02:00
parent 52fa41760c
commit a59f92a648
4 changed files with 37 additions and 27 deletions
+11 -4
View File
@@ -491,9 +491,15 @@ void cmd_parser(void) __banked
if (cmd_compare(0, "flash") && cmd_words_b[1] > 0 && cmd_buffer[cmd_words_b[1]] == 'r') { if (cmd_compare(0, "flash") && cmd_words_b[1] > 0 && cmd_buffer[cmd_words_b[1]] == 'r') {
print_string("\nPRINT SECURITY REGISTERS\n"); print_string("\nPRINT SECURITY REGISTERS\n");
// The following will only show something else than 0xff if it was programmed for a managed switch // The following will only show something else than 0xff if it was programmed for a managed switch
flash_read_security(0x0001000, 40); flash_region.addr = 0x0001000;
flash_read_security(0x0002000, 40); flash_region.len = 40;
flash_read_security(0x0003000, 40); flash_read_security();
flash_region.addr = 0x0002000;
flash_region.len = 40;
flash_read_security();
flash_region.addr = 0x0003000;
flash_region.len = 40;
flash_read_security();
} }
if (cmd_compare(0, "flash") && cmd_words_b[1] > 0 && cmd_buffer[cmd_words_b[1]] == 'd') { if (cmd_compare(0, "flash") && cmd_words_b[1] > 0 && cmd_buffer[cmd_words_b[1]] == 'd') {
print_string("\nDUMPING FLASH\n"); print_string("\nDUMPING FLASH\n");
@@ -520,7 +526,8 @@ void cmd_parser(void) __banked
} }
if (cmd_compare(0, "flash") && cmd_words_b[1] > 0 && cmd_buffer[cmd_words_b[1]] == 'e') { if (cmd_compare(0, "flash") && cmd_words_b[1] > 0 && cmd_buffer[cmd_words_b[1]] == 'e') {
print_string("\nFLASH erase\n"); print_string("\nFLASH erase\n");
flash_sector_erase(0x20000); flash_region.addr = 0x20000;
flash_sector_erase();
} }
if (cmd_compare(0, "flash") && cmd_words_b[1] > 0 && cmd_buffer[cmd_words_b[1]] == 'w') { if (cmd_compare(0, "flash") && cmd_words_b[1] > 0 && cmd_buffer[cmd_words_b[1]] == 'w') {
print_string("\nFLASH write\n"); print_string("\nFLASH write\n");
+18 -18
View File
@@ -283,7 +283,7 @@ void flash_read_bulk(__xdata uint8_t *dst)
} }
void flash_read_security(uint32_t addr, uint8_t len) void flash_read_security()
{ {
while (flash_read_status() & 0x1); while (flash_read_status() & 0x1);
@@ -294,40 +294,40 @@ void flash_read_security(uint32_t addr, uint8_t len)
// Transfer 4 bytes (command + 3byte address) // Transfer 4 bytes (command + 3byte address)
SFR_FLASH_TCONF = 4; SFR_FLASH_TCONF = 4;
while (len) { do {
SFR_FLASH_ADDR16 = addr >> 16; SFR_FLASH_ADDR16 = flash_region.addr >> 16;
SFR_FLASH_ADDR8 = addr >> 8; SFR_FLASH_ADDR8 = flash_region.addr >> 8;
SFR_FLASH_ADDR0 = addr; SFR_FLASH_ADDR0 = flash_region.addr;
addr += 4; flash_region.addr += 4;
SFR_FLASH_EXEC_GO = 1; SFR_FLASH_EXEC_GO = 1;
while(SFR_FLASH_EXEC_BUSY); while(SFR_FLASH_EXEC_BUSY);
print_byte(SFR_FLASH_DATA0); print_byte(SFR_FLASH_DATA0);
if (len == 1) if (flash_region.len == 1)
return; break;
print_byte(SFR_FLASH_DATA8); print_byte(SFR_FLASH_DATA8);
if (len == 2) if (flash_region.len == 2)
return; break;
print_byte(SFR_FLASH_DATA16); print_byte(SFR_FLASH_DATA16);
if (len == 3) if (flash_region.len == 3)
return; break;
print_byte(SFR_FLASH_DATA24); print_byte(SFR_FLASH_DATA24);
len -= 4; flash_region.len -= 4;
} } while(flash_region.len);
} }
void flash_sector_erase(uint32_t addr) void flash_sector_erase(void)
{ {
flash_write_enable(); flash_write_enable();
SFR_FLASH_TCONF = 8; SFR_FLASH_TCONF = 8;
SFR_FLASH_CMD = CMD_SECTOR_ERASE; SFR_FLASH_CMD = CMD_SECTOR_ERASE;
SFR_FLASH_ADDR16 = addr >> 16; SFR_FLASH_ADDR16 = flash_region.addr >> 16;
SFR_FLASH_ADDR8 = addr >> 8; SFR_FLASH_ADDR8 = flash_region.addr >> 8;
SFR_FLASH_ADDR0 = addr; SFR_FLASH_ADDR0 = flash_region.addr;
SFR_FLASH_EXEC_GO = 1; SFR_FLASH_EXEC_GO = 1;
while (flash_read_status() & 0x1); while (flash_read_status() & 0x1);
+2 -2
View File
@@ -6,8 +6,8 @@ void flash_read_uid(void);
void flash_write_enable(void); void flash_write_enable(void);
void flash_dump(uint8_t len); void flash_dump(uint8_t len);
void flash_read_jedecid(void); void flash_read_jedecid(void);
void flash_read_security(uint32_t addr, uint8_t len); void flash_read_security(void);
void flash_sector_erase(uint32_t addr); void flash_sector_erase(void);
void flash_read_bulk(__xdata uint8_t *dst); void flash_read_bulk(__xdata uint8_t *dst);
void flash_write_bytes(__xdata uint8_t *ptr); void flash_write_bytes(__xdata uint8_t *ptr);
#endif #endif
+6 -3
View File
@@ -1717,8 +1717,10 @@ void bootloader(void)
flash_region.len = 0x200; flash_region.len = 0x200;
flash_read_bulk(flash_buf); flash_read_bulk(flash_buf);
write_char('\n'); write_char('\n');
if (!(i & 0x7)) if (!(i & 0x7)) {
flash_sector_erase(dest); flash_region.addr = dest;
flash_sector_erase();
}
flash_region.addr = dest; flash_region.addr = dest;
flash_region.len = 0x200; flash_region.len = 0x200;
flash_write_bytes(flash_buf); flash_write_bytes(flash_buf);
@@ -1728,7 +1730,8 @@ void bootloader(void)
print_string("Deleting uploaded flash image\n"); print_string("Deleting uploaded flash image\n");
dest = FIRMWARE_UPLOAD_START; dest = FIRMWARE_UPLOAD_START;
for (register uint8_t i=0; i < 120; i++) { for (register uint8_t i=0; i < 120; i++) {
flash_sector_erase(dest); flash_region.addr = dest;
flash_sector_erase();
dest += 0x1000; dest += 0x1000;
} }
print_string("Resetting now"); print_string("Resetting now");