diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c index 5275cca8d7022d54ddb7fedee65cddf06978e95e..1633fb24de367304291b5667425994ad371eef34 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c @@ -124,6 +124,10 @@ static void XPROGProtocol_EnterXPROGMode(void) XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG); XPROGTarget_SendByte(PDI_RESET_KEY); + /* Lower direction change guard time to 8 USART bits */ + XPROGTarget_SendByte(PDI_CMD_STCS | PDI_CTRL_REG); + XPROGTarget_SendByte(0x04); + /* Enable access to the XPROG NVM bus by sending the documented NVM access key to the device */ XPROGTarget_SendByte(PDI_CMD_KEY); for (uint8_t i = sizeof(PDI_NVMENABLE_KEY); i > 0; i--) @@ -134,10 +138,13 @@ static void XPROGProtocol_EnterXPROGMode(void) } else { - #if 0 /* Enable TPI programming mode with the attached target */ XPROGTarget_EnableTargetTPI(); + /* Lower direction change guard time to 8 USART bits */ + XPROGTarget_SendByte(TPI_CMD_SSTCS | TPI_CTRL_REG); + XPROGTarget_SendByte(0x04); + /* Enable access to the XPROG NVM bus by sending the documented NVM access key to the device */ XPROGTarget_SendByte(TPI_CMD_SKEY); for (uint8_t i = sizeof(TPI_NVMENABLE_KEY); i > 0; i--) @@ -145,8 +152,6 @@ static void XPROGProtocol_EnterXPROGMode(void) /* Wait until the NVM bus becomes active */ NVMBusEnabled = TINYNVM_WaitWhileNVMBusBusy(); - #endif - NVMBusEnabled = true; } Endpoint_Write_Byte(CMD_XPROG); diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c index c1f1a631619de5d6d48eaf5ee87f47e82bd7ba0c..a8c798efba580e3826d392ed95badb26c98331b7 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c @@ -420,7 +420,7 @@ static void XPROGTarget_SetRxMode(void) } /* Wait until DATA line has been pulled up to idle by the target */ - while (!(BITBANG_PDIDATA_PIN & BITBANG_PDIDATA_MASK)); + while (!(BITBANG_PDIDATA_PIN & BITBANG_PDIDATA_MASK) && TimeoutMSRemaining); #endif IsSending = false; diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h index dab41f316cdc7275d705b6434230744328e72392..33a5827db6556a6c6b6cffce59004f6c87cb7ec1 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h @@ -81,7 +81,7 @@ #endif /** Number of cycles between each clock when software USART mode is used */ - #define BITS_BETWEEN_USART_CLOCKS 100 + #define BITS_BETWEEN_USART_CLOCKS 200 /** Total number of bits in a single USART frame */ #define BITS_IN_USART_FRAME 12