Flash löschen beim Bootloader des stm32

Gast #3132914
Hallo,

ich habe zwei stm32, der eine kann den anderen mit dem internen 
Bootloader neu Flashen. leider habe ich beim löschen
ein Problem und ich weis nicht wieso. in dem einen steht der 
nachfolgende Code:

// Flash Schreibschutz aufheben
sendToBootloader(0x73);
sendToBootloader(0x8C);

TimeoutBoot = 200;
while(((read_buffer2[0] != 0x79)||(read_buffer2[1] != 0x79)) && 
(TimeoutBoot != 0));

read_buffer2[0] = 0x00;
read_buffer2[1] = 0x00;

// Flash löschen
bWritePtr2 = 0;
sendToBootloader(0x44);
sendToBootloader(0xBB);

TimeoutBoot = 200;
while((read_buffer2[0] != 0x79) && (TimeoutBoot != 0));
sendToBootloader(0xFF);
sendToBootloader(0xFE);
sendToBootloader(0x01);
Delay(3);
while((read_buffer2[1] != 0x79) && (TimeoutBoot != 0));


Zum Problem:
nachdem ich den Schreibschutz aufhebe bekomm ich ein ACK (0x79) von dem 
Bootloader zurück.
Nachdem ich das Kommando zum Löschen schicke (0x44 + 0xBB) bekomme ich 
ein ACK (0x79) zurück.
nachdem ich die Adresse und checksumme (0xff, 0xFE und 0x01) schicke, 
bekomme ich ein NACK (0x1F) zurück.

hat jemand eine idee wieso?
Danke
Gast #3133677
mir ist auch aufgefallen das es beim Go Commando so ähnlich ist.

ich schicke 0x21 und 0xDE und warte auf ein ACK welches ich bekomme.
dann schicke ich ein 0x08 0x00 0x00 0x00 0x08 und warte auf 2 ACKs. aber 
ich bekomme nur eines. und laut application note müssten ja beide 
kommen.

sendToBootloader(0x21);
sendToBootloader(0xDE);
TimeoutBoot = 200;
while(read_buffer2[0] != 0x79 && TimeoutBoot != 0);
sendToBootloader(0x08);
sendToBootloader(0x00);
sendToBootloader(0x00);
sendToBootloader(0x00);
sendToBootloader(0x08);

while((read_buffer2[0] != 0x79 || read_buffer2[1] != 0x79|| 
read_buffer2[2] != 0x79) && TimeoutBoot != 0);
Gast #3133685
nein. sobald ich even parity benutze empfange ich gar nichts mehr. hab 
da auch schon verschiedene Baudraten ausprobiert. Konfiguriere die 
Schnittstelle wie folgt:

USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = 
USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

/* Configure USART2 */
USART_Init(USART2, &USART_InitStructure);

/* Enable the USART2 Receive interrupt: this interrupt is generated when 
the
USART2 receive data register is not empty */
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
/* Enable the USART2 */
USART_Cmd(USART2, ENABLE);
#3133697
Ich kann dir nur sagen das ich den Bootloader mit einem AVR angesteuert 
habe. Ohne Parity --> NACK mit Parity --> ACK

Manche Kommandos akzeptiert er anscheinend ohne Parity...
Warum kann ich dir nicht sagen. War bei mir auch so.

Warum du mit even parity nix empfängst weis ich nicht.
Liegt wahrscheinlich an deinem UART Code... keine Ahnung.

Aber wenn du meinst mach weiter ohne parity... wird aber definitiv nie 
funktionieren!
Gast #3133707
ich würde es ja schon gerne mit parity machen, hab ich am anfang ja auch 
probiert, aber es klappt nunmal nicht und ansonsten funktioniert ja der 
usart ohne probleme. aber danke für deine hilfe
Gast #3133744
danke, das war eines. also jetzt scheint es mit even parity zu gehen, 
aber hab noch nicht alle funktionen getestet. aber der fehler von oben 
ist immer noch vorhanden dass ich ein 0x1f zurück bekomme beim löschen
Gast #3133799
funktioniert jetzt beim löschen doch beim mass erase. hab davor zu kurz 
gewartet. bis das Ack nach der Adresse 0xff 0xff 0x00 kommt dauert es 
über 10 sekunden

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 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.