STM32外挂SDRAM的读写存在冲突

2019-07-14 13:38发布

主控为STM32F429BI,外挂32位SDRAM,请教一下:当移植了FreeRTOS和ucGUI后,在SDRAM中开辟一片存储区域作为显存,FreeRTOS的显示任务不断往SDRAM写入数据,而STM32的LTDC模块从SDRAM读出数据并传输到LCD上显示,这之间是不是有冲突呢?因为现在LCD屏幕有跳动现象,我是这么想的,显示任务不断的往SDRAM写入数据,必然触发SDRAM的写入时序,而LTDC在从SDRAM读取数据时必然触发读出时序,这两者之间如果没有互斥信号量处理的话,应该会导致时序异常。没有这方面的经验,不知道我的想法是否正确,还请过往的大侠指点迷津,从整体的概念上指点一下就行,谢谢了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
kingnet_52040
1楼-- · 2019-07-14 23:49
wang222221 发表于 2019-3-15 17:22
如此操作冲突是必然的,而且同时存在两方面的冲突:内存带宽争夺和 SDRAM 页面访问争夺。

FMC 的每一个管脚都只有一定量的通信带宽。如果两个 DMA 都在访问同一块内存,这些访问就需要争抢通信带宽,发生冲突。

STM32一般的内部SRAM只有几百KB,用来做显示缓存怕是不够哦,这款STM32F429BI只有256KB的SRAM,以800*480的8寸屏(RGB888)计算,800 * 480 * 4就超出了SRAM的范围。
huazhe
2楼-- · 2019-07-15 03:27
写SDRAM 和 LTDC从SDRAM读数据要考虑互斥错开操作。
wang222221
3楼-- · 2019-07-15 08:02
 精彩回答 2  元偷偷看……
kingnet_52040
4楼-- · 2019-07-15 11:46
wang222221 发表于 2019-3-15 17:58
如果处理得当,大量的显示数据可以直接从 Flash 里面 DMA 出去。这样的话依然可以支持 800x480 但 SRAM 占用就不多了。

从flash读出,然后在LCD上显示,这个是没有问题的,但是不断对flash进行写入操作是不现实的吧。
kingnet_52040
5楼-- · 2019-07-15 14:45
huazhe 发表于 2019-3-15 17:50
写SDRAM 和 LTDC从SDRAM读数据要考虑互斥错开操作。

我也是这么考虑的,移植的freertos和ucgui,我是这么想的:在ucgui的最底层描点函数和ltdc的dma传输结束之间互斥操作,这两天有点其他事情,过两天我试试,到时候还请多多指教。
wang222221
6楼-- · 2019-07-15 16:11
kingnet_52040 发表于 2019-3-15 18:05
从flash读出,然后在LCD上显示,这个是没有问题的,但是不断对flash进行写入操作是不现实的吧。

把窗口分块处理:整个生命周期里面不动的内容放在 Flash 里面,需要运行时填充的数据放在 RAM 里面。

一周热门 更多>