From ae3e68c12bb6f249afaa92a1e120845878fc4c3e Mon Sep 17 00:00:00 2001 From: yul Date: Tue, 24 May 2022 15:43:24 +0200 Subject: [PATCH] sonic works too --- uart_commands.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/uart_commands.c b/uart_commands.c index 9a614eb..c44cc43 100644 --- a/uart_commands.c +++ b/uart_commands.c @@ -12,7 +12,31 @@ void digit_to_str(char* str, uint32_t number){ int addr_to_sector(int addr){ int tmp = addr & 0xfffff; tmp = tmp >> 12; - return tmp; + if(tmp <= 15) return tmp; + else{ + if(tmp >= 0x10 && tmp <=0x17) + return 16; + else if(tmp >= 0x18 && tmp <= 0x1f) + return 17; + else if(tmp >= 0x20 && tmp <= 0x27) + return 18; + else if(tmp >= 0x28 && tmp <= 0x2f) + return 19; + else if(tmp >= 0x30 && tmp <= 0x37) + return 20; + else if(tmp >= 0x38 && tmp <= 0x3f) + return 21; + else if(tmp >= 0x40 && tmp <= 0x47) + return 22; + else if(tmp >= 0x48 && tmp <= 0x4f) + return 23; + else if(tmp >= 0x50 && tmp <= 0x57) return 24; + else if(tmp >= 0x58 && tmp <= 0x3f) return 25; + else if(tmp >= 0x60 && tmp <= 0x67) return 26; + else if(tmp >= 0x68 && tmp <= 0x6f) return 27; + else if(tmp >= 0x70 && tmp <= 0x77) return 28; + else if(tmp >= 0x78 && tmp <= 0x7f) return 29; + } } void uart_commands_getid(error_code* status){ @@ -43,20 +67,22 @@ void uart_commands_getserial(error_code* status){ crc_t uart_commands_prog(error_code* status, int size){ //iap_prepare_sectors(status, APP_OFFSET, APP_OFFSET+size/4095+5); - iap_prepare_sectors(status, addr_to_sector(APP_OFFSET), addr_to_sector(APP_OFFSET+size)+1); + int start = addr_to_sector(APP_OFFSET); + int end = addr_to_sector(APP_OFFSET+size); + iap_prepare_sectors(status, addr_to_sector(APP_OFFSET), addr_to_sector(APP_OFFSET+size)); char digit; if(*status != ok){ uart_send_err(); itoa(*status, &digit, 10); uart_send(digit, 1); } - iap_erase_sectors(status, addr_to_sector(APP_OFFSET), addr_to_sector(APP_OFFSET+size)+1); + iap_erase_sectors(status, addr_to_sector(APP_OFFSET), addr_to_sector(APP_OFFSET+size)); if(*status != ok){ uart_send_err(); itoa(*status, &digit, 10); uart_send(digit, 1); } - iap_prepare_sectors(status, addr_to_sector(APP_OFFSET), addr_to_sector(APP_OFFSET+size)+1); + iap_prepare_sectors(status, addr_to_sector(APP_OFFSET), addr_to_sector(APP_OFFSET+size)); if(*status != ok){ uart_send_err(); itoa(*status, &digit, 10);