Help us improve the Power & Sensing Selection Guide. Share feedback

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Level 1
Level 1
First reply posted First question asked Welcome!


I have configured an SRAM chip to work with SMIF in normal mode. Now I want to enable XIP/memory mapping of that memory.

It seems like the memory map of CY8C62x7 expects external RAM to live at 0x60000000 – 0x9FFFFFFF (according to the datasheet). However, I'm having difficulty configuring SMIF to point to that address when memory mapping.

If I configure the memory to have a baseAddress of 0x60152B00, when written to the SMIF0_DEVICE2_ADDR the value changes and becomes 0x18152B00. I have seen the same happen with a baseAddress value of
0x2C000000 leading to a SMIF0_DEVICE0_ADDR value of 0x1C000000.
Can you explain this behavior? I've not seen any indications in the register TRM or the PDL documentation that this is normal.
I have also tried a value that qspi configurator seems happier with, 0x18148D00. With this value I don't see a change in SMIF0_DEVICE2_ADDR but I get a hardfault when attempting to write directly to this address. I suppose this is because the address is in the wrong  address range.

Do you have any hints for me on how to get this to work?
2 Replies
50 likes received 100 solutions authored 250 replies posted

Hi @Sturla22 ,

I have gone through PSoC 62 architecture TRM and I will update my team internally to correct the memory addresses mentioned for external memory of  XIP mode. However, you can refer our PSoC 6 programming spec here : where it is mentioned in section 2.5(execute-in-place) -> An external flash memory device must be write-enabled and mapped to the XIP address space in PSoC 6 MCUs (within the address range 0x1800 0000 - 0x1FFF FFFF)

Hence,  0x1800 0000 - 0x1FFF FFFF address range is supported in our device for external memory in XIP mode.

I hope this helps. Please add here in case of any further query.

Best Regards,



Thank you, that put me on the right track.

For future reference and the benefit of others with similar issues: I also had to use 0x18000000 rather than 0x18148D00 as the baseAddress like I had previously tried. This limits the memory space available for memory mapping, but at least it works ¯\_(ツ)_/¯ 
Finally I had to hard-code the address to access the memory-mapped RAM, instead of making use of symbols defined in the linker script. Using the symbol defined by the linker script had a strange side affect of copying the memory value into the pointer (compiled with IAR 8.4).