summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-03-23 02:23:03 -0700
committerKeith Packard <keithp@keithp.com>2013-03-23 02:23:03 -0700
commit0365df9ed5a638bfdefb29eec830e51301c13936 (patch)
treef7ef76eed187f8ab178aa682e33a4cd57ed2da96 /src
parent11e0120fb0154ce83a99974d34ccf9a5bbbb3e01 (diff)
altos: Add erase command to stm-flash app. Validate addresses.
This also leaves the code writing fixed values and printing read data in ascii instead of binary. Useful for debugging, will want changing for the product. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r--src/stm-flash/ao_stm_flash.c39
1 files changed, 35 insertions, 4 deletions
diff --git a/src/stm-flash/ao_stm_flash.c b/src/stm-flash/ao_stm_flash.c
index 4d5ad34d..65bc2daf 100644
--- a/src/stm-flash/ao_stm_flash.c
+++ b/src/stm-flash/ao_stm_flash.c
@@ -54,6 +54,15 @@ ao_cmd_hex32(void)
}
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)
{
uint32_t addr = ao_cmd_hex32();
@@ -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 <addr>\0Erase block." },
{ ao_block_write, "W <addr>\0Write block. 256 binary bytes follow newline" },
{ ao_block_read, "R <addr>\0Read block. Returns 256 bytes" },
{ 0, NULL },