This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C129XNCZAD:从LCD模块的外部SDRAM读取数据时出现数据错误

Guru**** 2391415 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1098388/tm4c129xnczad-data-corruption-when-reading-from-external-sdram-for-lcd-module

部件号:TM4C129XNCZAD

大家好,

我正在使用TM4C129X微控制器的定制板驱动800x480 16位LCD。 我添加了外部8 MB SDRAM,并将其作为外部SDRAM连接到EPI。 我面临着很多问题。

我的系统时钟以120MHz运行,LCD时钟以24MHz运行,EPI以60MHz运行。

1.我的液晶屏不显示任何内容 ,直到我在LCD_DMACTL寄存器中将连拍大小设置为0x3或0x4。 当我不使用外部SDRAM时,我的液晶屏也使用0x2值。 我想知道HIS对屏幕有何影响,以及决定突发大小和DMA FIFO阈值的所有参数是什么。

2.如数据表所述: 使用带有EPI的液晶屏连接到外部存储器时,必须 通过在 EPI偏移0x01C处将1000.0000 字段编程为EPI地址图(EPIADDRMAP)寄存器中的0x1来选择外部代码地址空间ECPR。  当我使用SDRAM的1000.0000 地址时,屏幕上有很多数据损坏,但当我将地址的6000.0000 切换为SDRAM时,数据损坏明显下降,但仍然有像素显示不正确的值。 如何改进。

3.当我以60MHz的速度驱动EPI时,数据的破坏程度要比120MHz的EPI高得多。 但数据表建议它以60MHz运行。 为什么会发生这种情况?

4.总的来说,我想问一下如何减少数据损坏,以便我可以非常顺利地运行我的液晶屏。 是否有任何我可能忘记设置的注册表来解决我的问题。

5.使用外置SDRAM驱动液晶屏时,应如何将其连接到EPI:外置SDRAM或主机16总线。

提前感谢您的帮助。

  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,  

     我不是液晶显示屏和EPI的专家。 我将尽力回答您的问题。 在我回答您的问题之前,如果您使用的是Raster或LIDD模式,您能回答我吗? 您使用的液晶显示屏的品牌和型号是什么?

    1. 我的液晶屏不显示任何内容 ,直到我在LCD_DMACTL寄存器中将连拍大小设置为0x3或0x4。 当我不使用外部SDRAM时,我的液晶屏也使用0x2值。 我想知道HIS对屏幕有何影响,以及决定突发大小和DMA FIFO阈值的所有参数是什么。[/QUOT]

    我想从外部内存读取所需的时间比从内部内存读取所需的时间长。 因此,对于较大的突发量大小,0x3/0x4将更好地使DMA从外部存储器中突发更多数据。 您使用的是乒乓球模式吗? 请参阅下面的说明。 我建议您对DMA使用ping模式从两个不同的帧缓冲区中读取。  

    21.3 Tm2液晶屏DMA引擎
    LCD DMA引擎提供输出图形数据以不断刷新的功能
    通过中断或固件计时器,外部LCD显示屏,而不会增加CPU的负担。 它在上运行
    一个或两个帧缓冲区,在初始化期间设置。 使用两个帧缓冲区(ping-pong
    缓冲区)启用将当前视频帧输出到外部的同时操作
    显示并更新下一个视频帧。 在大多数情况下,ping-pong缓冲方法是首选方法
    应用程序。

    2. 如数据表所述: 当使用带有EPI的液晶屏与外部存储器连接时,必须 通过在 EPI偏移0x01C处将1000.0000 字段编程为EPI地址图(EPIADDRMAP)寄存器中的0x1来选择外部代码地址空间EADR。  当我使用SDRAM的1000.0000 地址时,屏幕上有很多数据损坏,但当我将地址的6000.0000 切换为SDRAM时,数据损坏明显下降,但仍然有像素显示不正确的值。 如何改进

    我的理解是SDRAM用于存储帧缓冲区。 如果是这种情况,为什么要配置SDRAM以获取代码。 您是否应该仅将SDRAM用于数据? 换言之,从 内部闪存运行代码并从SDRAM读取帧缓冲区。  

    3. 当我以60MHz的频率驱动EPI时,数据损坏比120MHz的EPI更容易。 但数据表建议它以60MHz运行。 为什么会发生这种情况?[/QUOT]

    如果使用120MHz,则违反EPI计时。 请参阅下文。  

    4. 总的来说,我想问一下如何减少数据损坏,以便我可以非常顺利地运行我的液晶屏。 是否有任何我可能忘记设置的寄存器,以便解决我的问题。[/QUOT]

    请回答我所回答的上述问题,看看您是否可以改进问题。  

    5.使用外置SDRAM驱动液晶屏时,应如何将其连接到EPI:外置SDRAM或主机16总线。

    [/引述]

    如果您有SDRAM内存,则需要为SDRAM接口配置EPI。 请参阅 C:\ti\tivaWare_C_Series-VSDRA.EPI\Examples\Peripherals\EPI\SDRAM.c中的示例2.2 0.295

    [/quote]
    [/quote][/quote][/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否有任何示例代码可以帮助我了解如何实施乒乓球模式。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我初始化EPI模块的方式。 我是否需要设置其他寄存器以使其平稳运行。 我正在使用光栅模式,我的液晶屏是16bpp。  

    sysctl_RCGCEPI_R = 1;
    EPI0_BAUD_R = 1;
    EPI0_CFG_R = 0x0.0011万;
    while (EPI0_STAT_R和(1<6));
    EPI0_SDRAMCFG_R =(0x3<30)|(748<16)|(1);
    EPI0_ADDRMAP_R = 0x009;
    RAM =(uint16_t *) 0x6000万;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    epi此407.0133万此模块是如何初始化的。 我是否需要设置其他寄存器以使其平稳运行。 我正在使用光栅模式,我的液晶屏是16bpp。  [/引述]

    我真的没有发现SDRAM的EPI设置有任何问题。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在使用ping模式时,有任何方法可以将帧缓冲区0和帧缓冲区1之间的延迟设置为。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

     首先,我想知道乒乓球模式是否对您的情况有所帮助。 您可以确认吗?

    0在407.282万在使用407.282万使用帧40.7281万帧和缓冲器的任何方式中设置帧的情况下设置帧缓冲器的任何帧[引用]

     我不这么认为。 ping模式传输期间的帧缓冲区0/1由内置DMA模块执行。 CPU只能进行干预来启用或禁用它。 为什么要在帧缓冲区0和1之间插入延迟? 转接是否太快? 如果速度太快,为何会有问题呢? 或者您写入LCD界面的速度太慢?

     当帧缓冲区0或1传输完成时,将生成中断,并相应地设置EOF0或EOF1。  

    帧传输完成:当一帧数据完全传输时,完成位输入
    已设置LCD中断原始状态和设置寄存器(LCDRISSET)寄存器。 此位已清除
    通过禁用栅格控制器(清除LCD栅格控制中的LCDEN位
    (LCDRASTRCTL)寄存器)。 液晶屏中断原始状态和设置中的EOF0和EOF1位
    寄存器(LCDRISSET)寄存器被相应地设置。

     请检查您是否存在运行不足错误或任何类型的错误? 请确认您的LCDCP确实以正确的频率运行。 您现在的像素时钟(LCDCP)频率是多少?

    输出FIFO欠运行:当DMA引擎无法跟上时,将发生此中断
    LCD消耗的数据速率(由LCDCP确定。) 这可能是由于
    系统内存吞吐量问题或LCDCP设置不正确。 LCD中断中的FIFO位
    发生此错误时,将设置原始状态和设置寄存器(LCDRISSET)寄存器。 这位是
    通过禁用栅格控制器(即清除LCD栅格控制中的LCDEN位)来清除
    (LCDRASTRCTL)注册。

    最后,我知道数据表包含以下注释。 但是,我不明白为什么需要同时为代码空间配置EPI模块。 请参阅下文。 如果您将EPI ECADR设置为0x1与0x0,您会发现LCD操作中存在任何差异吗?

    注:使用带有EPI的LCD与外部存储器连接时,需要输入外部代码地址
    必须通过在EPI中将ECADR字段编程为0x1来选择1000.0000 space (ECADR空间)
    地址映射(EPIADRMAP)在EPI偏移0x01C处注册。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    否,在pong模式下,我仍然收到下溢错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的帧缓冲区有多大?  

    您的像素时钟频率是多少?

    您能否测量一下读取外部SDRAM上的帧缓冲区所需的时间与写入LCD接口所需的时间。  

    对于实验,我还建议您不要使用液晶屏,而是关注SDRAM访问,并确保以尽可能快的吞吐量运行,以便从SDRAM中检索数据。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的帧缓冲区是800x480x4字节长,我的像素时钟频率是24MHz。

    我计算eofb0中断和rrasterdone中断之间的时间,这是25us,而两个rrasterdone中断之间的时间是2.1201万us。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我花了100毫秒完成所有计算和准备1帧。

    我应该如何配置这些内容,以便不会遇到任何下溢 错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    </s>407.396万

    我的帧缓冲区是800x480x4字节长,我的像素时钟频率是24MHz。

    [/引述]

    以60MHz或高于24MHz运行像素时钟是否有帮助?

    rabs@rrae21s完成407.396万完成两个中断的时间和时间的中断的时间

    您能否绘制一个时间图表,以便我了解具体情况?

    还有一个问题是,您是尝试在液晶屏上创建视频还是仅创建静态图像?

    完成4099.21万完成所有计算任务。

    我认为时间图表会很有帮助。 显示准备一个帧所需的时间,读取SDRAM上的一个帧缓存所需的时间以及完成写入LCD面板所需的时间。  

    [/quote]