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
2019-07-17 09:41
nowna 发表于 2019-3-15 20:44
估计是SDRAM的ReadBurst配置不对导致的。我也碰到过该问题,显示屏是800*600分辨率的,只要对SDRAM进行操作时,就会闪屏,操作数据量越大,闪得越严重。

把ReadBurst配置为FMC_SDRAM_RBURST_ENABLE就解决了。(以下是我用的是ST32Cube生成的代码)

谢谢您的回复!
我现在的配置也是这样的,read burst是使能的。
请教一下,我一直还没有使用DMA2D,会不会跟这个有关系?
DMA2D的意思是不是这样的:LTDC在初始化的时候设定了显存的地址(ltdc_buffer),DMA2D的源地址为另外一块与显存大小一样的存储区域(dma2d_buffer),DMA2D负责把dma2d_buffer中的数据传输到ltdc_buffer中,写数据的话是往dma2d_buffer中写的。请问我的理解对不?
您说的read burst问题我再排查一遍,网上也有跟您说的差不多的,说是把burst length由8改为4。都是集中在了read busrt相关的这部分,应该是很重要的一个配置。
(昨天把fmc相关的配置,从头到尾一个一个的确认了一下,目前还没发现什么问题,所以才回头考虑是不是DMA2D没有使能导致的,您说的问题点我会再去想想,再次感谢!)

一周热门 更多>