I'm using SES to develop some code on the ADuCM410. The m410 requires that location 0x1FFC be set to either 0xFFFFFFFF or to the checksum for page 0. This post is to leave breadcrumbs for other people who stumble across this problem, and to ask if someone has better solutions.
This should be a fairly straightforward process, and I eventually was able to set it to 0xFFFFFFFF, albeit in a rather inelegant manner. I ran into some interesting holes in the documentation.
I was able to find articles on the linker, and was eventually able to find determine that the linker files are named .icf, and from that narrow down which of the .icf file that had been created in my attempts to learn SES that actually applied to this project. It would be very nice if the documentation explicitly mentioned these things, and how to find the location of the linker file from within the SES project.
It would also be nice to find better documentation on how to explicitly set a particular location to a particular value. Or, if this has been done, some easy to find collection of pointer to example configurations.
FWIW this was my solution, but it seems to leave post of Page 0 blank. The m410 has a page0 checksum baked into the hardware and without it being disabled with all 1s, or a valid checksum, the J-link was not even able to talk to the eval board until I used something else to erase the flash entirely.
If someone else wrestling with the m410 runs across this issue, if I manually wrote FFs into the 4 bytes using the memory tool before I ran code, then the system would not lock out.
//
// Combined regions per memory type
//
define region FLASH = FLASH1;
define region RAM = RAM1;
define region PAGE0_CHECKSUM = [from 0x1ffc size 4];
Also:
//
// Explicit placement in FLASHn
//
place in FLASH1 { section .FLASH1, section .FLASH1.*, section .page0_checksum };
//
// FLASH Placement
//
//
// Explicit placement of page 0 checksum
//
place in PAGE0_CHECKSUM { symbol page0_checksum };
place at start of FLASH { block vectors }; // Vector table section
//place at address 0x1ffc { section .page0_checksum }; // must be 0xFFFFFFFF or checksum
place in FLASH with minimum size order { block tdata_load, // Thread-local-storage load image
block exidx, // ARM exception unwinding block
block ctors, // Constructors block
block dtors, // Destructors block
readonly, // Catch-all for readonly data (e.g. .rodata, .srodata)
readexec // Catch-all for (readonly) executable code (e.g. .text)
};
This should be a fairly straightforward process, and I eventually was able to set it to 0xFFFFFFFF, albeit in a rather inelegant manner. I ran into some interesting holes in the documentation.
I was able to find articles on the linker, and was eventually able to find determine that the linker files are named .icf, and from that narrow down which of the .icf file that had been created in my attempts to learn SES that actually applied to this project. It would be very nice if the documentation explicitly mentioned these things, and how to find the location of the linker file from within the SES project.
It would also be nice to find better documentation on how to explicitly set a particular location to a particular value. Or, if this has been done, some easy to find collection of pointer to example configurations.
FWIW this was my solution, but it seems to leave post of Page 0 blank. The m410 has a page0 checksum baked into the hardware and without it being disabled with all 1s, or a valid checksum, the J-link was not even able to talk to the eval board until I used something else to erase the flash entirely.
If someone else wrestling with the m410 runs across this issue, if I manually wrote FFs into the 4 bytes using the memory tool before I ran code, then the system would not lock out.
//
// Combined regions per memory type
//
define region FLASH = FLASH1;
define region RAM = RAM1;
define region PAGE0_CHECKSUM = [from 0x1ffc size 4];
Also:
//
// Explicit placement in FLASHn
//
place in FLASH1 { section .FLASH1, section .FLASH1.*, section .page0_checksum };
//
// FLASH Placement
//
//
// Explicit placement of page 0 checksum
//
place in PAGE0_CHECKSUM { symbol page0_checksum };
place at start of FLASH { block vectors }; // Vector table section
//place at address 0x1ffc { section .page0_checksum }; // must be 0xFFFFFFFF or checksum
place in FLASH with minimum size order { block tdata_load, // Thread-local-storage load image
block exidx, // ARM exception unwinding block
block ctors, // Constructors block
block dtors, // Destructors block
readonly, // Catch-all for readonly data (e.g. .rodata, .srodata)
readexec // Catch-all for (readonly) executable code (e.g. .text)
};