summaryrefslogtreecommitdiff
path: root/controller/fw/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'controller/fw/src/main.c')
-rw-r--r--controller/fw/src/main.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/controller/fw/src/main.c b/controller/fw/src/main.c
index 6e117f6..6547c38 100644
--- a/controller/fw/src/main.c
+++ b/controller/fw/src/main.c
@@ -190,9 +190,11 @@ static struct jtag_img_descriptor {
.img_len = 0x004000,
};
-const char fw_dump[0x4000] = {
+char fw_dump[0x4000] = {
#include "EasyMeter_Q3DA1002_V3.03_fw_dump_0xc000.h"
};
+const int fw_dump_offx = 0xc000;
+const int row2_offx = 0xf438 - fw_dump_offx;
ssize_t jt_spi_flash_read_block(void *usr, int addr, size_t len, uint8_t *out) {
/*
@@ -201,11 +203,25 @@ ssize_t jt_spi_flash_read_block(void *usr, int addr, size_t len, uint8_t *out) {
*/
for (size_t i=0; i<len; i++)
- out[i] = fw_dump[addr - 0xc000 + i];
+ out[i] = fw_dump[addr - fw_dump_offx + i];
return len;
}
+void update_image_flash_counter(void) {
+ static int flash_counter = 0;
+ flash_counter ++;
+ fw_dump[row2_offx + 0] = flash_counter/10000 + '0';
+ flash_counter %= 10000;
+ fw_dump[row2_offx + 1] = flash_counter/1000 + '0';
+ flash_counter %= 1000;
+ fw_dump[row2_offx + 2] = flash_counter/100 + '0';
+ flash_counter %= 100;
+ fw_dump[row2_offx + 3] = flash_counter/10 + '0';
+ flash_counter %= 10;
+ fw_dump[row2_offx + 4] = flash_counter + '0';
+}
+
static unsigned int measurement_errors = 0;
static struct dsss_demod_state demod_state;
static uint32_t freq_sample_ts = 0;
@@ -248,16 +264,18 @@ int main(void)
dsss_demod_init(&demod_state);
con_printf("Booted.\r\n");
- int i=0;
- while (23) {
+ con_printf("Attempting to flash meter...\r\n");
+ int flash_tries = 0;
+ while (flash_tries++ < 25) {
mspd_jtag_init();
- int rv = mspd_jtag_flash_and_reset(jtag_img.devmem_img_start, jtag_img.img_len, jt_spi_flash_read_block, &jtag_img);
- con_printf("%d flash result: %d\r\n", i, rv);
- while (!rv) {}
+ if (!mspd_jtag_flash_and_reset(jtag_img.devmem_img_start, jtag_img.img_len, jt_spi_flash_read_block, &jtag_img))
+ break;
for (int j=0; j<168*1000*5; j++)
asm volatile ("nop");
- i++;
}
+ if (flash_tries == 25)
+ con_printf("Giving up.\r\n");
+
while (23) {
if (adc_fft_buf_ready_idx != -1) {
for (int j=0; j<168*1000*2; j++)