Difference between revisions of "i.MX6SoloX"

From SEGGER Wiki
Jump to: navigation, search
 
(14 intermediate revisions by 5 users not shown)
Line 1: Line 1:
  +
The '''NXP iMX6SoloX''' are multi-core MCUs composed of a Cortex-M4 and Cortex-A9 core.
 
__TOC__
 
__TOC__
Multi-core support for iMX6SX (Solo X)
 
J-Link script files are necessary to connect to the A9 and M4 core of the iMX6SX (SoloX) MCU.
 
   
  +
==Flash Banks==
A9 core:
 
  +
===QSPI Flash===
[[File:iMX6SoloX_Connect_CortexA9.JLinkScript]]
 
  +
QSPI flash programming requires special handling compared to internal flash. For more information about this, please see the [[QSPI Flash Programming Support | QSPI Flash Programming Support article]].<br>
  +
J-Link supports the following pin configurations for iMX6SoloX:
   
  +
{| class="seggertable"
M4 core:
 
[[File:iMX6SoloX_Connect_CortexM4.JLinkScript]]
 
 
How to use script files:
 
Please refer to J-Link User Guide (UM08001), chapter 5.10 "J-Link script files"
 
 
Startup procedure is:
 
1) Start debug session that connects to A9 and let it run the application to the point that enables the M4
 
2) Start debug session that connects to M4
 
[...]
 
x) Close debug session that connects to M4
 
x + 1) Close debug session that connects to A9
 
 
'''Important!'''
 
 
On the SoloX the M4 cannot be independently debugged without having something running on the A9 that enables the M4.
 
Since Freescale removed some features from the i.MX6 to the SoloX, it is no longer possible to easily enable the M4 from the debug interface and so being able to debug it completely independent from the A9.
 
 
== iMX6SX (Q)SPI support ==
 
The NXP iMX6SX device series comes with a QUADSPI controller which allows memory mapped read accesses to any (Q)SPI flash, connected to the Quad-SPI interface of the MCU. This allows the J-Link DLL to support flash programming through the Quad-SPI interface. Unfortunately, there is no generic way how to implement flash programming because the used pins to connect the SPI flash is not defined but different pins can be used for the same QUADSPI alternate function and therefore, for each configuration, a slightly different RAMCode (different pin initialization / flash size) is required. We have developed a flash algorithm, which allows to program any common (Q)SPI flash, connected to the Quad-SPI interface of the NXP iMX6SX device. The flash algorithm is based on the Open Flashloader concept so it can easily exchanged if a pin configuration, different from the one used in the example flash algorithm, is required. In such cases, please get in touch with SEGGER directly (support@segger.com).
 
=== Example Implementation 1 (SABRE evaluation board) ===
 
As described above, the reference flash algorithm is based on the Open Flashloader and therefore needs to be added manually using a JLinkDevices.xml file. An example JLinkDevices.xml entry as well as the used pinout in the example flash algorithm is given below. This example assumes a Micron N25Q256A1 (32MB flash) connected to the Quad-SPI interface of the iMX6SX. For further information regarding the Open Flashloader and how to use the JLinkDevices.xml file, please refer to the J-Link User Manual (UM08001), chapter ''10 Open Flash Loader''.
 
 
====Quad-SPI Interface Pins====
 
The following QSPI interface is used on the iMX6SX SABRE evaluation board to interface the (Q)SPI flash.
 
{| class="wikitable"
 
 
|-
 
|-
 
! Alternate function !! Port / Pin
 
! Alternate function !! Port / Pin
Line 48: Line 24:
 
|}
 
|}
   
  +
==Multi-Core Support ==
====JLinkDevices.xml====
 
  +
Before proceeding with this article, please check out the generic article regarding Multi-Core debugging [[Multi-Core_Debugging | here]].<br>
<Database>
 
  +
The iMX6SoloX family feature a Cortex-A9 and Cortex-M4 core.<br>
<Device>
 
  +
In below, the debug related multi-core behavior of the J-Link is described for each core:
<ChipInfo Vendor="NXP"
 
  +
===Cortex-A9===
JLinkScriptFile="Devices\NXP\iMX6SoloX_Connect_CortexA9.JLinkScript"
 
  +
====Init/Setup====
Name="MCIMX6X1_A9"
 
  +
*Enables debugging
WorkRAMAddr="0x00900000"
 
  +
====Reset====
WorkRAMSize="0x00020000"
 
  +
*No Reset is performed.
Core="JLINK_CORE_CORTEX_A9"/>
 
  +
===Secondary core(s)===
<FlashBankInfo Name="QSPI Flash"
 
  +
====Init/Setup====
BaseAddr="0x70000000"
 
  +
*Enables debugging
MaxSize="0x02000000"
 
  +
====Reset====
Loader="NXP_iMX6SX_SABRE_Board_QSPI.elf"
 
  +
*No reset is performed.
LoaderType="FLASH_ALGO_TYPE_OPEN" />
 
</Device>
 
</Database>
 
*[[File:NXP_iMX6SX_SABRE_Board_QSPI_JLinkDevicesXML.zip]]
 
 
====Flash algorithm (*.elf)====
 
This file contains the program routines used by the J-Link DLL during flash programming.
 
*[[File:NXP_iMX6SX_SABRE_Board_QSPI_ReferenceFlashAlgorithm.zip]]
 
====IAR example project====
 
The example project contains a simple counter loop which is linked into the (Q)SPI flash memory region @ address 0x70000000. The project includes the JLinkDevices.xml file as well as the NXP_iMX6SX_SABRE_Board_QSPI.elf. It runs out-of-the-box. Please note, that IAR EWARM must at least use the J-Link DLL version V6.10m.
 
*[[File:NXP_iMX6SX_SABRE_Board_QSPI_IARV6405.zip]]
 
 
=== Example Implementation 2 ===
 
As described above, the reference flash algorithm is based on the Open Flashloader and therefore needs to be added manually using a JLinkDevices.xml file. An example JLinkDevices.xml entry as well as the used pinout in the example flash algorithm is given below. This example assumes a Spansion S25FL256S (32MB flash) connected to the Quad-SPI interface of the iMX6SX. For further information regarding the Open Flashloader and how to use the JLinkDevices.xml file, please refer to the J-Link User Manual (UM08001), chapter ''10 Open Flash Loader''.
 
 
====Quad-SPI Interface Pins====
 
The following QSPI interface is used to interface the (Q)SPI flash.
 
{| class="wikitable"
 
|-
 
! Alternate function !! Port / Pin
 
|-
 
| QSPI1A_DATA0 || IOMUXC_SW_MUX_CTL_PAD_QSPI1A_DATA0
 
|-
 
| QSPI2A_DATA1 || IOMUXC_SW_MUX_CTL_PAD_QSPI1A_DATA1
 
|-
 
| QSPI2A_DATA2 || IOMUXC_SW_MUX_CTL_PAD_QSPI1A_DATA2
 
|-
 
| QSPI2A_DATA3 || IOMUXC_SW_MUX_CTL_PAD_QSPI1A_DATA3
 
|-
 
| QSPI1A_SS0_B || IOMUXC_SW_MUX_CTL_PAD_QSPI1A_SS0_B
 
|-
 
| QSPI1A_SCLK || IOMUXC_SW_MUX_CTL_PAD_QSPI1A_SCLK
 
|}
 
 
====JLinkDevices.xml====
 
   
  +
==Evaluation Boards==
(see ''Example Implementation 2'' above)
 
  +
*[[NXP iMX6SX SABRE]]
   
  +
==Example Application==
====Flash algorithm (*.elf)====
 
  +
*[[NXP iMX6SX SABRE#Example_Project | NXP iMX6SX SABRE]]
This file contains the program routines used by the J-Link DLL during flash programming.
 
*[[File:NXP_custom_Board_FlashAlgorithm.zip]]
 

Latest revision as of 17:36, 23 February 2024

The NXP iMX6SoloX are multi-core MCUs composed of a Cortex-M4 and Cortex-A9 core.

Flash Banks

QSPI Flash

QSPI flash programming requires special handling compared to internal flash. For more information about this, please see the QSPI Flash Programming Support article.
J-Link supports the following pin configurations for iMX6SoloX:

Alternate function Port / Pin
QSPI2A_SS0_B IOMUXC_SW_MUX_CTL_PAD_NAND_ALE
QSPI2A_DATA2 IOMUXC_SW_MUX_CTL_PAD_NAND_CE0_B
QSPI2A_DATA3 IOMUXC_SW_MUX_CTL_PAD_NAND_CE1_B
QSPI2A_SCLK IOMUXC_SW_MUX_CTL_PAD_NAND_CLE
QSPI2A_DATA1 IOMUXC_SW_MUX_CTL_PAD_NAND_READY_B
QSPI2A_DATA0 IOMUXC_SW_MUX_CTL_PAD_NAND_WP_B

Multi-Core Support

Before proceeding with this article, please check out the generic article regarding Multi-Core debugging here.
The iMX6SoloX family feature a Cortex-A9 and Cortex-M4 core.
In below, the debug related multi-core behavior of the J-Link is described for each core:

Cortex-A9

Init/Setup

  • Enables debugging

Reset

  • No Reset is performed.

Secondary core(s)

Init/Setup

  • Enables debugging

Reset

  • No reset is performed.

Evaluation Boards

Example Application