Hallo Leute,
ich programmiere einen ISP Programmer selbst (in C).
Ich kann bis jetzt Fuses lesen/schreiben, Signature Bytes lesen, und
einen Chip-Erase durchführen.
Was aber irgendwie absolut nicht klappen will, ist das Beschreiben des
Flash. Nachfolgend die Funktion die das eigentlich machen soll. Vorher
wird die Funktion aufgerufen, welche die Daten über die Uart entgegen
nimmt und parsed. Diese Funktion habe ich von meinem Bootloader
genommen, die funktioniert (splittet einfach das hex-format auf und gibt
die Daten in entsprechenden Variablen/Arrays wieder).
Es geht hierbei um einen Attiny13 der beschrieben werden soll.
Ich sende die Befehle, Adresse unteren 4bit (2x die Daten an die gleiche
Adresse, erst LSB dann MSB).
Dann (wenn das insg. 32 byte geladen wurden in den buffer), wird die
page geschrieben. Ich habe mal das Dokument (IST.hex) angehängt, und das
was drauf geschrieben werden soll (SOLL.hex).
Kann mir jmd. sagen, was ich dort falsch mache?
1 | //fill buffer
|
2 | for (uint8_t i = NULL; i < WordsPerPage; i++)
|
3 | {
|
4 | spi_data(0x40);
|
5 | spi_data(0x00);
|
6 | spi_data(adress|i); //low byte adr for word offset
|
7 | spi_data(DATA_LSB_MSB[i*2]); //lsb data
|
8 | _delay_ms(8);
|
9 |
|
10 |
|
11 | spi_data(0x48);
|
12 | spi_data(0x00);
|
13 | spi_data(adress|i); //high byte adr for word offset
|
14 | spi_data(DATA_LSB_MSB[(i*2) + 1]); //msb data
|
15 | _delay_ms(8);
|
16 | }
|
17 |
|
18 |
|
19 | //Now write the data to page
|
20 | spi_data(0x4C);
|
21 | spi_data((adress) >> 8);
|
22 | spi_data((adress) >> 15);
|
23 | spi_data(0x00);
|
24 |
|
25 | _delay_ms(10);
|