May 15, 2017
10:42 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
May 15, 2017
10:42 PM
Hello,
if I use the Bootloader IAP XMC47 example without any optimization it works properly.
But if I use any optimization level the abm header is no longer available.
Optimization (-Os / -O1)
No optimization
These are the intersting defines:
main.c:
linker_script.ld:
Are there any hints preventing the abm header against optimization?
Thank you.
regards,
TestJoe
if I use the Bootloader IAP XMC47 example without any optimization it works properly.
But if I use any optimization level the abm header is no longer available.
Optimization (-Os / -O1)
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00004744 08000000 0c000000 00008000 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 Stack 00000800 1ffe8000 1ffe8000 00018000 2**0
ALLOC
2 .data 000000b8 1ffe8800 0c004744 00010800 2**2
CONTENTS, ALLOC, LOAD, DATA
3 .bss 0000072c 1ffe88b8 0c0047fc 000108b8 2**2
No optimization
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000076dc 08000000 0c000000 00008000 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .abm 00000014 0800ffe0 0c00ffe0 00017fe0 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 Stack 00000800 1ffe8000 1ffe8000 00018000 2**0
ALLOC
3 .data 000000b8 1ffe8800 0c0076dc 00010800 2**2
CONTENTS, ALLOC, LOAD, DATA
4 .bss 0000072c 1ffe88b8 0c007794 000108b8 2**2
These are the intersting defines:
main.c:
#define ABM_HEADER_MAGIC_KEY 0xA5C3E10F
typedef struct ABM_Header {
uint32_t MagicKey; /**< Magic key. Always 0xA5C3E10F */
uint32_t StartAddress; /**< Start address of the programm to load */
uint32_t Length; /**< Length of the programm to load. */
uint32_t ApplicationCRC32; /**< CRC32 Sum of the complete application code */
uint32_t HeaderCRC32; /**< CRC32 Sum of the four fields before */
} ABM_Header_t;
static const ABM_Header_t __attribute__((section(".flash_abm")))
ABM0_Header = {
.MagicKey = ABM_HEADER_MAGIC_KEY,
.StartAddress = 0x08020000, /* Start Flash Physical Sector 8 */
.Length = 0xFFFFFFFF,
.ApplicationCRC32 = 0xFFFFFFFF,
.HeaderCRC32 = 0xEF423163
};
linker_script.ld:
MEMORY
{
FLASH_1_cached(RX) : ORIGIN = 0x08000000, LENGTH = 0x200000
FLASH_1_uncached(RX) : ORIGIN = 0x0C000000, LENGTH = 0x200000
PSRAM_1(!RX) : ORIGIN = 0x1FFE8000, LENGTH = 0x18000
DSRAM_1_system(!RX) : ORIGIN = 0x20000000, LENGTH = 0x20000
DSRAM_2_comm(!RX) : ORIGIN = 0x20020000, LENGTH = 0x20000
SRAM_combined(!RX) : ORIGIN = 0x1FFE8000, LENGTH = 0x58000
}
.abm ABSOLUTE(0x0800FFE0): AT(0x0800FFE0 | 0x04000000)
{
KEEP(*(.flash_abm))
} > FLASH_1_cached
Are there any hints preventing the abm header against optimization?
Thank you.
regards,
TestJoe
- Tags:
- IFX
2 Replies
May 19, 2017
07:58 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
May 19, 2017
07:58 AM
Hi,
Please try defining ABM0_Header as:
Regards,
Jesus
Please try defining ABM0_Header as:
static const ABM_Header_t __attribute__((section(".flash_abm"), used))
ABM0_Header = {
.MagicKey = ABM_HEADER_MAGIC_KEY,
.StartAddress = 0x08010000, /* Start Flash Physical Sector 1 */
.Length = 0xFFFFFFFF,
.ApplicationCRC32 = 0xFFFFFFFF,
.HeaderCRC32 = 0xE176A4E6
};
Regards,
Jesus
Jun 04, 2020
07:35 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Jun 04, 2020
07:35 AM
Hi Jesus,
I know this thread is pretty old, but I ran into a similar problem.
My application matches your ABM Header exactly. App is starting at 0x08010000. The Bootloader is located at 0x08000000.
You've been mentioning a CRC of 0xE176A4E6.
ABM0_Header = { .MagicKey = ABM_HEADER_MAGIC_KEY, .StartAddress = 0x08010000, /* Start Flash Physical Sector 1 */ .Length = 0xFFFFFFFF, .ApplicationCRC32 = 0xFFFFFFFF, .HeaderCRC32 = 0xE176A4E6};
I'm good with that, but I fail to calculate the CRC using any of my CRC32 functions. Even when using the XMC FCE unit.
Could you please give me a hint how to set up the XMC's internal unit to calculate the CRC for the first 4 uint32 values of the above header so that the result is 0xE176A4E6?
Or any function to calculate it correctly?
Any help is highly appreciated.
Michael
I know this thread is pretty old, but I ran into a similar problem.
My application matches your ABM Header exactly. App is starting at 0x08010000. The Bootloader is located at 0x08000000.
You've been mentioning a CRC of 0xE176A4E6.
ABM0_Header = { .MagicKey = ABM_HEADER_MAGIC_KEY, .StartAddress = 0x08010000, /* Start Flash Physical Sector 1 */ .Length = 0xFFFFFFFF, .ApplicationCRC32 = 0xFFFFFFFF, .HeaderCRC32 = 0xE176A4E6};
I'm good with that, but I fail to calculate the CRC using any of my CRC32 functions. Even when using the XMC FCE unit.
Could you please give me a hint how to set up the XMC's internal unit to calculate the CRC for the first 4 uint32 values of the above header so that the result is 0xE176A4E6?
Or any function to calculate it correctly?
Any help is highly appreciated.
Michael