基于现场总线实现远程在线更新程序的技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下:
#include<string.h>
{
SARAM PieCtrlRegs.PIECTRL.bit.ENPIE=0:
MemCopy(&Flash28一API—LoadSLart,&Flash28一API—Load—
幽m(”EALLOW”); memcpy((void奉)0x000D00,&PieVeetTablelnit,256); asm(”EDIS”); }
程序开始 通知更新
2远程在线更新程序的实现原理
,11公司提供了完整的片内Flash存储器解决方 案。在程序编译前,要事先包含Flash API接口函数库
<
n鹊112808一API_V302.LIB,里面包含了针对Flash存储 器操作的全部函数集,只要修改部分代码就可以实现 功能,非常简单。 首先在CCS3.3环境下,把要下载的程序编译生 成.out文件。但该文件是COFF格式的文件,并不是 一个完整纯粹可执行代码,其中包含存储器各个段的 起始地址和数据长度,以及其他一些辅助信息,所以该 文件一般都比较大,只能被CCS的编程插件识别。 可通过,I.I提供的数据转换工具Hex2000将.out
j
一O・.hex
一map・.map
—memwidth 16 ROMS
{
FLASH:org=0x3F00(10,len=ox008000,romwidth=16,fiU= 0xFFFF
}
下面以某大型雷达系统为例,具体说明其实现过 程。该雷达系统的硬件连接关系如图2所示。
1.3系统维护阶段
在实际工程应用中,编程方式C主要用于系统维 护阶段,在设备量众多、操作环境恶劣的情况下,远程 在线更新应用程序尤其重要。嵌入式设备中,应用程 序一般都是固化在F2808片内Flash存储器资源中, 上电后通过Flash存储器引导模式来加载应用程序。 采用这种方式启动可靠,可以节省外部资源,不需要再 增加额外硬件成本,因此被大鼍采用。编程方式c同 样也不需要CCS插件的支持,用远程通信方式获取编 程数据,用固化在Flash存储器中含内嵌Flash API函 数接口的应用程序实现烧写Flash存储器扇区。
PAGE=0 Flash28一API:
bit的片内Flash存储器资源,被
分为FlashA、FlashB、FlashC、FlashD这4个扇区。该项 目中应用程序被固化在扇区FlashA中。虽然F2808 片内Flash存储器有4个扇区资源,但不支持在其中 一个扇区运行程序去擦除或烧写其他扇区的功能,同 时Flash存储器擦除操作的最小单位就是扇区,不支 持字节和段擦除。所以在对F2808片内Flash存储器 进行擦写操作前,就必须先把存放在Flash存储器中 的程序搬移到片内zero—waitstate的SRAM中。实现搬 移的函数原型为:
}
return;
I
Flash
RAM是一个特定的RAM块,它在当前F2808器件中
API库函数必须被放在程序段的.econst和 是一个256
k×16
bit的块。在数据空间中的起始地
.text中,在上电后被初始化。在进行Flash存储器擦 除、编程、校验时,它们必须首先被拷贝到SRAM中 去:
//Copy the Flash API functions
・13・
End,&Flash28一API—RurIstart);
同理,还必须把Flash存储器中其他代码拷贝到 SRAM中:
万方数据
・研究与设计・
信息化研究
2009年6月
为了方便操作,重新封装了Flash存储器操作函 数,如下:
//初始化,准备FLASH操作
void
件握手校验功能非常重要。 c)复位方式。在更新完程序后,系统必须要重新 启动,让F2808加载新的应用程序。在软件上可以采 取关闭喂狗或软件强行复位等方式,也可以在外部给 硬件复位信号使其重启。 d)烧写问题。在应用程序烧写Flash存储器过程 中,不能异常中断,否则有可能会导致Flash存储器损 坏。
程在线更新。侧重介绍几种不同编程方式的选择原则、实现原理以及过程中需要注意的问题。这种
方式在实际工程运用中得到了验证,工作稳定可靠。 关键词:现场总线;TM¥320F2808;Flash API;在线更新程序 中图分类号.TFr311.53
0引言
TMS320F28xx是r11公司新一代侧重电动机控制 的32位MCU(微控制单元),用该芯片系列中 TMS320F2808(简称F2808)设计的控制板一般都是嵌 人在其他设备中。要么是在结构上拆装很麻烦;要么 就是分布在不同的空间范围之内。例如某新一代航管 雷达中,用于检测控制的30多个BITE(机内测试设 备)就分别装在结构很复杂的功放组件和发射电源 中;某大型相控阵雷达中1 600多块信号采样板就分 布在阵面10层楼的不同空间中¨J。在这种情况下,若 要更换一次程序,就要浪费大量的人力和精力。 鉴于此,本文在实际工程应用中提出一种解决方 案,借助系统内的网络和现场总线CAN来实现F2808 片内Flash存储器程序远程在线更新的技术心】。
图2硬件系统连接关系
需要更新程序时,只要在PC端运行一套定制的 上位机软件,点击鼠标就能轻松实现所有控制单元的 程序更新。上位机软件把要编程数据,按UDP协议发 送到各个不同地方的网络协议转换器,该设备接收到 网络数据后,立即完成把数据从网络格式到CAN总线 格式的转换,然后通过串行CAN总线传送给线上每一 个F2808单元。最终由内嵌在Flash存储器中的应用 软件完成程序的更新工作。 实现应用程序远程更新功能的软件流程见图3。
k×16
user
to
MemCopy(&secureRamFunes—loadstart,&secureRamFuncs—load・ end,&seeureRamFunes_runstart);
其中,MemCopy函数的第1个参数为FlashD存储 器中程序的起始地址,即源程序开始地址;第2个参数 为Flash存储器中程序的结束地址,即源程结束序地 址;第3个参数为搬移至内存的首地址。 Flash28一API和secureRamFuncs段可以使用用户 链接命令文件.cmd进行连接。这个段需要独立的装 载和运行地址。另外,还要让连接器生成一些全局符 号,这些全局符号可以用来决定装载地址、运行地址、 段长度。在实现把这个段从装载地址拷贝到它的运行 地址时需要这些信息。用户在链接命令文件.cmd中, 要增加段定义部分如下:
F2808的编程方案
目前F2808的编程方式主要有3种,如图1所示。
图1
Flash存储器的编程方式
收稿日期:2009-03-30;修回日期:2009-05-14。
万方数据
・11・
・研究与设计・ 表1引导模式的选择
信息化研究
2009年6月
文件转化成适于远程更新的HEX数据流格式文件:
Hex2000
1
1.1软件开发阶段 利用CCS3.3自带的插件F28xx
On—Chip Flash
Programmer来烧写I;'2808片内Flash存储器和OTP (一次性可编程)存储器,也就是图1中的编程方式A。
这种方式非常方便,可直接通过调试mG口来下载
程序。值得注意的是,调试时程序是放在SRAM中运 行,编程时程序是放在Flash存储器中运行,因此需要 更换不同的.cmd文件。 1.2量产烧写阶段 工程人员一般习惯通过SCI—A或ECAN—A口来一 次性烧写片内Flash存储器。编程方式B的优点是脱 离了CCS插件的限制,提高了工作效率。因为F2808
第35卷第6期 2009年6月
信息化研究
lnformatization Research
V01.35 No.6
Jun.2009
基于现场总线实现远程在线更新程序的技术
李桂新,蒋敏玉,黄
军 (南京电子技术研究所,江苏省南京市210013)
摘要:在大型智能系统中,种类繁多的嵌入各种控制软件的设备分布于不同的使用环境中,如 何运用系统既有的现场总线来解决嵌入式设备程序的维护问题,是提高工作效率的关键所在。文中 介绍了一种基于CAN总线实现远程在线更新程序的技术。运用rrI公司提供的Flash API函数库,用 编程的方式来实现对TMS320F2808片内Flash存储资源的读写操作,再借助上位机辅助软件来实现远
CreateHex.cmd。其中自编写的批处理文件
Creathex.cmd的作用是指定引导表格式,内容如下:
/・一一一一一一一一一一一一一一一一一一一一一一●/ /幸Hex
converter
command fde.奉/
/・一一一一一一一一一一一一一一一一一一一一一一・/
}.out 一a
/・输入的COFF文件・/ /¥选择ASCII格式・/ /・输出HEX文件名十/ /・规定MAP文件名・/
・12・ 一申更一~请新一 一新序一 ]l’]
从FlashD拷 到FlashA
—厂
l _一重程r
篝纛 鲎黼忑~ 弋
F2008
重新启动
厂蓟i蕊
\结束
图3软件更新流程
万方数据
第35卷第6期
李桂新,等:基于现场总线实现远程在线更新程序的技术
//We must also copy required
・研究与设计・
PAGE=O
MemCopy(Uintl6・SourceAddr,Uintl6幸SourceEndAddr,
Uintl6}DestAddr) { while(SoureeAddr<SourceEndAddr) {
・DestAddr++:}SoureeAddr++:
另外,在F2808器件中,PIE(外设扩展中断)模块 是用来管理中断请求。上电时,所有中断向量必须位 于非易失性存储器(如Flash存储器)中。为保证正确 运行,还要把中断向量拷贝到PIEVECT RAM中,这是 用户代码中器件初始化程序的一部分。PIEVECT
secureRamFunes: LOAD=FLASHA。 RUN=SARAM—LIH0,
LOAD_START(一secureRamFunes_loadstart), LOAD—END(_secureRamFunes_loadend), RUN_START(_secureRamFuncs_runstart),
Void
{ 一1Flash2808一API—V302.1ib(.eeonst)
一1
Flash2808一API—V302.hh(.text)
}
LOAD=FLASHA,
RUN=SARAM—LIH0,
LOAD_START(一Flash28一API—LoadSI且rt),
LOAD—END(一Flash28一API—LoadEnd), RUN_START(一Flash28_API—RunStart),
interface functions RAM.
当用户需要更新程序时,首先广播通知下属设备 F2808单元做好更新准备,然后再通过现场总线把要 写入的程序地址信息和数据信息,以CAN数据帧格式 告知每一个在线设备。F2808单元把收到的CAN数 据先写到临时FlashD扇区。全部写完后再把收到的 总校验字与自己计算得到总校验字比较,校验无误后 再把FlashD中的数据拷贝到FlashA中,若发现有问 题,就申请重新更新程序。 由上述原理知道,实现程序远程在线更新的软件 主要是由2部分组成: 1)上位机软件 可以用VC++编写上位机软件,作用是按规定格 式读取HEX文件中地址信息和数据信息。然后把读 到的信息转换成网络数据,按UDP协议发送到网络 上。上位机软件是基于WIN32的,可以在任何具备网 卡的调试计算机上运行。 2)下位机软件 该部分软件是实现远程在线更新技术的关键部 分。F2808有4
器件的引导ROM是一个位于O】【3删-0x3FFFF地
址处的4
k×16
bit只读存储器块。片上引导ROM在
出厂时已设定好引导加载例程以便适应不同的系统要 求。引导ROM提供了多种不同的引导模式,可以通 过3个GPIO引脚的状态来确定所需的引导模式。见 表1。 在硬件设计上,通过一个3位地址编码开关来实 现引导方式可选。 用户首先通过串口或CAN口,把应用程序从外部 设备直接加载到片内SRAM中运行,然后通过程序接 口,用内嵌的Flash应用编程接口(API)函数把程序代 码直接写到片内Flash存储器中去。这种方式只需要 使用一次,以后再更换程序就可以通过远程在线更新 的方式来实现。
#include<string.h>
{
SARAM PieCtrlRegs.PIECTRL.bit.ENPIE=0:
MemCopy(&Flash28一API—LoadSLart,&Flash28一API—Load—
幽m(”EALLOW”); memcpy((void奉)0x000D00,&PieVeetTablelnit,256); asm(”EDIS”); }
程序开始 通知更新
2远程在线更新程序的实现原理
,11公司提供了完整的片内Flash存储器解决方 案。在程序编译前,要事先包含Flash API接口函数库
<
n鹊112808一API_V302.LIB,里面包含了针对Flash存储 器操作的全部函数集,只要修改部分代码就可以实现 功能,非常简单。 首先在CCS3.3环境下,把要下载的程序编译生 成.out文件。但该文件是COFF格式的文件,并不是 一个完整纯粹可执行代码,其中包含存储器各个段的 起始地址和数据长度,以及其他一些辅助信息,所以该 文件一般都比较大,只能被CCS的编程插件识别。 可通过,I.I提供的数据转换工具Hex2000将.out
j
一O・.hex
一map・.map
—memwidth 16 ROMS
{
FLASH:org=0x3F00(10,len=ox008000,romwidth=16,fiU= 0xFFFF
}
下面以某大型雷达系统为例,具体说明其实现过 程。该雷达系统的硬件连接关系如图2所示。
1.3系统维护阶段
在实际工程应用中,编程方式C主要用于系统维 护阶段,在设备量众多、操作环境恶劣的情况下,远程 在线更新应用程序尤其重要。嵌入式设备中,应用程 序一般都是固化在F2808片内Flash存储器资源中, 上电后通过Flash存储器引导模式来加载应用程序。 采用这种方式启动可靠,可以节省外部资源,不需要再 增加额外硬件成本,因此被大鼍采用。编程方式c同 样也不需要CCS插件的支持,用远程通信方式获取编 程数据,用固化在Flash存储器中含内嵌Flash API函 数接口的应用程序实现烧写Flash存储器扇区。
PAGE=0 Flash28一API:
bit的片内Flash存储器资源,被
分为FlashA、FlashB、FlashC、FlashD这4个扇区。该项 目中应用程序被固化在扇区FlashA中。虽然F2808 片内Flash存储器有4个扇区资源,但不支持在其中 一个扇区运行程序去擦除或烧写其他扇区的功能,同 时Flash存储器擦除操作的最小单位就是扇区,不支 持字节和段擦除。所以在对F2808片内Flash存储器 进行擦写操作前,就必须先把存放在Flash存储器中 的程序搬移到片内zero—waitstate的SRAM中。实现搬 移的函数原型为:
}
return;
I
Flash
RAM是一个特定的RAM块,它在当前F2808器件中
API库函数必须被放在程序段的.econst和 是一个256
k×16
bit的块。在数据空间中的起始地
.text中,在上电后被初始化。在进行Flash存储器擦 除、编程、校验时,它们必须首先被拷贝到SRAM中 去:
//Copy the Flash API functions
・13・
End,&Flash28一API—RurIstart);
同理,还必须把Flash存储器中其他代码拷贝到 SRAM中:
万方数据
・研究与设计・
信息化研究
2009年6月
为了方便操作,重新封装了Flash存储器操作函 数,如下:
//初始化,准备FLASH操作
void
件握手校验功能非常重要。 c)复位方式。在更新完程序后,系统必须要重新 启动,让F2808加载新的应用程序。在软件上可以采 取关闭喂狗或软件强行复位等方式,也可以在外部给 硬件复位信号使其重启。 d)烧写问题。在应用程序烧写Flash存储器过程 中,不能异常中断,否则有可能会导致Flash存储器损 坏。
程在线更新。侧重介绍几种不同编程方式的选择原则、实现原理以及过程中需要注意的问题。这种
方式在实际工程运用中得到了验证,工作稳定可靠。 关键词:现场总线;TM¥320F2808;Flash API;在线更新程序 中图分类号.TFr311.53
0引言
TMS320F28xx是r11公司新一代侧重电动机控制 的32位MCU(微控制单元),用该芯片系列中 TMS320F2808(简称F2808)设计的控制板一般都是嵌 人在其他设备中。要么是在结构上拆装很麻烦;要么 就是分布在不同的空间范围之内。例如某新一代航管 雷达中,用于检测控制的30多个BITE(机内测试设 备)就分别装在结构很复杂的功放组件和发射电源 中;某大型相控阵雷达中1 600多块信号采样板就分 布在阵面10层楼的不同空间中¨J。在这种情况下,若 要更换一次程序,就要浪费大量的人力和精力。 鉴于此,本文在实际工程应用中提出一种解决方 案,借助系统内的网络和现场总线CAN来实现F2808 片内Flash存储器程序远程在线更新的技术心】。
图2硬件系统连接关系
需要更新程序时,只要在PC端运行一套定制的 上位机软件,点击鼠标就能轻松实现所有控制单元的 程序更新。上位机软件把要编程数据,按UDP协议发 送到各个不同地方的网络协议转换器,该设备接收到 网络数据后,立即完成把数据从网络格式到CAN总线 格式的转换,然后通过串行CAN总线传送给线上每一 个F2808单元。最终由内嵌在Flash存储器中的应用 软件完成程序的更新工作。 实现应用程序远程更新功能的软件流程见图3。
k×16
user
to
MemCopy(&secureRamFunes—loadstart,&secureRamFuncs—load・ end,&seeureRamFunes_runstart);
其中,MemCopy函数的第1个参数为FlashD存储 器中程序的起始地址,即源程序开始地址;第2个参数 为Flash存储器中程序的结束地址,即源程结束序地 址;第3个参数为搬移至内存的首地址。 Flash28一API和secureRamFuncs段可以使用用户 链接命令文件.cmd进行连接。这个段需要独立的装 载和运行地址。另外,还要让连接器生成一些全局符 号,这些全局符号可以用来决定装载地址、运行地址、 段长度。在实现把这个段从装载地址拷贝到它的运行 地址时需要这些信息。用户在链接命令文件.cmd中, 要增加段定义部分如下:
F2808的编程方案
目前F2808的编程方式主要有3种,如图1所示。
图1
Flash存储器的编程方式
收稿日期:2009-03-30;修回日期:2009-05-14。
万方数据
・11・
・研究与设计・ 表1引导模式的选择
信息化研究
2009年6月
文件转化成适于远程更新的HEX数据流格式文件:
Hex2000
1
1.1软件开发阶段 利用CCS3.3自带的插件F28xx
On—Chip Flash
Programmer来烧写I;'2808片内Flash存储器和OTP (一次性可编程)存储器,也就是图1中的编程方式A。
这种方式非常方便,可直接通过调试mG口来下载
程序。值得注意的是,调试时程序是放在SRAM中运 行,编程时程序是放在Flash存储器中运行,因此需要 更换不同的.cmd文件。 1.2量产烧写阶段 工程人员一般习惯通过SCI—A或ECAN—A口来一 次性烧写片内Flash存储器。编程方式B的优点是脱 离了CCS插件的限制,提高了工作效率。因为F2808
第35卷第6期 2009年6月
信息化研究
lnformatization Research
V01.35 No.6
Jun.2009
基于现场总线实现远程在线更新程序的技术
李桂新,蒋敏玉,黄
军 (南京电子技术研究所,江苏省南京市210013)
摘要:在大型智能系统中,种类繁多的嵌入各种控制软件的设备分布于不同的使用环境中,如 何运用系统既有的现场总线来解决嵌入式设备程序的维护问题,是提高工作效率的关键所在。文中 介绍了一种基于CAN总线实现远程在线更新程序的技术。运用rrI公司提供的Flash API函数库,用 编程的方式来实现对TMS320F2808片内Flash存储资源的读写操作,再借助上位机辅助软件来实现远
CreateHex.cmd。其中自编写的批处理文件
Creathex.cmd的作用是指定引导表格式,内容如下:
/・一一一一一一一一一一一一一一一一一一一一一一●/ /幸Hex
converter
command fde.奉/
/・一一一一一一一一一一一一一一一一一一一一一一・/
}.out 一a
/・输入的COFF文件・/ /¥选择ASCII格式・/ /・输出HEX文件名十/ /・规定MAP文件名・/
・12・ 一申更一~请新一 一新序一 ]l’]
从FlashD拷 到FlashA
—厂
l _一重程r
篝纛 鲎黼忑~ 弋
F2008
重新启动
厂蓟i蕊
\结束
图3软件更新流程
万方数据
第35卷第6期
李桂新,等:基于现场总线实现远程在线更新程序的技术
//We must also copy required
・研究与设计・
PAGE=O
MemCopy(Uintl6・SourceAddr,Uintl6幸SourceEndAddr,
Uintl6}DestAddr) { while(SoureeAddr<SourceEndAddr) {
・DestAddr++:}SoureeAddr++:
另外,在F2808器件中,PIE(外设扩展中断)模块 是用来管理中断请求。上电时,所有中断向量必须位 于非易失性存储器(如Flash存储器)中。为保证正确 运行,还要把中断向量拷贝到PIEVECT RAM中,这是 用户代码中器件初始化程序的一部分。PIEVECT
secureRamFunes: LOAD=FLASHA。 RUN=SARAM—LIH0,
LOAD_START(一secureRamFunes_loadstart), LOAD—END(_secureRamFunes_loadend), RUN_START(_secureRamFuncs_runstart),
Void
{ 一1Flash2808一API—V302.1ib(.eeonst)
一1
Flash2808一API—V302.hh(.text)
}
LOAD=FLASHA,
RUN=SARAM—LIH0,
LOAD_START(一Flash28一API—LoadSI且rt),
LOAD—END(一Flash28一API—LoadEnd), RUN_START(一Flash28_API—RunStart),
interface functions RAM.
当用户需要更新程序时,首先广播通知下属设备 F2808单元做好更新准备,然后再通过现场总线把要 写入的程序地址信息和数据信息,以CAN数据帧格式 告知每一个在线设备。F2808单元把收到的CAN数 据先写到临时FlashD扇区。全部写完后再把收到的 总校验字与自己计算得到总校验字比较,校验无误后 再把FlashD中的数据拷贝到FlashA中,若发现有问 题,就申请重新更新程序。 由上述原理知道,实现程序远程在线更新的软件 主要是由2部分组成: 1)上位机软件 可以用VC++编写上位机软件,作用是按规定格 式读取HEX文件中地址信息和数据信息。然后把读 到的信息转换成网络数据,按UDP协议发送到网络 上。上位机软件是基于WIN32的,可以在任何具备网 卡的调试计算机上运行。 2)下位机软件 该部分软件是实现远程在线更新技术的关键部 分。F2808有4
器件的引导ROM是一个位于O】【3删-0x3FFFF地
址处的4
k×16
bit只读存储器块。片上引导ROM在
出厂时已设定好引导加载例程以便适应不同的系统要 求。引导ROM提供了多种不同的引导模式,可以通 过3个GPIO引脚的状态来确定所需的引导模式。见 表1。 在硬件设计上,通过一个3位地址编码开关来实 现引导方式可选。 用户首先通过串口或CAN口,把应用程序从外部 设备直接加载到片内SRAM中运行,然后通过程序接 口,用内嵌的Flash应用编程接口(API)函数把程序代 码直接写到片内Flash存储器中去。这种方式只需要 使用一次,以后再更换程序就可以通过远程在线更新 的方式来实现。