IMXRT XIP - no FlexSPI transactions

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

IMXRT XIP - no FlexSPI transactions

Jump to solution
1,142 Views
KenG
Contributor II

I am having issues with Execute-In-Place on IMXRT1171.  The QSPI flash in our design is the IS25WP128-JBLE, same as 1170 EVK.  Verified that flash programming is successful using JLink.  But when entering XIP, I am not seeing any FlexSPI transactions on the bus.  Flash configuration block is the same as the 1170 EVK.  To keep things simple, I am using the hello world application which runs correctly on the 1170 EVK, but not our design.  What is logical debug steps for this issue where FlexSPI transactions are not initiated?

Issue described in the link below is very similar to what I am experiencing, but I don’t see root cause or solution.

https://community.nxp.com/t5/i-MX-RT/Imxrt-boot-mode-not-working/m-p/1391853

0 Kudos
Reply
1 Solution
1,125 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi @KenG ,

  So, your QSPI flash is the new chip, right?

   You need to enable the QE bit at first.

   Do you try to use the MCUbootUtility download the code in serial download mode, whether that boot works OK or not? Just like which I have mentioned in your mentioned link. As the MCUbootutility can help you enable the QE bit.

  Please try this point and confirm it at first.

  JLINK flashdriver in default, can't enable the QE bit, so if your FCB is using the quad mode, then it will be failed.

  Any updated information, please kindly let me know.

View solution in original post

0 Kudos
Reply
5 Replies
1,126 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi @KenG ,

  So, your QSPI flash is the new chip, right?

   You need to enable the QE bit at first.

   Do you try to use the MCUbootUtility download the code in serial download mode, whether that boot works OK or not? Just like which I have mentioned in your mentioned link. As the MCUbootutility can help you enable the QE bit.

  Please try this point and confirm it at first.

  JLINK flashdriver in default, can't enable the QE bit, so if your FCB is using the quad mode, then it will be failed.

  Any updated information, please kindly let me know.

0 Kudos
Reply
1,104 Views
KenG
Contributor II

Kerry – Thanks for the reply. We found one issue on our side. The hardware had boot mode set to load from eFuse (BOOT_MODE = 00) but efuse were not setup yet. We have corrected this now such that BOOT_MODE = 10. With this change we now see initial transaction on the FLEX SPI bus but then all transactions stop and IMXRT doesn’t load and execute code from flash memory.  What could be causing this?  This same binary works on EVK, so I have confidence in the binary loaded in flash.

Regarding QE bit...There is a QE bit, but how does the EVK examples handle the QE bit issue if its required.  Since the flash used is same as the one used on the EVK, I am expected everything to work with albeit reduced performance. Exactly how do I enable QE bit in FCB?  

0 Kudos
Reply
1,098 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi @KenG ,

  So, your boot have issues, to the BOOT, your BOOT_MODE should be BOOT_MODE = 10, which is the Internal Boot.

   You mentioned: Verifying that flash programming is successful using JLink

  How do you verify it, download or debug in flash?

 Do you try to use the serial download mode, download code with MCUBootUtility through the UART or the USB? whether that works or not, as the MCUbootutility can help you to enable the QE bit.

MCUbootutility tool:

https://github.com/JayHeng/NXP-MCUBootUtility/releases/tag/v4.1.1
the related user manual is:
https://github.com/JayHeng/NXP-MCUBootUtility

Wish it helps you!

Best Regards,

Kerry

 

0 Kudos
Reply
1,086 Views
KenG
Contributor II

@kerryzhou 

I verified flash programming was successful using JLink command line tool (JLineExe) by writing a large binary file (with random data) to flash memory and then reading back the data from flash in to a file and checking their checksum.

Regarding MCUbootutility, the hardware doesn’t expose UART1 unfortunately, but UART 11.  So I don’t think I use MCUbootutility with boot ROM.  However using evkmimxrt1170_flexspi_nor_polling_transfer_cm7 demo application built for OCM execution, I was able to confirm that

  1. On EVK QE bit set to 1 at power-up and persists.  That’s STATUS REGISTER.QE (bit 6).
  2. On our design QE bit is set to zero.

Using this same application (using flexspi_nor_enable_quad_mode() to specific), I attempted to set QE bit to 1, read back QE and verified it was indeed set to 1.  But on power-up, QE bit goes back to zero.  According to ISSI’s documentation the QE bit is Non-Volatile but somehow doesn’t persist for us. 

 

0 Kudos
Reply
1,078 Views
KenG
Contributor II

@kerryzhou 

Correction - QE bit is set to one and was persistent after using flexspi_nor_enable_quad_mode() in demo application. After QE bit set, I was able to get hello world application running from flash memory.  I will accept your initial recommendation as solution.  Thanks for your help.

To summarize:

1. Board was modified for GPIO override, i.e, BOOT MODE pins were corrected to ‘10 (binary).

2. QE bit was set to 1 using example application as flash memory default was 0.

0 Kudos
Reply