X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/824ce103905f3892fa0c4f409962315057f18a81..a447ae134f416ab45dcfe3dfe5dd1222bb908be2:/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c?ds=inline 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; }