IMXRT1011 custom board bringup problem

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

IMXRT1011 custom board bringup problem

Jump to solution
607 Views
thorgrimner
Contributor II

We are unable to boot our custom IMXRT1011, based on IMXRT1010-EVK as reference.

On our board the external flash is successfully programmed.

Flash content is verified during programming and available at address 0x60000000 during run time when suspended.

But the application is never reached - instead, a small loop of 23 instructions run in ROM at 0x0020EB00.

Programming same application to EVK-board works with identical programming procedure.

Boot configuration indicates correct boot configuration, same as EVK when working:

SRC_SBMR1
    BOOT_CFG1   = 0x0
    BOOT_CFG2   = 0x0
    BOOT_CFG3   = 0x0
    BOOT_CFG4   = 0x0
SRC_SBMR2
    SEC_CONFIG  = 0x1
    BT_FUSE_SEL = 0x0
    BMOD        = 0x2

Our measurements:

VDD_SOC_IN, 3 pins, are stable 1.1V

POR_B status is stable 3.3V

RTC clock is stable 32.8kHz

XTAL clock is stable 24MHz

VDD HIGH IN, VDD SNVS IN, VDDA, 3 pins, are stable 3.3V

VDD HIGH CAP is stable at 2.5V

SNVS CAP is stable at 1.1V

No USB connection is available, SWD only.

Can you help?

0 Kudos
1 Solution
548 Views
thorgrimner
Contributor II

Thank you for your response - we managed to solve this only a few hours ago.

The problem was caused by the AT25SF128A flash memory not being correctly set up, which we had no idea needed to be done and mostly stumbled across in a forum, by chance.

These flash memories have a QE (quad mode enable) bit in the non-volatile status register 2 that needs to be set for programs to be run from the flash, at least when using the default flash configuration provided by the SDK.

This bit defaults to 0 in new memory chip but on the MIMXRT1010-EVK its chip has had this bit set at some point during production.

Neither the P&E Multilink or Segger JLink interfaces for MCUXpresso have the facilities to program these registers from the IDE, as far as we can tell.

It might be noteworthy that the JLink will program the flash regardless of how the bit is set, likely due to a more intelligent algorithm, while the MultiLink is only able to program the external flash once this bit has been set. We were using the JLink which is why we were able to not just program and verify, but also view the memory contents. The Multilink would connect but otherwise do neither.

Overall, it seems expected by various pieces of software and hardware that this bit is set by the user and nevertheless we found references to, and documentation regarding, this quite difficult to come by.

The easiest way we found to program this bit was to use File>New>Import SDK example to instantiate the driver_examples/flexspi/flexspi_nor_polling_transfer example with "Link application to RAM" checked, and run it.

This program just so happens to include a step that programs the QE bit in the appropriate status register.

View solution in original post

0 Kudos
2 Replies
554 Views
Miguel04
NXP TechSupport
NXP TechSupport

Hi @thorgrimner 

I've been looking into your problem, the issue could be cause by the security boot settings (Reference manual 9.3.6 Boot security settings ), I recommend you to see the AN12681 to try to find something you have missed. Also, see Figure 9-1. Boot flow from the reference manual.

Let me know if this helps you, I'll be looking more into it.

Best Regards, Miguel.

0 Kudos
549 Views
thorgrimner
Contributor II

Thank you for your response - we managed to solve this only a few hours ago.

The problem was caused by the AT25SF128A flash memory not being correctly set up, which we had no idea needed to be done and mostly stumbled across in a forum, by chance.

These flash memories have a QE (quad mode enable) bit in the non-volatile status register 2 that needs to be set for programs to be run from the flash, at least when using the default flash configuration provided by the SDK.

This bit defaults to 0 in new memory chip but on the MIMXRT1010-EVK its chip has had this bit set at some point during production.

Neither the P&E Multilink or Segger JLink interfaces for MCUXpresso have the facilities to program these registers from the IDE, as far as we can tell.

It might be noteworthy that the JLink will program the flash regardless of how the bit is set, likely due to a more intelligent algorithm, while the MultiLink is only able to program the external flash once this bit has been set. We were using the JLink which is why we were able to not just program and verify, but also view the memory contents. The Multilink would connect but otherwise do neither.

Overall, it seems expected by various pieces of software and hardware that this bit is set by the user and nevertheless we found references to, and documentation regarding, this quite difficult to come by.

The easiest way we found to program this bit was to use File>New>Import SDK example to instantiate the driver_examples/flexspi/flexspi_nor_polling_transfer example with "Link application to RAM" checked, and run it.

This program just so happens to include a step that programs the QE bit in the appropriate status register.

0 Kudos