问题现象
配置完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