当前位置: 首页 > news >正文

Zynq multi boot及网口远程更新开发

开发环境

       ZU11EG+VITIS2019, FreeRTOS+LWIP,flash启动模式,flash是两个16MB并行组成的32MB。

目标

通过以太网接口,实现设备的远程更新;

开发过程记录

   一开始是按照单个boot进行的,先通过UDP将boot发送到下位机,并存储在emmc中,然后再进行flash更新,每次更新都会将flash全部擦除,然后将boot写入flash,这种方案是可行的,但是存在风险,就是数据传输或者更新flash的时候如果出现错误,那么就必须通过jtag进行刷机,因为没有备份的boot程序,而且在测试过程中确实遇到过这种情况,因此单boot方案在实际中不可行,所以改为multiboot 方案。

       在开发multi boot方案之前需要对zynq的启动过程有一定的了解,详细启动过程可以参考UG1085/UG1137, 关键就是下面三个图,

 

这里简单介绍一下,在芯片出厂的时候内部PMU里面会固化一个BootRom,算是芯片自带的boot程序,这是整个芯片上电后最先运行起来的程序,这个程序运行起来以后会在flash里面间隔32KB寻找有效的boot header,找到后就load FSBL,随后FSBL就在RPU上运行起来,配置PS,PL等,将程序搬到内存中,然后就handoff,交给用户程序,这时系统就完成了启动过程。

       我们实现multi boot关键就是利用了BootROM能自动间隔32KB寻找有效boot header这个功能,我们将不用更新的程序放在后面,预留好空间,这个不用更新的程序,赛灵思叫做golden image,作用就是当我们远程更新过程中出现数据错误的时候,保证设备能够启动起来,并且能够进行二次更新,所以这个golden image 就是个兜底的作用, golden image 至少要具备程序更新功能,可以增加软件复位,更新后不断电就可以运行新程序。

    制作和下载golden image注意事项,

首先是这个golden image不要太大,不要带着PL的bit文件,否则会比较大,对于偏移,建议将该程序放到最后,将前面的空间留给应用程序,比如我制作文件大小是387KB,为了给以后增加功能留下空间,我准备将它下到最后的24*32K=768KB空间里面,由于flash是按照sector 64KB擦的,所以下载的时候偏移量要按照64KB对齐,这里偏移量我设置为0x1F40000。

在更新用户程序的时候要注意,不要将flash全擦了,768KB占用12个sector,我的flash一共有512个sector,因此我只需要擦500个就行,后面的就不要擦了,要不然golden image就丢了,

将golden image下载好以后,我们就可以实现网口远程更新了,如果更新有问题,可以多次尝试,因为我们的golden image一直都在。

其它

在应用程序里是否要实现远程更新功能?

其实也可以实现,这样只要更新不出问题,我们的golden image就没有机会启动,如果从减小代码的角度考虑,可以不实现,可以通过配置multi boot寄存器实现程序的跳转,将该寄存器的值+1,然后软件复位,就可以启动golden image,再进行更新。

   通过multi boot功能,我们可以实现多个程序跳转,比如前面可以放设备自检代码,设置一些加密功能,最后跳转到应用程序。

http://www.xdnf.cn/news/971047.html

相关文章:

  • Android Studio 问题:Android Studio 一直开在 Updating indexes
  • 【运维】【期末实训】网站简易搭建模拟
  • 核心机制:面向字节流
  • C++:std::is_convertible
  • <7>-MySQL内置函数
  • Python训练营-Day27-函数专题2:装饰器
  • Java如何权衡是使用无序的数组还是有序的数组
  • copilot基于 DeepSeek-R1 思路构建 VLA 自动驾驶强化学习系统
  • 华为云Flexus+DeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建联网大模型
  • QMC5883L的驱动
  • iview组件库:自定义方法去控制Tree树形数据的根节点与叶节点的关联性
  • Android Studio jetpack compose折叠日历日期选择器【折叠日历】
  • IOC和AOP
  • vue实现气泡词云图
  • FastJson的反序列化问题入门
  • Qt使用ODBC连接MySQL数据库
  • R7-1 显示Pascal三角形
  • 【代码模板】从huggingface加载tokenizer和模型,进行推理
  • idea64.exe.vmoptions配置
  • IDEA中配置HTML和Thymeleaf热部署的步骤
  • 蓝桥杯 2024 15届国赛 A组 儿童节快乐
  • 指针与引用参数传递的区别及内存操作流程详解
  • 分散电站,集中掌控,安科瑞光伏云平台助力企业绿色转型
  • 高通录像功能
  • Vim 光标移动命令总览
  • Java中高并发线程池的相关面试题详解
  • 《ZLMediaKit 全流程实战:从部署到 API 调用与前后端集成》
  • 用 LoRA 对 Qwen2.5-VL 模型进行SFT - FORCE_TORCHRUN=1
  • 条件运算符
  • error: src refspec master does not match any - Git