PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro - Wie werden pages geflasht?



Wsk8
29.08.2013, 13:48
Hallo,
hab mal ne etwas ungewöhnliche Frage. Mich würde interessieren, wie die pages die über das Flash-Tool gesendet werden, in den Flash geschrieben werden.

Aufgebaut werden sie so:


unsigned char m_RAM[MAX_PAGE][PAGE_SIZE - 3]; //-1PageNo -2CRC16

// Zeile aus Datei einlesen
// ...

sscanf(&line[1],"%02X",&recordLength);
sscanf(&line[3],"%04X",&address);
sscanf(&line[7],"%02X",&type);

// Hex überprüfen ob checksum etc richtig ...

// Daten in temp buffer
for ( i = 0; i < recordLength; i++) {
sscanf(&line[9 + i*2],"%02X",&data);
cksum += data;
tmp[i] = data;
}

// Daten in RAM buffer kopieren
memcpy(&m_RAM[0][0]+address,&tmp[0],recordLength);


....

// Daten in Sendbuffer kopieren
sendData[0] = i; // PageNo.
crc = 0;
memcpy(&sendData[1],&m_RAM[i][0],PAGE_SIZE - 3);
//Build CRC16
for (j = 0; j < PAGE_SIZE - 2; j++) // -2 CRC16
crc = CRC16(crc,sendData[j]);
memcpy(&sendData[j],&crc,2);

// Daten senden....





Der Sendbuffer, der an den Asuro übertragen wird, sieht nun so aus:
buffer[0] = Seitennummer

buffer[1-64] = Daten aus hexfile

buffer[65-66] = checksum, ob daten korrekt übertragen wurden


Um in den flash zu schreiben, hab ich die Funktion void boot_program_page (uint32_t page,uint8_t*buf) dbenutzt.
Bei der page, habe ich immer +64 dazugerechnet, da das ja die Größe einer Seite ist. Leider funktioniert es nicht.

Kann mir das mal einer erklären???

mfg

markusj
30.08.2013, 18:20
Bei der page, habe ich immer +64 dazugerechnet, da das ja die Größe einer Seite ist. Leider funktioniert es nicht.

Hast du Mal versucht die Page einfach nur um +1 zu ändern? Ohne mir die Funktion angesehen zu haben gehe ich davon aus, dass hier die Page adressiert wird. Zumindest wird nur die Pagenummer selbst - und nicht die Adresse des ersten Bytes der Page - an den ASURO übertragen.

Grüße,
Markus

Wsk8
30.08.2013, 18:49
+1, +32 und +64. Kein Erfolg.

mfg

Valen
30.08.2013, 20:34
Hier gibt es ein Bootloader auf den Seite von Arexx-Henk:


http://home.kpn.nl/h.van.winkoop/Asuro/Bootloader/AsuBtlPagFrm.htm


Leider ist es meistens Assembler-sprache. Aber vielleicht kannst du immer noch daraus holen was Wichtig ist.

markusj
31.08.2013, 11:25
Wsk8: Rufst du vorher andere Funktionen auf? Zwischen Bootloader und Flashtool läuft noch etwas mehr Kommunikation, zuerst musst du die Verbindung zum ASURO herstellen/diesen in den Flash-Modus bringen.

Grüße,
Markus

Wsk8
31.08.2013, 13:03
@Valen
So viel ich gesehen habe, akzeptiert der Bootloader nur eine reine Hex. Hier wüsste ich auch wie ich sie schreibe, aber mir gehts ja um das Format des Asuros.


Rufst du vorher andere Funktionen auf? Zwischen Bootloader und Flashtool läuft noch etwas mehr Kommunikation, zuerst musst du die Verbindung zum ASURO herstellen/diesen in den Flash-Modus bringen.
Weiß ich, die Verbindung funktioniert. Daten wurden auch korrekt gesendet laut CRC-Überprüfung.

mfg

markusj
31.08.2013, 14:03
Weiß ich, die Verbindung funktioniert. Daten wurden auch korrekt gesendet laut CRC-Überprüfung.

Und was genau funktioniert dann nicht? Wenn du einen zweiten Transceiver besitzt, kannst du die Kommunikation mitschneiden. Das Protokoll habe ich im Quelltext von tinyasuroboot (http://sourceforge.net/p/libtinyasuro/code/ci/master/tree/tinyasuroboot/bootloader.asm) dokumentiert.

Grüße,
Markus

Wsk8
31.08.2013, 14:18
Und was genau funktioniert dann nicht?

Grüße,
Markus

Um in den flash zu schreiben, hab ich die Funktion void boot_program_page (uint32_t page,uint8_t*buf) dbenutzt.
Bei der page, habe ich immer +64 dazugerechnet, da das ja die Größe einer Seite ist. Leider funktioniert es nicht.
Die Daten in den Flash zu schreiben.

mfg

markusj
31.08.2013, 23:13
Die Daten in den Flash zu schreiben.

So weit waren wir schon, hilfreich ist die Aussage trotzdem nicht. Du sagst die Daten werden gesendet. Wie reagiert der ASURO darauf? Welche Zustände durchläuft der Bootloader im ASURO?

mfG
Markus

Wsk8
01.09.2013, 16:51
Connection -> OK
Daten empfangen -> CRC -> OK
Daten via boot_program_page(...) in den Flash schreiben -> OK

Programm funktioniert -> FAIL

Werde wohl selbst noch ein bisschen rumprobieren und debuggen.

mfg

markusj
01.09.2013, 21:57
Wenn das Programm nicht selbst Probleme macht (manchmal sucht man Fehler an der falschen Stelle weil man ein fehlerhaftes Hexfile geladen hat ...) sind vielleicht die Daten kaputt die du überträgst. Wenn du testweise einen zweiten AVR mit einem kompatiblen Bootloader flashst, könntest du hinterher den Flash auslesen und analysieren was der Loader empfangen und geschrieben hat.

mfG
Markus