基于Smartfusion2的在线应用程序升级IAP

一、说明

Smartfusion2作为一款集成cortex-M3内核的FPGA芯片,非常适用于嵌入式产品的开发,简化了传统STM32与FPGA以及DSP与FPGA相结合的方案,降低了信息交互的延迟以及开发的成本。在工程应用中,产品组装完成后,为了简化连接接口,这时JTAG的程序下载方式不在适合。此外,当产品发送到用户手中,需要进行程序远端升级时,为了保护公司的专利,此时不便将程序源码进行发送,这就需要使用在线应用升级的方式,也是产品在开发中重要的组成部分。

目前官方推荐的主要是ISP以及通过网口进行程序升级:ISP的应用程序升级实现简单,通过例程能够快速实现,需要注意的点FPGA时钟频率的设置以及升级过程中会有端口进行冻结,只能使用固定的串口进行程序的下载,缺点是时钟频率受限,需要解决时钟问题(只是我关注到的,没有过多思考,有兴趣的可以多查看资料解决);此外,每次生成的.isp文件必须通过win + cmd借助命令行进行操作,不是很方便产品交付后的程序升级。通过网口方式没有过多研究,不做评论(看资料介绍比较多,涉及的配置也较为复杂)

本文寻找的是向STM32那种,通过串口进行程序的下载传输,自行实现程序的升级运行,通讯方式比较主流,操作比较简单。

二、主要开发思路

1、FPGA硬件方面:由于内部有集成eNVM非易失性存储器,当选择此存储器时,需要将内部储存区进行划分,至少划分两个以上,推荐三个:一个用于存放bootload程序,一个存放app1,一个存放app2。开头存放的bootload用于开机复位后模式的选择(进行程序下载还是程序升级);app1用于存放主程序,app2用于存放升级程序。主程序与升级程序的差距不大,主要是用于备份作用,避免串口传输升级程序失败后或者升级程序覆写失败后导致产品不能运行的状况发生。当然,这就需要进行取舍,这会占用相当的内部存储资源,依实际具体情况而定。

2、软件设计部分:

(1)app1与app2应用程序的设计没什么特殊的地方,可能需要注意的就是,通过libero进行程序的导入时,需要使用release生成的hex文件(编程习惯好的当我没说)。

(2)主要是bootload的设计:

主程序:主要是进行串口的初始化,通过条件判别发送来的指令执行相应的操作:运行app1;运行app2;进行升级程序接收状态并将程序固化到app1起始地址位置;进行升级程序接收状态并将程序固化到app2起始地址位置。

固定地址的程序运行:主要实现指定地址运行的操作,需要进行的设计有:eNVM存储区域到运行区域的映射;运行函数的跳转。

eNVM程序的写入:用于串口接收程序对存储区的写入,借助提供的库函数即可实现操作,需要注意的是存储区的解锁。

三、总结

也有很多需要优化的地方:如代码校验和;固定程序固定位置的写入(避免不需要修改程序的部分重复擦除写入);接收数据需要的缓冲区过大等等。。。

走了很多弯路,查了很多资料,最后能够做出来也是挺开心的,望大家工作顺利!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值