diff --git a/main.c b/main.c index f59a397..88008ae 100644 --- a/main.c +++ b/main.c @@ -120,28 +120,27 @@ static void i2c_start_address(uint8_t addr) } } -static void i2c_switch_app(uint8_t i2c_dev, uint8_t app) +static void i2c_switch_app(uint8_t i2c_dev, uint8_t app, uint8_t show_version) { i2c_start_address(i2c_dev); i2c_master_tx(CMD_SWITCH_APPLICATION); i2c_master_tx(app); i2c_stop(); - _delay_ms(20); -} + _delay_ms(100); -static void i2c_print_version(uint8_t i2c_dev) -{ - i2c_start_address(i2c_dev); - i2c_master_tx(CMD_READ_VERSION); - i2c_start_address(i2c_dev | 0x01); + if (show_version) { + i2c_start_address(i2c_dev); + i2c_master_tx(CMD_READ_VERSION); + i2c_start_address(i2c_dev | 0x01); - uint8_t cnt = 16; - while (cnt--) { - sendchar(i2c_master_rx(cnt)); + uint8_t cnt = 16; + while (cnt--) { + sendchar(i2c_master_rx(cnt)); + } + + i2c_stop(); } - - i2c_stop(); } static uint8_t page_buf[SPM_PAGESIZE]; @@ -149,7 +148,7 @@ static uint8_t page_buf[SPM_PAGESIZE]; static void eraseFlash(void) { uint16_t address = 0; - while (APP_END < address) { + while (APP_END > address) { boot_page_erase(address); boot_spm_busy_wait(); address += SPM_PAGESIZE; @@ -280,9 +279,9 @@ void cmd_loop(uint8_t val) i2c_stop(); } else { - if (val == 'F') { + if (val == 'F' && address < APP_END) { writeFlashPage(address, size); - } else if (val == 'E') { + } else if (val == 'E' && address < E2END) { writeEEpromPage(address, size); } address += size; @@ -337,7 +336,7 @@ void cmd_loop(uint8_t val) } else if (val == 'P' || val == 'L') { if (i2c_dev != 0) { val = (val == 'P') ? BOOTTYPE_BOOTLOADER : BOOTTYPE_APPLICATION; - i2c_switch_app(i2c_dev, val); + i2c_switch_app(i2c_dev, val, 0); } response = '\r'; @@ -391,9 +390,7 @@ void cmd_loop(uint8_t val) } else if (val >= '1' && val <= '4') { i2c_dev = (val - '0' + TWI_ADDRESS_BASE) << 1; - i2c_switch_app(i2c_dev, BOOTTYPE_BOOTLOADER); - _delay_ms(100); - i2c_print_version(i2c_dev); + i2c_switch_app(i2c_dev, BOOTTYPE_BOOTLOADER, 1); i2c_start_address(i2c_dev); i2c_master_tx(CMD_READ_MEMORY); @@ -421,9 +418,7 @@ void cmd_loop(uint8_t val) // get Version } else if (val == 'I') { if (i2c_dev != 0) { - i2c_switch_app(i2c_dev, BOOTTYPE_APPLICATION); - _delay_ms(100); - i2c_print_version(i2c_dev); + i2c_switch_app(i2c_dev, BOOTTYPE_APPLICATION, 1); } // fake MK-TOOL specific stuff