X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fstm-flash%2Fao_stm_flash.c;h=51856b469fb0b423a255b14b4dacd52405f21679;hb=a3f668e71751608ea2e38519003446bc6ceb348f;hp=4a91ef1fa4a5e1d234b003ae464e85b8305f1cb8;hpb=4bc55ee8fabc9f4c997c2a515d74baada590c93e;p=fw%2Faltos diff --git a/src/stm-flash/ao_stm_flash.c b/src/stm-flash/ao_stm_flash.c index 4a91ef1f..51856b46 100644 --- a/src/stm-flash/ao_stm_flash.c +++ b/src/stm-flash/ao_stm_flash.c @@ -53,6 +53,15 @@ ao_cmd_hex32(void) return v; } +void +ao_block_erase(void) +{ + uint32_t addr = ao_cmd_hex32(); + uint32_t *p = (uint32_t *) addr; + + ao_flash_erase_page(p); +} + void ao_block_write(void) { @@ -64,24 +73,46 @@ ao_block_write(void) } u; uint16_t i; + if (addr < 0x08002000 || 0x08200000 <= addr) { + puts("Invalid address"); + return; + } for (i = 0; i < 256; i++) - u.data8[i] = getchar(); + u.data8[i] = i; ao_flash_page(p, u.data32); } +static void +puthex(uint8_t c) +{ + c &= 0xf; + if (c < 10) + c += '0'; + else + c += 'a' - 10; + putchar (c); +} + void ao_block_read(void) { uint32_t addr = ao_cmd_hex32(); uint8_t *p = (uint8_t *) addr; uint16_t i; + uint8_t c; - for (i = 0; i < 256; i++) - putchar(*p++); + for (i = 0; i < 256; i++) { + c = *p++; + puthex(c); + puthex(c>>4); + if ((i & 0xf) == 0xf) + putchar('\n'); + } } __code struct ao_cmds ao_flash_cmds[] = { - { ao_application, "A\0Switch to application" }, + { ao_application, "a\0Switch to application" }, + { ao_block_erase, "e \0Erase block." }, { ao_block_write, "W \0Write block. 256 binary bytes follow newline" }, { ao_block_read, "R \0Read block. Returns 256 bytes" }, { 0, NULL },