本帖最后由 IFX新闻官 于 2025-4-12 02:27 编辑
最近在 英飞凌开发者论坛中注意到,许多开发者都在讨论和提问关于如何实现基于TRAVEO™ T2G系列芯片的OTA(Over-The-Air,远程升级技术)更新应用。为了帮助大家更好地基于TRAVEO™ T2G系列芯片的Dual Bank方案架构实现OTA功能,本文将简要介绍其原理,并提供相关的资源和示例代码,希望能够为大家提供参考和帮助。(作者:英飞凌 Yang Jannie)
OTA(Over-the-Air) 是一种通过无线通信协议远程更新设备固件的软件更新方法,在现代智能汽车和联网汽车的快速发展下,在汽车应用中越来越受到重视。通过OTA更新,设备制造商可以在设备部署后修复漏洞、添加新功能或优化性能,而无需物理接触设备。它既可以提升用户体验和安全性,又降低维护成本和环境影响做出贡献,为汽车行业的持续发展和创新提供了强大支持。
TRAVEO™ T2G 系列支持双区(Dual Bank)模式,允许RWW(Read While Write)功能。Dual Bank 是一种支持OTA更新的存储架构,它使用两个独立的存储区来确保固件更新的可靠性和安全性。Dual bank技术通常涉及A/B分区机制,在OTA更新过程中,新固件会先被下载到备用分区,下载完成后,系统会在下次启动时从新分区启动。客户可以基于其特殊的dual bank 模式进行相同位置的固件更新,提升了固件更新的灵活性和效率。
参考文档
TRAVEO™ T2G Dual Bank划分 TRAVEO™ T2G芯片的闪存分为Code Flash和Work Flash。
在Dual Bank模式下, Code Flash被划分为两个独立存储体(Logical Bank 0和Logical Bank 1),在不同mapping下,存储体地址互换,以支持动态重映射。以下图CYT2B7芯片为例:
Mapping A: Logical Bank 0地址: 0x1000_0000-0x1008_8000,
Logical Bank 1地址: 0x1200_0000-0x1208_8000 Mapping B: Logical Bank 0地址: 0x1200_0000-0x1208_8000,
Logical Bank 1地址: 0x1000_0000-0x1008_8000
从上图CYT2B7芯片的memory map可见,TRAVEO™ T2G系列的code flash可以分成Single Bank 模式和Dual Bank 模式。通过配置FLASHC_FLASH_CTL寄存器的MAIN_BANK_MODE位与MAIN_MAP位实现对模式的控制。
当然,Work Flash也可配置为Single Bank模式或Dual Bank模式,可通过FLASHC_FLASH_CTL寄存器的WORK_BANK_MODE位与WORK_MAP位进行配置。需要注意的是这几位在复位时都会被清除。ROM boot和flash boot不会改变这些配置。换句话说,TRAVEO™ T2G系列MCU在 Arm® Cortex®-M0+应用程序启动之前总是以Single Bank模式启动。应用程序需要根据实际需求手动配置Dual Bank功能。
TRAVEO™ T2G Dual Bank模式优势 高可靠性:dual bank结构允许在一个bank进行更新的同时,另一个bank继续执行当前的固件。这种方式确保了更新过程中设备的正常运行,避免了因更新失败导致的系统崩溃。 无缝切换:更新完成后,系统可以无缝切换到新固件,无需长时间的停机或重启过程。 容错能力:如果在更新过程中出现问题,系统可以回滚到旧版本固件,保证设备的稳定性和可靠性。 减少停机时间:由于更新可以在后台进行,设备的停机时间大大减少,提高了设备的可用性。 安全性:TRAVEO™ T2G系列MCU配备硬件安全模块,提供强大的加密和认证机制,确保OTA更新的安全性和完整性。
更新固件实现流程 固件更新:
假设CM4/7用户程序代码运行在Bank 0即处于Mapping A映射时,接收到通过车辆局域网(如CAN FD或以太网)发送的固件更新请求和数据。 CM0+用户程序开始擦除整个Bank 1的code flash区域和特定的work flash区域,其中work flash区域需要放置remap参数,用于标识下一次复位后需要设置Mapping A还是Mapping B,即最新程序存储于bank 0还是bank 1中。在此示例中,将更新bank 1的code flash,故而下一次复位后将使用Mapping B。 完成flash擦除后,CM0+用户程序将相同的CM0+用户程序代码复制到Bank 1,并编程新的CM4/7用户程序代码。需要注意的是,以CYT2B7芯片为例,无论是运行在Mapping A需要更新bank 1的程序还是运行在Mapping B需要更新bank 0,更新地址皆处于0x1200_0000-0x1208_8000,而非0x1000_0000-0x1008_8000。 最后,CM0+更新work flash中的remap参数,以便在下一次复位时切换应用程序代码。
系统启动与切换
在复位后,CM4/7和CM0+开始执行ROM boot程序。CM4/7进入等待中断(WFI)状态,直到CM0+使能它。 CM0+完成ROM boot和flash boot后,执行其用户程序代码。在CM0+用户程序配置FLASHC_FLASH_CTL 寄存器MAIN_BANK_MODE位为dual bank模式,并读取work flash中的remap参数。 如果从work flash读取的数据是预期值,CM0+会跳转到SRAM代码,然后通过设FLASHC_FLASH_CTL 寄存器的MAIN_MAP位将code flash 的mapping切换为“Mapping B”。需要注意的是,改变这一位将改变flash的映射,故必须将此部分切换mapping操作的代码置于SRAM中执行,而不能继续在flash中执行。 在完成切换操作后,code flash bank 0的地址将与code flash bank 1的地址交换。 CM0+跳回到code flash中执行程序并使能CM4/7。CM4/7和CM0+运行程序地址不变,但此时执行的已是bank 1中的新代码。
请访问以下链接下载相关示例代码:
如果您在实现过程中遇到问题,可以尝试在社区中寻找答案,可能已经有人提出了相同的困扰并得到了解决。
Community热帖举例:
如果您还未曾使用过TRAVEO™ T2G 系列芯片,可以点击这里快速入门:
|