Skip to content
Snippets Groups Projects
Commit b736a5ef authored by Dean Camera's avatar Dean Camera
Browse files

Make TPI programming protocol program in words, not bytes to satisfy the datasheet conditions.

parent 4d246a82
No related branches found
No related tags found
No related merge requests found
......@@ -156,7 +156,7 @@
*
* <b><sup>1</sup></b> <i>Optional, see \ref SSec_Options section - for USB AVRs with ADC modules only</i> \n
* <b><sup>2</sup></b> <i>When XPROG_VIA_HARDWARE_USART is set, the AVR's Tx and Rx become the DATA line when connected together
* via a pair of 300 ohm resistors, and the AVR's XCK pin becomes CLOCK.</i> \n
* via a pair of 220 ohm resistors, and the AVR's XCK pin becomes CLOCK.</i> \n
* <b><sup>3</sup></b> <i>See AUX line related tokens in the \ref SSec_Options section</i>
*
* \section Sec_TPI TPI Connections
......@@ -202,7 +202,7 @@
*
* <b><sup>1</sup></b> <i>Optional, see \ref SSec_Options section - for USB AVRs with ADC modules only</i> \n
* <b><sup>2</sup></b> <i>When XPROG_VIA_HARDWARE_USART is set, the AVR's Tx and Rx become the DATA line when connected together
* via a pair of 300 ohm resistors, and the AVR's XCK pin becomes CLOCK.</i> \n
* via a pair of 220 ohm resistors, and the AVR's XCK pin becomes CLOCK.</i> \n
* <b><sup>3</sup></b> <i>See AUX line related tokens in the \ref SSec_Options section</i>
*
* \section SSec_Options Project Options
......
......@@ -141,11 +141,11 @@ bool TINYNVM_ReadMemory(const uint16_t ReadAddress, uint8_t* ReadBuffer, uint16_
return true;
}
/** Writes byte addressed memory to the target's memory spaces.
/** Writes word addressed memory to the target's memory spaces.
*
* \param[in] WriteAddress Start address to write to within the target's address space
* \param[in] WriteBuffer Buffer to source data from
* \param[in] WriteLength Total number of bytes to write to the device
* \param[in] WriteLength Total number of bytes to write to the device (must be an integer multiple of 2)
*
* \return Boolean true if the command sequence complete successfully
*/
......@@ -155,6 +155,10 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, const uint8_t* WriteBuffer
if (!(TINYNVM_WaitWhileNVMControllerBusy()))
return false;
/* Must have an integer number of words to write - if extra bytes, abort programming */
if (WriteLength & 0x01)
return false;
/* Set the NVM control register to the WORD WRITE command for memory reading */
TINYNVM_SendWriteNVMRegister(XPROG_Param_NVMCMDRegAddr);
XPROGTarget_SendByte(TINY_NVM_CMD_WORDWRITE);
......@@ -162,11 +166,22 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, const uint8_t* WriteBuffer
/* Send the address of the location to write to */
TINYNVM_SendPointerAddress(WriteAddress);
while (WriteLength--)
while (WriteLength)
{
/* Write the byte of data to the target */
/* Wait until the NVM controller is no longer busy */
if (!(TINYNVM_WaitWhileNVMControllerBusy()))
return false;
/* Write the low byte of data to the target */
XPROGTarget_SendByte(TPI_CMD_SST | TPI_POINTER_INDIRECT_PI);
XPROGTarget_SendByte(*(WriteBuffer++));
/* Write the high byte of data to the target */
XPROGTarget_SendByte(TPI_CMD_SST | TPI_POINTER_INDIRECT_PI);
XPROGTarget_SendByte(*(WriteBuffer++));
/* Need to decrement the write length twice, since we read out a whole word */
WriteLength -= 2;
}
return true;
......
......@@ -67,9 +67,9 @@ MIME_Type_t PROGMEM MIMETypes[] =
{.Extension = "gif", .MIMEType = "image/gif"},
{.Extension = "bmp", .MIMEType = "image/bmp"},
{.Extension = "png", .MIMEType = "image/png"},
{.Extension = "ico", .MIMEType = "image/x-icon"},
{.Extension = "exe", .MIMEType = "application/octet-stream"},
{.Extension = "gz", .MIMEType = "application/x-gzip"},
{.Extension = "ico", .MIMEType = "image/x-icon"},
{.Extension = "zip", .MIMEType = "application/zip"},
{.Extension = "pdf", .MIMEType = "application/pdf"},
};
......@@ -125,7 +125,7 @@ void WebserverApp_Callback(void)
AppState->CurrentState = AppState->NextState;
}
if (uip_rexmit() || uip_newdata() || uip_acked() || uip_connected() || uip_poll())
if (uip_rexmit() || uip_acked() || uip_newdata() || uip_connected() || uip_poll())
{
switch (AppState->CurrentState)
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment