2021-07-22 01:56 PM
Hello all, I'm pretty stuck and could use a pointer in the right direction. I have a nucleo communicating with another board via UART. I would like to be able to update the application on the nucleo board via UART from the other board. Is there any example somewhere on kicking off the bootloader (buttonless)/ nor moving any jumpers. I have read some docs on the USART bootloader sequence but it looks like that requires a strange pattern of moving jumpers around (see attached image). I cant find much more than that.perhaps I need to start looking at some template bootloader code and toying with writing my own?
Thanks and sorry for the n00bness
2021-07-31 07:02 AM
This is sending 240 bytes, not 239. The checksum is a single byte and must be XOR'd with all the data bits, plus the first byte you send to indicate length.
I'm guessing your data doesn't all XOR to 0.
2021-08-08 08:40 PM
Thanks. I sorted that all out and converted a simple program (blinky program) from a .bin to an array as "const unsigned char MyBinImage[] = {
0x00, 0xEF, 0xBF, 0xBD, 0x01, 0x20, 0xEF, 0xBF, 0xBD, 0x08, 0x00, 0x08,
0xEF, 0xBF, 0xBD, 0x07, 0x00, 0x08, 0xEF, 0xBF, 0xBD, 0x07, 0x00, 0x08,
0xEF, 0xBF, 0xBD, 0x07, 0x00, 0x08, 0xEF, 0xBF, 0xBD, 0x07, 0x00, 0x08,
0xEF, 0xBF, 0xBD, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xBF,
0xBD, 0x07, 0x00, 0x08, 0x05, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x13, 0x08, 0x00, 0x08, 0x21, 0x08, 0x00, 0x08, 0xEF, 0xBF, 0xBD, 0x08 .. etc.
"
I received ACKS as i wrote it in 256 byte chunks to flash starting at address 0x08000000. However, after finishing all the writes my nucleo did nothing. Bootloader didn't launch nor did the program i tried to write. I also tried issuing a "Go command" and same result.
2021-08-10 11:20 AM
In regards to my other comment. It still looks like my write command does not actually write anything to flash. For example I write like so:
0x31 0xCE
ACK
0x08 0x00 0x00 0x00 0x08
ACK
0x03 0x00 0x55 0xAA 0xFF 0x03
ACK
Now i try to read:
0x11 0xEE
ACK
0x08 0x00 0x00 0x00 0x08
ACK
0xFF 0x00
Data:
00 00 00 00 55 08 08 2B 08 08 58 08 08 16 08 08 5B 08 08 00 00
00 00 00 00 00 00 2E 08 08 60 08 08 00 00 0C 00 A8 86 00 A8 95 00 A8 95
00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95
00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95
00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95
00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95
00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95
00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 A8 95 00 F8
Even tho I am getting acks on my write nothing seems to change.
2021-08-10 11:28 AM
2021-08-10 11:37 AM
I tried that too and its still not what I would expect.
I do a mass erase with:
0x44 0xBB
ACK
0xFF 0xFF <-- mass erase
0x00 checksum
ACK
I then read the data same way as above and I do see its erases because all data returned from read is FF.
Then i issue the write command mentioned above with the same data to write(0x00 0x55 0xAA 0xFF)
and my read results in:
55 B5 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Thank you.
2021-08-10 01:17 PM
welp... I managed to update the FW ! =) but the read being different from what I wrote doesnt make sense to me