This blog presents the steps needed to enable XIP(eXecute-In-Place) support in CYW4390x. During normal operation, the code resides in the SFLASH and is copied to RAM during execution.The XIP feature allows instructions stored in SFLASH to be executed in place. This is suitable for instances where the RAM size is limited and application size is too large.

 

How to enable XIP

 

XIP feature is disabled by default and it can be easily enabled by adding 'xip' option to build target,

for example:

snip.scan-CYW943907AEVAL1F-xip download run

 

XIP load address, link script start address as well as XIP region length are defined in $PLATFORM/platform_xip.mk and it's configurable by users.

The following macros needs to be defined to enable XIP.

  • XIP_LINK_START_ADDRESS  : Specify the start address of XIP in linker script
  • XIP_REGION_LENGTH            : Specify the length of XIP region in linker script
  • XIP_LOAD_ADDRESS              : Specify the XIP SFLASH address. XIP binary code would be downloaded to  this address.

 

 

XIP link script:WICED/platform/MCU/BCM4390x/GCC/app_without_rom_with_xip.ld will be generated based on platform_xip.mk and its processed through the build process.

XIP binary file: *.xip.bin which contains XIPed code will be generated in build/$APP/binary/ and loaded to SFLASH.

All XIP code on SFLASH should be contiguous.

 

Limitations while using XIP

  1. XIP operation and SFLASH access are NOT allowed to operate simultaneously. SFLASH read/write(non-xip) operation can only run with interrupts disabled.
  2. The XIP image cannot be encrypted because the SFLASH controller has no HW decryption engine.
  3. OTA2 is not yet supported while using XIP.