ST意法半导体
直播中

飞毛腿452

8年用户 906经验值
擅长:电源/新能源
私信 关注
[问答]

使用Touchgfx在带有STM32F469II和RGB565格式的1024x600屏幕转换时出现硬故障要怎么解决?

我目前正在使用 Touchgfx 在带有 STM32F469II 和 RGB565 格式的 1024x600 屏幕的自定义板上开发一个项目。我还同时使用了外部 SDRAM 和闪存,并且 DMA2D 已激活。
最近,我一直遇到执行某些屏幕转换时发生硬故障的问题。错误总是发生,例如,当执行 2 个向上滑动过渡然后从左到右滑动过渡时。在此过程中的任何时间执行任何屏幕转换(包括“无”转换)时,它也可能随机发生。禁用 DMA2D 并不能解决问题。
进入硬故障处理程序时,故障分析器会为我们提供以下标志:

因此,通过查看标志,我相信这是一个总线故障,它转变为一个硬故障,尽管它没有提到数据访问是否准确。BFAR中存储的地址似乎没有更新,无助于定位故障源。
SP 寄存器指向地址 0x2002ae48,它在 TouchGFX 堆栈的堆栈范围内,连同我设置的所有其他任务,似乎没有其他任务(许多 0xA5A5A5A5 默认值仍然存在于所有栈)。我还可以通过查看“pxCurrentTCB”的值来补充,硬故障似乎是在 TouchGFX 任务开启时发生的。
PC 寄存器指向地址 0x26262030,它在内部 RAM 的范围之外,内部 RAM 停止在 0x20050000。
最后,LR 寄存器指向 0x809bbf9 处的闪存地址。进入反汇编,我们可以看到围绕该地址的以下指令:

因此,硬故障似乎是由屏幕转换前调用的函数“touchgfx::Drawable::invalidate()”触发的。但是,对我来说,由于在 invalidate() 函数内将任何断点放入源代码/汇编程序代码会停止代码的处理,因此永远不会到达,因此跟踪就此停止。
我还尝试增加/减少 touchGFX 任务可用的堆栈(低至 1024 字和高至 10240 字)但无济于事。
我对那种硬故障调试很陌生,所以如果有人能帮我解决这个错误,我将不胜感激。






回帖(1)

张琴

2022-12-15 14:53:57
到目前为止调试效果不错。
问题是否总是出现在同一屏幕上?你能在一个干净的、最小的项目上重现这个问题吗?如果是这样,它是否也发生在 ST 开发板上的类似最小项目中?不幸的是,离已知硬件越远,在不深入了解您的项目的情况下远程回答就越难。
重要的是要注意,仅仅因为硬故障发生在 TouchGFX 过程中,并不意味着导致硬故障的问题源是 TouchGFX。我建议隔离 TouchGFX 任务并逐渐重新启用其他任务,直到问题开始出现。
我唯一一次在更换屏幕时遇到硬故障,特别是问题与持有图形资产的不正确闪烁的 QSPI 有关。但它不是零星的,就像你的问题似乎是。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分