Gast
#1679418
ich will eine bootloader app schreiben. nach dem flashen soll der flash speicher mittles einer crc getestet werden. hardware: mkII, atmega88, debugbywire software: avrstudio, winavr - nach dem schreiben des Flash mittels boot_page_write funktioniert ABER nach dem flashen kann zeigt AVR Studio den Flash leer also, 0xFF an. Nach einem RESET (blauer Pfeil zum Springen zum Programmstart) zeigt AVRStudio den richtigen Inhalt an. - wenn ich die CRC am Programmstart ausführe bekomme ich die richtige Checksummer, - nach dem Flashen gibt pgm_read_byte immer nur 0xff zurück, nach einem reset werden jedoch die richtigen werte gelesen - wird die firmware vom bootloader gestartet läuft sie, Der Flash ist also programmiert, kann aber nicht nach dem programmieren nicht ausgelesen werden. ?!? Irgendjemand eine Idee? //---------------------------------------------------------------------- ------- // Berechnung der CRC //---------------------------------------------------------------------- ------- //unsigned int CAL_CRC16 (unsigned int CRC, unsigned short c, unsigned int mask) unsigned int CAL_CRC16() { volatile unsigned char c,i; volatile unsigned int addr; volatile unsigned int CRC; const unsigned int mask = 0xA001; CRC = 0; for (addr=0;addr<(64*96);addr++) { c=pgm_read_byte(addr); for (i=0; i<8; i++) { if ((CRC ^ c)&1) { CRC=(CRC>>1)^mask; } else CRC>>=1; c>>=1; } } return (CRC); } //write one Flash page void write_one_page(unsigned int FlashAddr, unsigned char *buf) { unsigned char bufptr, pagptr; boot_page_erase(FlashAddr); //erase one Flash page boot_spm_busy_wait(); for(pagptr = 0; pagptr < SPM_PAGESIZE; pagptr += 2) //fill data to Flash buffer { boot_page_fill(pagptr, buf[pagptr] | (buf[pagptr + 1] << 8)); } boot_page_write(FlashAddr); //write buffer to one Flash page boot_spm_busy_wait(); //wait Flash page write finish }