problem mit crc und pgm_read_byte nach flashen bootloader

Gast #1679418
Lesenswert?
• ▲
▼
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
}
Gast #1679455
Lesenswert?
• ▲
▼
>Der Flash ist also programmiert, kann aber nicht nach dem programmieren
>nicht ausgelesen werden. ?!?
es wird aber schon der RWW bereich wieder aktiviert?
siehe SPMCR register Bit 4 – RWWSRE.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.