2021-04-26 10:27 AM
I'm trying to piece together the post-build process for flash integrity check using CRC. I'm running on an STM32F777.
So far I've been following:
https://community.st.com/s/question/0D50X0000B9vdDC/how-can-i-calculate-crc-of-image-in-post-build
and
https://www.eevblog.com/forum/microcontrollers/stm32-hex-file-signing-with-crc/
and
https://github.com/ethanhuanginst/STM32CubeIDE-Workshop-2019/tree/master/hands-on/06_F746-DISCO-CRC
But I'm seeing an error (warning?) that these guides don't mention and I haven't been able to find an explanation elsewhere:
warning: The STM32 filter uses 4-byte alignment,
but unaligned data is present. Use a "--fill 0xNN --within <input>
--range-padding 4" filter *before* the STM32 filter to fix this problem. See
srec_info(1) for how to see the data ranges.
I've tried adding the changes suggested by the error message, but they throw additional errors and it feels like a rabbit hole.
What's causing this unaligned data? Can I/should I fix it?
Solved! Go to Solution.
2021-04-26 03:08 PM
> Seems srecord -fill is non-inclusive of the end address.
Thanks for coming back with the answer.
Srecord is a powerful tool, but it has an unusual (even if justifiable) command-line syntax and a terrible manual.
The price is hard to beat, though... :)
JW
2021-04-26 03:21 PM
> Generally the reason I've never bothered with SRecord is that I built equivalent tools decades ago to perform specific tasks without all the circus and command line voodoo sequences
I tend to resort to homebrew only when it comes to something less than usual.
I do use an stm-crc program though, written on a lazy afternoon by one of my colleagues who's way better PC programmer than me, years ago, when srec did not have the STM32-CRC option. Once you have such a program at hand, as a basis, it's just natural to evolve from that forever, I admit.
JW
2022-05-25 11:26 PM
Hello, just for reference you can use this command (need to adapt to the current STM32 flash size):
srec_cat FIRM1.hex -Intel -fill 0xFF 0x08000000 0x080FFFFC -crop 0x08000000 0x080FFFFC -STM32 0x080FFFFC -o ROM1.hex -Intel
I managed to get a bootloader (USB Host) to work that burns the image from a USB flash drive, including the CRC of Flash, in case anyone is interested, I tried to leave my steps in these several posts: