大家好,
我目前正在使用 Touchgfx 在带有
STM32F469II、外部 RAM/FLASH、SD 卡和 1024x600 屏幕的定制板上开发一个项目。
我无法将帧缓冲区放在靠近每个的外部 RAM 中。现在,“TouchGFXHAL.cpp”中的以下配置运行良好:
setFrameBufferStartAddresses((void*)0xC0000000, (void*)0xC0200000, (void*)0xC0400000);
参数如下:
- 第一个地址是第一个帧缓冲区的开始。
- 第二个地址是第二个帧缓冲区的开始(用于多缓冲)。
- 第三个地址是动画存储空间的开始(用于屏幕之间的滑动转换)。
所有这些都放在自定义板的外部 RAM 空间中,从 0xC0000000 到 0xC07FFFFF (8 MB)。
这样,添加了第四个也是最后一个空间,它是动态位图缓存,用于存储 SD 卡中的图像,以使用 TouchGFX 在屏幕上显示。
然而,当我想最大化第四个空间以获得尽可能多的空间来存储 SD 卡中的图像时(例如,占用大量空间的背景),我在减少之间的空间时遇到了很多麻烦帧缓冲区,这是我到目前为止发现的:
- 设置好后,我可以毫不费力地将图片从 SD 卡下载到缓存中。
- 理论上,在我的 RGB565 配置中,每个帧缓冲区应该正好采用 (1024*600*16)/8 = 0x12C000,这意味着我应该能够像这样设置帧缓冲区:setFrameBufferStartAddresses((void*)0xC0000000, (void* )0xC012C000, (无效*)0xC0258000); 0x47C000 空间用于位图缓存存储。
- 我可以将第三个帧缓冲区设置为最小大小,这意味着位图缓存可以从 0xC052C000 开始,大小为 0x2D4000。
- 但是,一旦我减少任何其他帧缓冲区(甚至一个字节)之间的空间,屏幕上的图像就会开始抖动,有时当屏幕上的图像是静态的时会随机抖动,而在执行转换时会更多(任何他们)。
- 我限制帧缓冲区之间的空间越多,这种晃动似乎就越大(不是 100% 确定那个)。
- 删除第二个和/或第三个帧缓冲区不会改变任何东西(图像仍在摇晃)。
- 更改 LTDC 参数(门廊、同步等)似乎无法解决问题,只能移动屏幕上的图片区域。
- 调试时,如果我去观察每个帧缓冲区占用的内存,我确实可以看到不应该有数据的地方没有数据(即对于第一个帧缓冲区,屏幕的像素按预期停在0xC012C000并且没有数据直到下一个帧缓冲区位于 0xC0200000)。
我已经联系了屏幕制造商,他们告诉我这可能是因为 DMA2D 可以配置为 8/16/32 位访问,错误的对齐可以解释抖动。但是,由于他不太确定如何检查 DMA2D 访问大小以及是否真的是导致摇晃的原因,我想问一下是否有人遇到过这个问题,如果遇到过如何解决这个问题。