From 3a2c1db6751979ae3e5d7a6fa51026f9c44c71c0 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Wed, 10 Feb 2010 04:07:06 +0000 Subject: [PATCH] Fixed lack of SECTION ERASE command in TPI programming mode of the AVRISP project preventing fuses from being cleared. --- Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c index 24305dc20c..a6a57670b5 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c @@ -208,10 +208,10 @@ static void XPROGProtocol_Erase(void) Endpoint_ClearOUT(); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); + uint8_t EraseCommand; + if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI) - { - uint8_t EraseCommand = XMEGA_NVM_CMD_NOOP; - + { /* Determine which NVM command to send to the device depending on the memory to erase */ switch (Erase_XPROG_Params.MemoryType) { @@ -239,6 +239,9 @@ static void XPROGProtocol_Erase(void) case XPRG_ERASE_USERSIG: EraseCommand = XMEGA_NVM_CMD_ERASEUSERSIG; break; + default: + EraseCommand = XMEGA_NVM_CMD_NOOP; + break; } /* Erase the target memory, indicate timeout if ocurred */ @@ -247,8 +250,13 @@ static void XPROGProtocol_Erase(void) } else { + if (Erase_XPROG_Params.MemoryType == XPRG_ERASE_CHIP) + EraseCommand = TINY_NVM_CMD_CHIPERASE; + else + EraseCommand = TINY_NVM_CMD_SECTIONERASE; + /* Erase the target memory, indicate timeout if ocurred */ - if (!(TINYNVM_EraseMemory(TINY_NVM_CMD_CHIPERASE, Erase_XPROG_Params.Address))) + if (!(TINYNVM_EraseMemory(EraseCommand, Erase_XPROG_Params.Address))) ReturnStatus = XPRG_ERR_TIMEOUT; }