问题现象

配置完LCD后导致SDRAM写操作不稳定。连续写入4K数据,总是有十几个字节写入失败。
image.png

问题原因:

调试RGB LCD时,使用MCUXPresso配置工具配置LCDIF外设后,生成代码,pin_mux.c中的SEMC_DQS 引脚未设置SION。

  1. IOMUXC_SetPinMux( IOMUXC_GPIO_EMC_39_SEMC_DQS, 0U);

image.png
导致SDRAM写操作不稳定。

深入

IOMUXC_SetPinMux原型:

  1. /*!
  2. * @brief Sets the IOMUXC pin mux mode.
  3. * @note The first five parameters can be filled with the pin function ID macros.
  4. *
  5. * This is an example to set the PTA6 as the lpuart0_tx:
  6. * @code
  7. * IOMUXC_SetPinMux(IOMUXC_PTA6_LPUART0_TX, 0);
  8. * @endcode
  9. *
  10. * This is an example to set the PTA0 as GPIOA0:
  11. * @code
  12. * IOMUXC_SetPinMux(IOMUXC_PTA0_GPIOA0, 0);
  13. * @endcode
  14. *
  15. * @param muxRegister The pin mux register.
  16. * @param muxMode The pin mux mode.
  17. * @param inputRegister The select input register.
  18. * @param inputDaisy The input daisy.
  19. * @param configRegister The config register.
  20. * @param inputOnfield Software input on field.
  21. */
  22. static inline void IOMUXC_SetPinMux(uint32_t muxRegister,
  23. uint32_t muxMode,
  24. uint32_t inputRegister,
  25. uint32_t inputDaisy,
  26. uint32_t configRegister,
  27. uint32_t inputOnfield)
  28. {
  29. *((volatile uint32_t *)muxRegister) =
  30. IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(muxMode) | IOMUXC_SW_MUX_CTL_PAD_SION(inputOnfield);
  31. if (inputRegister)
  32. {
  33. *((volatile uint32_t *)inputRegister) = inputDaisy;
  34. }
  35. }

最后一个形参 inputOnfield 决定开启 SION 与否。

SION:

ENABLE时,该引脚在输出模式下同时开启输入通道。
image.png

为何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
image.png