Ik ben al een tijdje bezig met het ontwerpen van een Standalone Programmer voor AVR. Tot dusver is alles in kannen en kruiken, echter loopt het programeren van een "target board" spaak.
Ik maak gebruik van een ATMega328 op 20MhZ als hart van de programmer. Een 24LS256 als geheugen, en een FT232RL om de communicatie met de pc op te zetten.
Het SPI Protocol naar het "target board" werkt uitstekend, ik dan erasen, sig. bytes uitlezen, etc.
Communiceren met de pc werkt ook, ik kan een programma overzetten naar de 24LS256.
Tijdens het programeren van het "target board" gaat het na 3 pages mis, dan klopt er niks meer van de data! Hieronder een paar routines die het programeren verzorgen!
Het flashen van target.
Code: Selecteer alles
while (adres < 15329) {
flash_adres = adres / 2;
for (cnt = 0; cnt <pagesize>> 8) & 0xFF);
spi_mastertransmit_nr(avr_adres & 0xFF);
spi_mastertransmit_nr(ReadMem(adres));
adres++;
spi_mastertransmit_nr(0x48);
spi_mastertransmit_nr((avr_adres >> 8) & 0xFF);
spi_mastertransmit_nr(avr_adres & 0xFF);
spi_mastertransmit_nr(ReadMem(adres));
adres++; // Volgend SRAM-adres
}
spi_mastertransmit_nr(0x4C); // Program flash
spi_mastertransmit_nr((flash_adres >> 8) & 0xFF); // Adres-H
spi_mastertransmit_nr(flash_adres & 0xFF); // Adres-L
spi_mastertransmit_nr(0);
delay_ms(5); // Wachten tot het flashen afgelopen is
}
Routine voor het schrijven naar eeprom vanaf pc:
Code: Selecteer alles
for (i=0; i<15329; i++) {
byte = uart_getchar();
WriteMem(byte,i);
_delay_ms(5);
}
Weet iemand hier raad mee, of iemand die mij een stapje verder kan helpen??
Groet,
Thomas