- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi.
I am using Psoc Creator 3.3 and am designing a Bootloader component to be used with a Bootloadable component.
One of the requirements is that the bootloader needs to validate itself before proceeding with bootloading, which is provided by the "Bootloader application validation" setting in the bootloader component in "TopDesign.cysch" file.
However, after building and flashing the project in Eclipse with a J-Link (not Miniprog3), the code hangs during checksum calculation. The reason is these two following lines in Bootloader_1.c:
const uint32 CYCODE Bootloader_1_SizeBytes = 0xFFFFFFFFu;
const uint32 CYCODE *Bootloader_1_SizeBytesAccess = (const uint32 CYCODE *)(&Bootloader_1_SizeBytes);
As you can see, the bootloader's size is hard coded and as a result it will calculate the checksum forever. I confirmed this by pausing the program with the debugger.
According to Cypress:
Bootloader application validation
If this option is enabled, the bootloader validates itself by calculating the checksum and comparing it with the saved one that resides in the internal variable. PSoC Creator generates and puts the exact value into this variable during the post-build step.If validation does not pass, the device halts.If this option is disabled, the bootloader is executed even if it is corrupted. This can lead to unpredictable results.
this should be handled during post-build.
Am I missing a setting somewhere?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you for replying.
I actually found the error. My development is setup in Eclipse in Linux, and the command for the cyelftool.exe in the post-build script was this:
wine cyelftool.exe -B $PROJNAME.elf --flash_row_size 256 --flash_size 131072 --flash_array_size 65536 --ee_array 64 --ee_row_size 16
instead of this:
wine cyelftool.exe -P $PROJNAME.elf --flash_row_size 256 --flash_size 131072 --size_var_name Bootloader_1_SizeBytes --checksum_var_name Bootloader_1_Checksum
As you can see, it was missing the two arguments for size and checksum. This was the reason these values were not updated in the .elf file.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
We tried running a code example in PSoC Creator 4.3 and the bootloadable application is running at our end.
I have attached the project , can you please try and let us know if this works.
The two lines which you have mentioned, is there in the code example which i have attached and the code is working.
Please let us know if this works.
Regards
Alakananda
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you for replying.
I actually found the error. My development is setup in Eclipse in Linux, and the command for the cyelftool.exe in the post-build script was this:
wine cyelftool.exe -B $PROJNAME.elf --flash_row_size 256 --flash_size 131072 --flash_array_size 65536 --ee_array 64 --ee_row_size 16
instead of this:
wine cyelftool.exe -P $PROJNAME.elf --flash_row_size 256 --flash_size 131072 --size_var_name Bootloader_1_SizeBytes --checksum_var_name Bootloader_1_Checksum
As you can see, it was missing the two arguments for size and checksum. This was the reason these values were not updated in the .elf file.