然而,当 DQS 引脚被占用时,就需要采用一些特殊的处理方法。本文所介绍的方法即为在此种情况下的一种可行方案。
一、DQS信号简介
首先我们需要了解什么是DSQ信号,DQS信号是数据采样信号,用于确保数据在高速传输过程中的正确性和稳定性。通过提供数据同步与时序控制、提高数据传输可靠性以及支持高速数据传输等功能
在IMXRT060RM参考手册中可知RXclock source有三种配置
1:Internal dummy readstrobe and loopbacked internally(MCR0[RXCLKSRC]==0)
2:Internal dummy readstrobe and loopbacked from DQS pad(MCR0[RXCLKSRC]==1)
3:Flash provided readstrobe(MCR0[RXCLKSRC]==3)
其中设置Internal dummy read strobe and loopbacked Internally这个模式正是本文需要设置的,数据手册中描述了本模式下节省了一个DQS引脚。使用这个模式的设置限制条件在IMXRT1060datasheet中有描述,最大时钟频率是60MHz。
二、硬件与软件准备
1:硬件:MIMXRT060-EVKB开发板
2:软件:NXP SDK(version24.12.0)Demo“evkbmimxrt1060_flash_component_nor_flexspi”
三、代码修改点
本文使用i.MRT1060开发板验证,不使用FlexSPI DQS信号,并将DQS引脚设置成GPIO输出使用。
我们主要修改xip文件夹下的evkbmimxrt1060_flexspi_nor_config.c文件中readSampleClkSrc和serialClkFreq这两个设置。
因导入的SDK例程关于演示如何使用NorFlash组件来擦除、编程和读取外部Nor Flash设备。
因此我们还需要修改软件部分包括:
1:设置N3引脚为GPIO输出。
2:修改hardware_init.c文件中代码.flexspiRootClk= 60000000;
3:修改fsl_flexspi_nor_flash.c文件中代码为flexspiConfig.rxSampleClock= kFLEXSPI_ReadSampleClkLoopbackInternally;
4: 修改app.h文件中代码为CLOCK_SetDiv(kCLOCK_FlexspiDiv,4);
此外,在 main 函数的最后添加相应代码。
完成上述修改后,将工程烧写进开发板,使用万用表测量 N3(FlexSPI_DQS)引脚电压,可观察到N3 引脚周期拉高拉低。串口终端显示Nor Flash 组件的擦除、编程和读取外部 Nor Flash 设备均成功,表明程序运行正常。
总结
本文详细阐述了在 i.MXRT 系列产品中使用外部 QSPI Flash 芯片且不使用 DQS 信号引脚的情况下,如何修改代码并进行验证的过程。在某些特定场景下,如 DQS 引脚被其他功能占用或存储器不需要高访问速度时,可参考本文介绍的方法修改代码,以确保工程正常运行。