aboutsummaryrefslogtreecommitdiffstats
path: root/Projects
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-10-02 10:02:24 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-10-02 10:02:24 +0000
commita447ae134f416ab45dcfe3dfe5dd1222bb908be2 (patch)
tree5c985bc6efdc2a26f4e64b62a1db1d2bbb7c2f0c /Projects
parent824ce103905f3892fa0c4f409962315057f18a81 (diff)
downloadlufa-a447ae134f416ab45dcfe3dfe5dd1222bb908be2.tar.gz
lufa-a447ae134f416ab45dcfe3dfe5dd1222bb908be2.tar.bz2
lufa-a447ae134f416ab45dcfe3dfe5dd1222bb908be2.zip
Fixed broken lock byte programming in the AVRISP-MKII clone project for some XMEGA targets.
Diffstat (limited to 'Projects')
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c11
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c2
2 files changed, 10 insertions, 3 deletions
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c
index 93419d00d..537441fc0 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c
@@ -216,10 +216,19 @@ bool XMEGANVM_WriteByteMemory(const uint8_t WriteCommand, const uint32_t WriteAd
XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CMD);
XPROGTarget_SendByte(WriteCommand);
- /* Send new memory byte to the memory to the target */
+ /* Send new memory byte to the memory of the target */
XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2));
XMEGANVM_SendAddress(WriteAddress);
XPROGTarget_SendByte(Byte);
+
+ /* Lock bytes need a special confirmation sequence for the write to complete */
+ if (WriteCommand == XMEGA_NVM_CMD_WRITELOCK)
+ {
+ /* Set CMDEX bit in NVM CTRLA register to start the Lock Byte write sequence */
+ XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2));
+ XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CTRLA);
+ XPROGTarget_SendByte(1 << 0);
+ }
return true;
}
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
index 0f5269db9..85820fd31 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
@@ -324,8 +324,6 @@ static void XPROGProtocol_WriteMemory(void)
EraseBuffCommand = XMEGA_NVM_CMD_ERASEEEPROMPAGEBUFF;
break;
case XPRG_MEM_TYPE_USERSIG:
- /* User signature is paged, but needs us to manually indicate the mode bits since the host doesn't set them */
- WriteMemory_XPROG_Params.PageMode = (XPRG_PAGEMODE_ERASE | XPRG_PAGEMODE_WRITE);
WriteCommand = XMEGA_NVM_CMD_WRITEUSERSIG;
break;
case XPRG_MEM_TYPE_FUSE: