mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Also use struct flash_region in flash_read_security(), flash_sector_erase().
This commit is contained in:
+11
-4
@@ -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
@@ -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
@@ -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
@@ -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");
|
||||||
|
|||||||
Reference in New Issue
Block a user