Replies: 3 comments 1 reply
-
Conext from GDB session:
INTR register shows:
|
Beta Was this translation helpful? Give feedback.
-
Hi @rtborg , It's also possible there is an issue with the FlexSPI serial root clock. I would try to confirm that clock. The FlexSPI will drive that clock out to external flash, and you could measure it to confirm the frequency. You will need the FlexSPI to try to access the external memory, so you may want to hack the driver to skip the DLL status check. Or another potential option is to use the Clock Out pins CCM_CLKO1 and CCM_CLKO2 to confirm internal clocks. Some of the clock mux options overlap with the FlexSPI clock sources. Best regards |
Beta Was this translation helpful? Give feedback.
-
Hi @rtborg , I also suspect the FlexSPI clock here. Your STS2 register read above of 0xb082b580 shows both the AREFLOCK and ASLVLOCK bits are clear. You mentioned you are "not explicitly setting" the clock. But it sounds like you have an MCUXpresso project without Zephyr working with this flash, which is likely using a different clock configuration. Confirming the FlexSPI hardware clock at the pins is ideal. But the fsl_flexspi driver does provide the CLOCK_GetRootClockFreq() API the app can use to read the frequency. I tested this on the MIMXRT1160-EVK board with Zephyr, and it confirmed this EVK clocks the QSPI flash at 132 MHz, which also matched what I measured at the pin.
Are you booting from FlexSPI1 and XIPing from this flash? It seems you might not be doing that yet. You refer to the If booting from FlexSPI, the ROM bootloader will configure the FlexSPI clock, and then configure the FlexSPI based on the Flash Configuration Block (FCB) stored in the external flash. When running Zephyr on the EVK, I found the ROM bootloader configures the FlexSPI clock for 132 MHz based on the setting below in the FCB in evkmimxrt1160_flexspi_nor_config.c.
I also see in Zephyr's clock_init() in soc.c, if the app does not boot from the FlexSPI flash but the FlexSPI node is enabled, then the FlexSPI clock source is a very low frequency. I expect that is not what you want for your flash. Comparing your flash IS25LX064 to the QSPI flash used on the MIMXRT1160-EVK, there are some differences related to the FlexSPI clock you should be aware of. First, the QSPI flash is Single Data Rate (SDR), while your flash supports double DDR. The FlexSPI serial root clock is the input clock to the FlexSPI peripheral provided by the SOC. The output clock SCLK is driven externally by FlexSPI to the memory. With SDR, these 2 clocks are the same frequency, 132 MHz configured by the ROM bootloader. With DDR, the output SCLK will be half the serial root clock frequency. So you will want to configure the serial root clock to be 2x the frequency you want driven to your flash. Another difference is the DQS signal. The QSPI flash on the EVK does not have a DQS pin, and this limits the SCLK frequency to 133 MHz on the RT1160, see datasheet snippet below. The ROM bootloader configures the FlexSPI for DQS loopback setting with But your flash does support the DQS pin, and potentially can clock at higher frequencies using Let us know what you find, best regards |
Beta Was this translation helpful? Give feedback.
-
I'm developing a custom driver for IS25LX064 in octal mode and I'm fairly certain the XIP
flexspi_nor_config_t
is working (confirmed by using in MCUXpresso). For using part no. IS25LX064, I've created a copy of theis25wp128
driver but with updated lookup table.When flashing and running the resulting binary, the execution reaches FLEXSPI_UpdateDllValue, and is stuck in a forever loop at line while ((base->STS2 & statusValue) != statusValue).
What can I do to investigate the reason for that happening?
Beta Was this translation helpful? Give feedback.
All reactions