ST意法半导体
直播中

李泽坚

7年用户 1255经验值
私信 关注
[问答]

请问如何在OSPI闪存上对TouchGFX生成的资产进行版本控制?

硬件:
单片机STM32L4R9ZGJ6
OSPI 闪存 (512 Mb):MT35XL512ABA1G12
软件:
STM32Cube_FW_L4_V1.14.0
STM32CubeIDE 1.6.0
TouchGFX 4.13.0

我正在为存储在内存映射 OSPI 闪存中的 STM 应用程序代码和 GUI 资产进行无线设备固件更新。我希望能够独立于应用程序固件更新 OSPI GUI 资产,因为 GUI 资产可能并不总是更新,并且与 2 MB 的应用程序闪存大小相比可能高达 64 MB。
问: TouchGFX 是否会在生成的 GUI 源文件中创建一个版本或时间戳,我可以将其用于固件更新版本比较?
我的目标是能够将 OSPI 闪存中 GUI 资产的版本与存储在服务器上的版本进行比较,并仅在需要时进行更新。但是,我看不到 TouchGFX 是否或在何处用任何版本或日期信息标记生成的 GUI 代码。








回帖(1)

廖宇婷

2023-1-4 10:11:03
我找到了自己的解决方案。我比较了 OSPI 闪存中 GUI 资产的二进制大小和 crc,并将其与本地下载的文件进行了比较。这是一个足够独特的“版本”标识符来满足我的需要。

编辑:这实际上并不像我想象的那样有效。问题是您无法在首次设备启动时预填充 CRC 和大小,因为应用程序不知道 OSPI 中的 GUI 资产二进制文件有多大。
我发现一个更好的解决方案是使用 TouchGFX Designer 构建后步骤调用 SubWCRev.exe 生成一个带有#defines的 SVN 版本文件,可以被应用程序引用。然后,该应用程序包含以下内容:


  • const uint32_t m_gui_version __attribute__((section(".guiVersion"))) = SW_GUI_VERSION;

其中 SW_GUI_VERSION 是带有 SubWCRev 生成的 SVN 版本的#define 。.guiVersion 部分添加到 OSPI 开头的链接器中,如下所示:


  • /* GUI version - Make sure this is above ExtFlashSection  */
  •   .guiVersion ORIGIN(OCTOSPI) :
  •   {
  •     KEEP(*(.guiVersion)) /* Keep variable even if not referenced */
  •   } >OCTOSPI
  •   
  •   /* Constant data into "OCTOSPI" Memory Mapped Flash type memory (TouchGFX GUI generated assets) */
  •   ExtFlashSection :
  •   {
  •     *(ExtFlashSection ExtFlashSection.*)
  •     *(.gnu.linkonce.r.*)
  •     . = ALIGN(4);
  •   } >OCTOSPI

上面添加的代码和链接器所做的是,当首次使用 .hex 文件和带有外部 OSPI 加载程序的编程器对设备进行编程时,将 SVN 版本写入 OSPI 闪存的开头。我使用的编程器是 STM32CubeProgrammer 或 STM32CUbeIDE,因为它们都支持外部 OSPI 加载器。
举报

更多回帖

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