In my previous article “Seeed Studio Arch Mix NXP i.MX RT1052 Board” I described how I can use and debug the Seeed Arch Mix Board. But so far I only had things running in RAM. Ultimately I want to use the QSPI FLASH memory on the device with my firmware and running code on it. This article shows how to get from RAM execution to SPI FLASH in-place execution (XiP).
💡 Executing from FLASH is typically slower than running from RAM. But running from FLASH does not need any special loading at runtime.
With still no schematics of the board available (I have asked Seeed for that) I had to do some reverse engineering to find out more about the Arch Mix board.
💡 UPDATE: Seeed has uploaded the schematics of the board to http://wiki.seeedstudio.com/Arch_Mix/
I have found the ‘ShareBoard’ (see links at the end of this article) which seems to be like the predecessor of the Seeed Arch Mix board. That way I have found out some of the address mapping and peripherals.
I have setup the board for SWD debugging (see “Seeed Studio Arch Mix NXP i.MX RT1052 Board“). I’m using the Eclipse based MCUXpresso IDE V11.0.0 with the NXP LPC-Link2 debug probe with a 3D printed enclosure.
💡 Do *not* install the jumper JP2 (provide power to the target), as with this debugging most likely will fail.
So here is how to go from ‘RAM’ to ‘SPI FLASH’ with the NXP i.MX RT1052 on the Seeed Arch Mix board….
Because there is not much documentation available, I looked at the i.MX RT1020 board projects (see “First Steps with the NXP i.MX RT1020 EVK Board“) as this board is using the same SPI FLASH device.
First, create an ’empty’ project with the Wizard in the MCUXpresso IDE using ‘New Project…’. Select the MIMXRT1052xxxxB with the MCUXpresso SDK:
The RT1052 on the board uses the CVL5B package:
So I select that package to be used:
The rest leave with the defaults and have the project created. That project is setup for RAM only:
So debugging that project will run it in RAM (actually the DTC RAM), as seen in the disassembly window of the IDE:
So how to add the ability to download and debug in the external SPI FLASH?
The FLASH chip on the board is the IS25LP064A-BLE (64 MBit (8 MByte), the same as on the i.MX RT1020-EVK.
First, copy the XiP folder from the i.MX RT1020 project as it contains all the needed data to configure and identify the external FLASH device. The files can be renamed t match the 1050/52:
Don’t forget to include that new folder for the build (see “Include Source Files for a Build in Eclipse“).
The files need the fsl_common, so make sure it is added to the project. Manage the SDK components:
Make sure the common driver is added:
To make the FLASH device size known, add the following define to board.h:
#define BOARD_FLASH_SIZE (0x800000U)
These files need 3 defines in the project settings, so have them added:
XIP_EXTERNAL_FLASH=1 XIP_BOOT_HEADER_ENABLE=1 XIP_BOOT_HEADER_DCD_ENABLE=1
Finally, add the Flash at the beginning of the Memory list in the project settings:
- Type: Flash
- Location: 0x60000000
- Size: 0x80000
- Driver: MIMXRT1050-EVK_IS25WP064A.cfx
That’s it. Build the project and debug it:
Victory! We have programmed the Flash and are debugging it :-).
The project is available as example on my GitHub site too.
Happy Flashing 🙂
- Project on GitHub: https://github.com/ErichStyger/mcuoneclipse/tree/master/Examples/MCUXpresso/i.MX%20RT1052%20Seeed%20Arch%20Mix/MIMXRT1052_Seeed_ArchMix_BlinkyFLASH
- Getting Started with the Seeed Arch Mix: Seeed Studio Arch Mix NXP i.MX RT1052 Board
- Seed Arch Mix Board: https://www.seeedstudio.com/Arch-Mix-p-2901.html
- ShareBoard i.MX RT1050: https://github.com/Share-Board/ShareBoard-iMXRT1050
- ShareBoard schematics: https://github.com/Share-Board/ShareBoard-iMXRT1050/blob/master/PCB/V0.40/ShareBoard-i.MXRT1050_REV4.pdf
- i.MX RT Drivers in RT-Thread: https://github.com/RT-Thread/rt-thread/tree/8ed3470d2a485c49ec4f5d4a5ec53e94edf7a2c8/bsp/imxrt1052-evk/drivers
- RT1050 QSPI Boot Image discussion: https://community.nxp.com/thread/473345