ZYNQ7000全可编程SOC基于Xilinx全可编程可扩展处理平台结构,其内部集成了ARM公司的双核Cortex™-A9处理器系统(processing system,PS)和Xilinx的可编程逻辑单元(programmable logic,PL),真正实现了软件和硬件的协同设计[1],同时也大大缩短了系统的开发时间。因此,ZYNQ7000全可编程SOC在嵌入式领域得到了广泛的应用。本文所研究的内容是基于ZYNQ7000系列XC7Z100主控芯片实现的。
以往的产品都是通过预留的调试接口进行应用软件更新,现要求产品在组装前不能含有与整机无关的冗余接口,同时具备应用软件更新的功能。经调研发现,大部分产品都是使用调试接口进行应用软件更新,还有的产品具有应用软件更新的专用接口。为了解决正式产品组装完成后主控板应用软件更新的问题,复用了主控板和外部的RS422串口。在需要进行软件更新的时候,通过此RS422串口向主控制板传输新版本的应用软件数据包,否则用此RS422串口和外部进行正常的数据通信。
1 系统硬件配置基于ZYNQ7000系列XC7Z100主控芯片的最小系统框图如图1所示[2]。
Download:
|
|
DDR3的型号为MT41J256M16HA-125,选用2片组成32位内存模组,总容量为1 GB;SPI-Flash的型号为S25FL256SAGMFI001,总容量为32 MB;PS和PL的工作时钟分别是33.3 MHz和 50 MHz[3];RS422接口芯片为LTC2851,采用3.3 V的电源,支持20 Mbps的最高数据速率;电源模块为最小系统提供1.8 V、3.3 V、5 V等供电。
2 启动与配置原理经查阅资料可知,ZYNQ7000全可编程SOC启动与配置过程包含以下3个阶段:
阶段1 该阶段也称为BootRom,主要用于控制初始设备的启动。BootRom是系统复位后,处理器所执行的用户不可修改的代码,该部分代码已经固化到BootRom中[4-5]。
阶段2 该阶段通常执行第一级启动引导程序(first stage boot loader,FSBL)[6]。
阶段3 该阶段一般执行用户自己的软件程序。
基于以上启动与配置的过程,为了实现采用串口进行应用软件更新,需要在第3阶段先执行具有应用软件更新功能的程序(简称监控软件),然后由监控软件控制接下来的程序流程,即系统上电后首先由阶段2引导启动监控软件,若需要进行应用软件更新,则在上位机软件的配合下进行应用软件数据包更新;若不需要更新应用软件,则5 s后监控软件进行系统软复位[7],开始启动现有的应用软件。采用串口进行应用软件更新的系统启动流程如图2所示。
Download:
|
|
FSBL的主要功能为根据启动标志选择启动监控软件还是应用软件[8],启动标志为0x5A5A时启动应用软件,否则启动监控软件。在系统软件进入软件复位流程且复位执行前将启动标志配置为0x5A5A,软件复位后在FSBL中完成启动区域判别后再将启动标志配置为0xFFFF。这样每次系统上电后都先启动监控软件,而每次系统软件复位后都会启动应用软件。
3 SPI-Flash空间分配综上所述,采用串口实现应用软件更新需要引导软件、监控软件和应用软件等3个镜像文件[9],同时还需要1个启动SPI-Flash区域的标志,所以需要至少将主控板上的SPI-Flash划分出独立的4个区域(0区、1区、2区和3区),分别用于存放引导软件、启动标志、监控软件和应用软件。结合项目实际情况,引导软件为86 KB,启动标志为2 B,监控软件为6 MB,应用软件为8 MB,SPI-Flash分区示意图如图3所示。
Download:
|
|
基于前面的启动与配置原理和SPI-Flash空间分配,接下来进行监控软件的流程设计[10-12]。监控软件包括监控软件主程序和串口中断程序,相应的工作流程也包含监控软件主程序流程和串口中断程序流程[13-15]。
1)监控软件主程序流程
监控软件主程序流程如图4所示。获取数据帧程序流程如图5所示。解析串口数据帧程序流程如图6所示。
Download:
|
|
Download:
|
|
Download:
|
|
2)监控软件串口中断程序流程
监控软件串口中断程序流程如图7所示。
Download:
|
|
在使用监控软件进行应用软件更新前需要先用仿真器将引导软件和监控软件固化到主控板的SPI-Flash中,然后就可以使用与监控软件配套开发的上位机软件配合监控软件通过串口完成应用软件的更新[16-20]。在打开上位机软件之前需要用RS422转USB线缆将主控板与PC机相连接,接下来的操作流程如下:
1) 打开上位机软件,并设置串口参数,界面如图8所示。
Download:
|
|
2) 在烧写类型选择应用软件后,并选择文件路径,界面如图9所示。
Download:
|
|
3) 选择好文件路径后点击开始上传,界面如图10所示。
Download:
|
|
4) 给主控板上电,上位机软件开始上传数据,待上位机软件显示Flash烧写成功后,表明应用软件更新完毕,界面如图11所示。
Download:
|
|
经过以上步骤后,再重新给主控板上电,主控板复位后启动的就是更新版本的应用软件。同时,此方案也能实现引导软件和监控软件的更新,这样就完全实现了在已组装设备状态不变的状态下对主控板内所有软件进行更新。
6 结论本文从实际的需求出发,基于ZYNQ7000全可编程SOC启动与配置的原理,经过方案分析研究和实际验证,可得出以下结论:
1)复用主控板与外部的RS422接口,采用对SPI-Flash进行分区引导与启动的方式,在未使用对产品应用软件更新专用接口的情况下实现了对主控板应用软件的更新。
2)接下来,可以通过千兆网接口来实现远距离多个产品的应用软件更新。
3)进一步可将此方法应用于无线传输领域,实现远程在轨设备的应用软件更新。
此应用技术对智能化、无人化的嵌入式系统开发具有重要的意义。
[1] | 陆佳华, 潘祖龙, 彭竞宇. 嵌入式系统软硬件协同设计实战指南[M]. 第2版. 北京: 机械工业出版社, 2014. (0) |
[2] | 陶永才,巴阳. 嵌入式系统设计与开发实践[M]. 第2版. 北京: 清华大学出版社, 2017. (0) |
[3] | 刘洪涛. ARM嵌入式体系结构与接口技术[M]. 北京: 人民邮电出版社, 2010. (0) |
[4] | 何宾, 张艳辉. Xilinx Zynq-7000嵌入式系统设计与实现[M]. 北京: 电子工业出版社, 2017. (0) |
[5] | 符晓 ,张国斌 , 朱洪顺. Xilinx ZYNQ-7000 AP SOC开发实践指南[M]. 北京: 清华大学出版社, 2015. (0) |
[6] | 秦山虎 ,刘洪涛. ARM处理器开发详解[M]. 北京: 电子工业出版社, 2016. (0) |
[7] | 张石. ARM Cortex-A9嵌入式技术教程[M]. 北京: 机械工业出版社, 2018. (0) |
[8] | 魏权利 ,李丽萍, 林粤伟. 嵌入式系统原理与应用[M]. 北京: 机械工业出版社, 2014. (0) |
[9] | 林天静, 阮翔, 刘春. 基于Flash控制器的FPGA在线加载功能设计[J]. 电子技术应用, 2019(1): 88-91. (0) |
[10] | 宋凯, 高寒. 基于Zynq-7000的自动化监测系统BSP设计与实现[J]. 电子技术应用, 2018(9): 67-70, 74. (0) |
[11] | 张邦术. 嵌入式软件设计之思想与方法[M]. 北京: 北京航空航天大学出版社, 2019. (0) |
[12] | 何坚. 嵌入式软件开发技术[M]. 北京: 科学出版社, 2018. (0) |
[13] | 侯殿有. 嵌入式系统开发基础——基于ARM9微处理器C语言程序设计[M]. 北京: 清华大学出版社, 2018. (0) |
[14] | 王一萍, 梁伟, 李长荣, 等. C语言从入门到项目实战[M]. 北京: 水利水电出版社, 2019. (0) |
[15] | 苏小红. C语言大学实用教程[M]. 第4版. 北京: 电子工业出版社, 2017. (0) |
[16] | 谭浩强. C++程序设计[M]. 第3版. 北京: 清华大学出版社, 2015. (0) |
[17] | 谭玉波. C++从入门到精通[M]. 北京: 人民邮电出版社, 2019. (0) |
[18] | 朱少民. 全程软件测试[M]. 第3版. 北京: 人民邮电出版社, 2019. (0) |
[19] | 赵国亮, 叶东升. 董丽, 等. 嵌入式软件测试与实践[M]. 北京: 机械工业出版社, 2018. (0) |
[20] | 刘海峰. 丁磊. 星载嵌入式软件的构件化体系研究[J]. 软件, 2016(7): 109-113. DOI:10.3969/j.issn.1003-6970.2016.07.022 (0) |