Fixed broken lock byte programming in the AVRISP-MKII clone project for some XMEGA...
[pub/USBasp.git] / Projects / AVRISP-MKII / Lib / XPROG / XPROGProtocol.c
index 47e2b4d..85820fd 100644 (file)
 
 #if defined(ENABLE_XPROG_PROTOCOL) || defined(__DOXYGEN__)
 /** Base absolute address for the target's NVM controller for PDI programming */
-uint32_t XPROG_Param_NVMBase = 0x010001C0;
+uint32_t XPROG_Param_NVMBase       = 0x010001C0;
 
 /** Size in bytes of the target's EEPROM page */
-uint16_t XPROG_Param_EEPageSize;
+uint16_t XPROG_Param_EEPageSize    = 32;
 
 /** Address of the TPI device's NVMCMD register for TPI programming */
-uint8_t  XPROG_Param_NVMCMDRegAddr;
+uint8_t  XPROG_Param_NVMCMDRegAddr = 0x33;
 
 /** Address of the TPI device's NVMCSR register for TPI programming */
-uint8_t  XPROG_Param_NVMCSRRegAddr;
+uint8_t  XPROG_Param_NVMCSRRegAddr = 0x32;
 
 /** Currently selected XPROG programming protocol */
-uint8_t  XPROG_SelectedProtocol = XPRG_PROTOCOL_PDI;
+uint8_t  XPROG_SelectedProtocol    = XPRG_PROTOCOL_PDI;
 
 /** Handler for the CMD_XPROG_SETMODE command, which sets the programmer-to-target protocol used for PDI/TPI
  *  programming.
@@ -115,7 +115,7 @@ static void XPROGProtocol_EnterXPROGMode(void)
        Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
        Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
        
-       bool NVMBusEnabled;
+       bool NVMBusEnabled = false;
 
        if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI)
        {
@@ -131,14 +131,14 @@ static void XPROGProtocol_EnterXPROGMode(void)
                XPROGTarget_SendByte(0x07);
 
                /* Enable access to the XPROG NVM bus by sending the documented NVM access key to the device */
-               XPROGTarget_SendByte(PDI_CMD_KEY);      
+               XPROGTarget_SendByte(PDI_CMD_KEY);
                for (uint8_t i = sizeof(PDI_NVMENABLE_KEY); i > 0; i--)
                  XPROGTarget_SendByte(PDI_NVMENABLE_KEY[i - 1]);
 
                /* Wait until the NVM bus becomes active */
                NVMBusEnabled = XMEGANVM_WaitWhileNVMBusBusy();
        }
-       else
+       else if (XPROG_SelectedProtocol == XPRG_PROTOCOL_TPI)
        {
                /* Enable TPI programming mode with the attached target */
                XPROGTarget_EnableTargetTPI();
@@ -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: