Esempio n. 1
0
static inline void uploadPage() {
  u16 ourCRC = 0xffff;
  u16 page = getWordWithCRC( &ourCRC );
  u16 realCRC = getWord();
  char *response = RESPONSE_ERROR;

  fillBuffer( page );
  if ( realCRC == ourCRC ) {
    flashPage( page * SPM_PAGESIZE );
    boot_rww_enable();				//Re-enable the RWW section
    response = RESPONSE_OK;
  } 
  respond( UPLOAD_PAGE_COMMAND, page, response );
}
Esempio n. 2
0
uint32_t flashAvr( uint8_t *data64, uint8_t *data2561, uint16_t size64, uint16_t size2561 )
{
	uint32_t i ;
	uint8_t *data ;
	uint16_t address ;
	uint16_t size ;
	uint8_t *verifyData ;

	ispConnect() ;
	clockWait( 64 ) ;	// 20mS
	wdt_reset() ;
	if ( ( IspStatus = ispEnterProgrammingMode() ) == 0 )
	{
		Signature[0] = ispReadSignature(0) ;
		Signature[1] = ispReadSignature(1) ;
		Signature[2] = ispReadSignature(2) ;
	}
	// choose file here
	data = data64 ;
	size = size64 ;
	if ( Signature[1] == 0x98 )
	{
		data = data2561 ;
		size = size2561 ;
	}
	verifyData = data ;

	ispChipErase() ;

	if ( Signature[1] == 0x98 )
	{
	  ispTransmit(0x4D) ;
  	ispTransmit(0) ;
	  ispTransmit(0) ;
  	ispTransmit(0) ;
	}

	for ( address = 0 ; address < size ; address += 256 )
	{
		i = 256 ;
		if ( address + 256 > size )
		{
			i = size - address ;
		}
		flashPage( data, address, i ) ;
		data += 256 ;
		wdt_reset() ;
	}
	for ( i = 0 ; i < 64 ; i += 1 )
	{
		M64Program[i] = ispReadFlash( i ) ;
	}
	ispDisconnect() ;
	clockWait(64) ;
	wdt_reset() ;

	for ( i = 0 ; i < 64 ; i += 1 )
	{
		if ( *verifyData++ != M64Program[i] )
		{
			return 1 ;
		}
	}
	return 0 ;
}