Flash löschen beim Bootloader des stm32

Gast #3132914
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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 #3133744
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.