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
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