问题现象
配置完LCD后导致SDRAM写操作不稳定。连续写入4K数据,总是有十几个字节写入失败。
问题原因:
调试RGB LCD时,使用MCUXPresso配置工具配置LCDIF外设后,生成代码,pin_mux.c中的SEMC_DQS 引脚未设置SION。
IOMUXC_SetPinMux( IOMUXC_GPIO_EMC_39_SEMC_DQS, 0U);

导致SDRAM写操作不稳定。
深入
IOMUXC_SetPinMux原型:
/*!* @brief Sets the IOMUXC pin mux mode.* @note The first five parameters can be filled with the pin function ID macros.** This is an example to set the PTA6 as the lpuart0_tx:* @code* IOMUXC_SetPinMux(IOMUXC_PTA6_LPUART0_TX, 0);* @endcode** This is an example to set the PTA0 as GPIOA0:* @code* IOMUXC_SetPinMux(IOMUXC_PTA0_GPIOA0, 0);* @endcode** @param muxRegister The pin mux register.* @param muxMode The pin mux mode.* @param inputRegister The select input register.* @param inputDaisy The input daisy.* @param configRegister The config register.* @param inputOnfield Software input on field.*/static inline void IOMUXC_SetPinMux(uint32_t muxRegister,uint32_t muxMode,uint32_t inputRegister,uint32_t inputDaisy,uint32_t configRegister,uint32_t inputOnfield){*((volatile uint32_t *)muxRegister) =IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(muxMode) | IOMUXC_SW_MUX_CTL_PAD_SION(inputOnfield);if (inputRegister){*((volatile uint32_t *)inputRegister) = inputDaisy;}}
最后一个形参 inputOnfield 决定开启 SION 与否。
SION:
为何DQS会影响SDRAM读写
在 RT1052 中包含一个数据选通信号 SEMC_DQS,它是 DDR 类型的 SDRAM 中才有的信号,功
能主要用来在一个时钟周期内准确地区分出每个传输周期,并便于接收方准确接收数据。它是双
向的,在写入时它用来传送由主控芯片发来的 DQS 信号,读取时,则由 SDRAM 芯片生成 DQS
向主控发送,完全可以说,它就是数据的同步信号。
RT1052 支持驱动 DDR 类型的 SDRAM,然而它却保留了 SEMC_DQS 信号(它是 i.MX 6 系列芯片的特性),而且这会影响到我们正常控制SDRAM 的信号。为了能够正常地使用高频率控制 SDRAM,在设计硬件时,必须使 RT1052 的这个 SEMC_DQS 引脚悬空,然后在软件配置方面必须开启该引脚的 SION 功能,而且要把 SEMC 的模块控制寄存器 MCR[DQSMD] 位置 1,即配置为使用 DQS 引脚的读选通信号(开发时我们会使用结构体进行配置或通过DCD进行配置)。
在MCUX中可在下图所示 软件输入启动项目中选择enable
