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 ); }
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 ; }