硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3077|回复: 16
收起左侧

请教STM32外挂SDRAM的读写冲突问题

[复制链接]

20

主题

92

回帖

152

积分

初级会员

积分
152
发表于 2018-3-5 15:01:40 | 显示全部楼层 |阅读模式


主控为STM32F429BI,外挂32位SDRAM,请教一下:当移植了FreeRTOS和ucGUI后,在SDRAM中开辟一片存储区域作为显存,FreeRTOS的显示任务不断往SDRAM写入数据,而STM32的LTDC模块从SDRAM读出数据并传输到LCD上显示,这之间是不是有冲突呢?因为现在LCD屏幕有跳动现象,我是这么想的,显示任务不断的往SDRAM写入数据,必然触发SDRAM的写入时序,而LTDC在从SDRAM读取数据时必然触发读出时序,这两者之间如果没有互斥信号量处理的话,应该会导致时序异常。没有这方面的经验,不知道我的想法是否正确,还请过往的大侠指点迷津,从整体的概念上指点一下就行,谢谢了!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2018-3-5 15:25:29 | 显示全部楼层
LTDC读数据不用用户去管,这个是硬件自动处理的,不存在冲突问题,只是占有SDRAM带宽,不存在冲突。

你的LCD跳动,应该是其它问题,从以下几个方面找:
1. 硬件设计问题,有干扰,特别是使用软排线的时候,在售后的问题中,最后排查是硬件的问题的,最多。
2. 时钟问题,降低LTDC时钟,还有SDRAM以及LTDC所以涉及到的GPIO,降低其IO速度模式。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-5 22:31:37 | 显示全部楼层
eric2013 发表于 2018-3-5 15:25
LTDC读数据不用用户去管,这个是硬件自动处理的,不存在冲突问题,只是占有SDRAM带宽,不存在冲突。

你 ...

谢谢您的回复!
你说的两个排查点我这样测试过,单独显示一张静态图片是正常的(没有“写SDRAM”的操作),但是用ucgui叠加显示“hello, world!”后就异常了,因为这时有了“写SDRAM”的操作。
确实是你说的意思,因为是外扩的SDRAM,LTDC虽然是DMA自动传输,但是毕竟要经过FMC接口去读取显示数据,这样可能就会和ucgui“写SDRAM”的时序有冲突了。
请问用什么机制解决这样的带宽冲突呢?再次感谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2018-3-6 00:09:15 | 显示全部楼层
tovax 发表于 2018-3-5 22:31
谢谢您的回复!
你说的两个排查点我这样测试过,单独显示一张静态图片是正常的(没有“写SDRAM”的操作 ...

FMC是硬件接口,每次读写都是一次完整的硬件时序,不存在冲突问题,软件模拟才有冲突问题。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-6 10:04:53 | 显示全部楼层
eric2013 发表于 2018-3-6 00:09
FMC是硬件接口,每次读写都是一次完整的硬件时序,不存在冲突问题,软件模拟才有冲突问题。

好的,我再排查一下,有结果后回来给你回复!
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
发表于 2018-3-6 10:42:02 | 显示全部楼层
tovax 发表于 2018-3-5 22:31
谢谢您的回复!
你说的两个排查点我这样测试过,单独显示一张静态图片是正常的(没有“写SDRAM”的操作 ...

读写SDRAM不会有冲突  数据线地址线等长了吗 是不是你布线有问题? 或者硬件连接上某些线有问题
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-8 16:37:47 | 显示全部楼层
hanzixiangel 发表于 2018-3-6 10:42
读写SDRAM不会有冲突  数据线地址线等长了吗 是不是你布线有问题? 或者硬件连接上某些线有问题

谢谢您的回复!硬件应该是没有问题的,现在是在开发板上测试的。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-8 21:05:09 | 显示全部楼层
        while (1) {
                vTaskDelay(1000);
                // GUI_DispStringAt("Hello, World!", 200, 200);
                lcdisplay_red();
                LTDC_LayerAddress(LTDC_Layer1, SDRAM_BANK1_ADDR + AT800480_WIDTH * AT800480_HEIGHT * 0);
                LTDC_LayerPosition(LTDC_Layer1, 0, 0);
                LTDC_ReloadConfig(LTDC_IMReload);
        }

以上是LCD任务的代码:
GUI_DispStringAt("Hello, World!", 200, 200); ===> ucgui往SDRAM写入字符串
lcdisplay_red(); ===> 往SDRAM写入半屏红色
两个写入函数任选其一,LCD显示就会跳动;
如果没有这两个写入函数的话,显示正常。
我猜想是,LTDC周期性的通过DMA从SDRAM读取数据后显示,一旦有写入动作而没有互斥处理的话,势必会出现时序上的冲突。
不知道这样分析是否正确,还请大家帮忙,谢谢了!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2018-3-9 02:34:50 | 显示全部楼层
tovax 发表于 2018-3-8 21:05
while (1) {
                vTaskDelay(1000);
                // GUI_DispStringAt("Hello, World!", 200, 200);

这个跟LCD没关系了,属于emWin的多任务处理了,你的显存就一个,多个任务往显存里面写,肯定有冲突啊。

评分

参与人数 1金币 +20 收起 理由
tovax + 20

查看全部评分

回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-9 09:25:13 | 显示全部楼层
eric2013 发表于 2018-3-9 02:34
这个跟LCD没关系了,属于emWin的多任务处理了,你的显存就一个,多个任务往显存里面写,肯定有冲突啊。

谢谢您的回复!代码里是有两个写入函数,但其中一个是屏蔽的,只有一个写入任务在工作,测试结果是只要周期性的往显存写入数据就会出现跳动。
初始化的背景色是红色,跳动时出现不稳定的绿色、蓝色,貌似是红色字节移位了。
回复

使用道具 举报

4

主题

117

回帖

129

积分

初级会员

积分
129
发表于 2018-3-9 10:12:04 | 显示全部楼层
LCD驱动是不是有问题,还有就是移植这块需要使用多任务的例程。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-10 09:59:48 | 显示全部楼层
hance2000 发表于 2018-3-9 10:12
LCD驱动是不是有问题,还有就是移植这块需要使用多任务的例程。

谢谢您的回复!
LCD驱动是没有问题的,用“加勒比海盗”的真彩图片测试静态显示。
正如你所说,“还有就是移植这块需要使用多任务的例程”,LTDC的DMA传输、LCD显存的数据写入,需要有两个任务互斥处理。
目前的测试结果是:在GUI_DispStringAt前把LTDC禁止掉,写入数据之后把LTDC使能,这样就没有了跳动,但是由于LTDC使能后重新加载显示数据,显示会有明显的闪动刷屏现象。
那么,我的问题可能是这样的,LTDC的使能和禁止应该不合理,不能用LTDC_Cmd(DISABLE);LTDC_Cmd(ENABLE);这样的语句来操作吧,只要能把DMA传输关掉,把FMC的接口干净的留给GUI来写入数据应该会有不错的效果。
现在还没找到合理的暂停LTDC数据传输的方法,还请各位多多交流。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-10 13:10:01 | 显示全部楼层
跳动:红色背景色,但是间歇性的跳出部分绿色、蓝色
闪动:红色背景色,但是会像幕布那样刷屏,没有其他杂色
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-10 13:23:55 | 显示全部楼层
这样的情况是不是不该去禁止LTDC,而是禁止对应的显示层呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2018-3-10 13:41:38 | 显示全部楼层
此贴就交流这么多吧,不再讨论
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-10 14:10:09 | 显示全部楼层
eric2013 发表于 2018-3-10 13:41
此贴就交流这么多吧,不再讨论

为什么?
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-3-10 14:20:58 | 显示全部楼层
谢谢各位的耐心交流
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-20 01:14 , Processed in 0.268951 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表