static __pdata uint8_t ao_flash_setup_done;
static __data uint32_t ao_flash_device_size;
static __data uint8_t ao_flash_block_shift;
+static __data uint16_t ao_flash_block_size;
static void
ao_flash_setup(void)
ao_mutex_put(&ao_flash_mutex);
return;
}
- ao_flash_setup_done = 1;
/* On first use, check to see if the flash chip has
* been programmed to use 512 byte pages. If not, do so.
default:
ao_panic(AO_PANIC_FLASH);
}
+ ao_flash_block_size = 1 << ao_flash_block_shift;
+ ao_flash_setup_done = 1;
ao_mutex_put(&ao_flash_mutex);
}
* Read/write the config block, which is in
* the last block of the flash
*/
+
uint8_t
ao_ee_write_config(uint8_t *buf, uint16_t len) __reentrant
{
ao_ee_flush();
}
+void
+ao_ee_dump_config(void) __reentrant
+{
+ uint16_t i;
+ printf("Configuration block %d\n", FLASH_CONFIG_BLOCK);
+ ao_mutex_get(&ao_flash_mutex); {
+ ao_flash_flush_internal();
+ ao_flash_block = FLASH_BLOCK_NONE;
+ ao_flash_fill(FLASH_CONFIG_BLOCK);
+ i = 0;
+ do {
+ if ((i & 7) == 0) {
+ if (i)
+ putchar('\n');
+ ao_cmd_put16((uint16_t) i);
+ }
+ putchar(' ');
+ ao_cmd_put8(ao_flash_data[i]);
+ ++i;
+ } while (i < sizeof (ao_config));
+ } ao_mutex_put(&ao_flash_mutex);
+}
+
+static void
+flash_status(void) __reentrant
+{
+ uint8_t status;
+
+ ao_flash_setup();
+ ao_mutex_get(&ao_flash_mutex); {
+ status = ao_flash_read_status();
+ printf ("Flash status: 0x%02x\n", status);
+ printf ("Flash block shift: %d\n", FLASH_BLOCK_SHIFT);
+ printf ("Flash block size: %d\n", FLASH_BLOCK_SIZE);
+ printf ("Flash block mask: %d\n", FLASH_BLOCK_MASK);
+ printf ("Flash device size: %ld\n", FLASH_DEVICE_SIZE);
+ printf ("Flash data size: %ld\n", FLASH_DATA_SIZE);
+ printf ("Flash config block: %d\n", FLASH_CONFIG_BLOCK);
+ } ao_mutex_put(&ao_flash_mutex);
+ ao_ee_dump_config();
+}
+
__code struct ao_cmds ao_flash_cmds[] = {
{ 'e', flash_dump, "e <block> Dump a block of flash data" },
{ 'w', flash_store, "w <block> <start> <len> <data> ... Write data to flash" },
+ { 'f', flash_status, "f Show flash status register" },
{ 0, flash_store, NULL },
};