mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-30 21:02:32 +01:00 
			
		
		
		
	Make TPI programming protocol program in words, not bytes to satisfy the datasheet conditions.
This commit is contained in:
		
							parent
							
								
									4d246a82cb
								
							
						
					
					
						commit
						b736a5ef2b
					
				| @ -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 | ||||
|  */ | ||||
| @ -154,6 +154,10 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, const uint8_t* WriteBuffer | ||||
| 	/* Wait until the NVM controller is no longer busy */ | ||||
| 	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); | ||||
| @ -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) | ||||
| 		{ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dean Camera
						Dean Camera