1 引言
随钻测井仪器内部电路由于受到工作环境中冲击振动因素的影响,往往采用灌胶注封的方法减震,起到保护电路板的目的。在仪器调试工作中难免需要调整各模块控制功能和程序更新,由于电路板的编程接口被胶密封,加之随钻仪器特定的组装工艺,每次更新电路程序都要消耗大量人力和时间进行拆卸安装,效率很低。
本文以某随钻测井仪器中的MSP430F2XX型单片机为例,设计了一种总线式多单片机在线升级方法,该方法利用上位机PC通过RS485总线对系统内多个模块在系统状态实现了程序升级更新,很好的解决了上述问题。
2 MSP430F2XX在线编程方法
MSP430F2XX系列单片机是美国TI公司生产的16位超低功耗单片机,内部具有一定容量的闪速存储器(Flash)[1],该存储器是一个可独立操作的物理存储单元。全部模块安排在同一个线性地址空间中, 存储器被分为多个512字节的段(信息段大小为128/64字节)。各段可单独擦除,并且在正常工作电压下程序可对Flash进行擦写操作,这一特点使得它特别适合在线程序升级。
MSP430FXXX系列单片机在线升级的基本原理[2]就是对其Flash空间进行自定义划分,并按程序指定地址顺序执行。以MSP430F2XX为例,打开Lnk430F2XX.xcl,修改此文件用于重新划分单片机Flash存储空间。该型号单片机存储空间为4KB RAM,120KB+256B Flash[3]。 其原始存储空间分布和在线编程空间分布如下图1所示。
图1中将2100H-FFBEH的Flash空间划分为了3部分。一小部分用于存放引导程序,一小部分为用户虚拟中断地址区,剩下的大部分为用户的应用程序空间。Flash空间的划分目的是使程序的存放和程序的执行按地址有序进行。在线编程时的底层程序执行流程[4]如下图2所示。
图2 单片机底层程序执行流程图
第一次对单片机进行烧写时须通过仿真器将包含引导程序的主程序写入单片机Flash,通过该程序来选择引导应用程序,引导程序需要固定在Flash的一个位置上,且保证不能被擦除。以后再次更新程序时即可通过引导程序利用串口与上位机进行交互,完成应用程序的在线更新。
void main(void) {
WDTCTL = WDTPW + WDTHOLD;
if(ResetVectorValid()==1) // 判断是否已经下载过应用程序
{
Application(); // 执行应用程序
}
Update(); // 执行升级程序
}
每次上电执行时,单片机从引导程序开始执行,首先
判断应用程序是否存在。若存在,直接执行应用程序;从引导程序进入应用程序只需将PC值转移到相应的应用程序起始地址位置即可。
void Application(void)
{
asm(" mov &0xF9BE, PC;"); // 在C中调用汇编指令实现地址转移
}
若不存在,则启动升级程序。在升级程序中,首先初始化串口,然后根据协议擦除Flash中指定用于存放应用程序的存储空间,完成后通过串口向上位机发送握手指令,通知上位机发送更新代码,最后将上位机发送的应用程序可执行文件写入单片机片内 Flash的应用程序空 间,烧写完成后执行更新后的应用程序。
void Update(void)
{
InitUart(); // 初始化串口
EraseFlash(unsigned int waddr); // 擦除指定位置Flash
uart_send("Update Ready !"); // 发送确认
while(1)
{
/*接受数据,并将数据写入Flash指定地址空间*/
}
}
3 应用方案设计
将上述方法扩展,应用于随钻测井仪器多模块电路程序在线升级更新,其总体构架设计如图3所示。图3系统中,为实现在系统状态升级更新,以MSP430F2XX单片机为核心控制器的各子模块电路,采用RS485总线方式与外部上位机连通,连接处为一块RS485转换电路,该电路将PC机发出的RS232串行数据转换成RS485数据发送到RS485总线上[5]。工作时,上位机PC软件将各单片机的应用程序的可执行文件通过RS485总线以不同的地址、不同的波特率发送到相应的模块电路,实现各模块的在系统状态程序升级更新。
图3 RS485总线式
多模块在线升级更新总体构架
4 方法实现
与单单片机系统在线编程不同,多单片机系统由于存在多个子机,为使上位机程序能准确到达指定的子模块电路,首先要为各子模块定义各自的地址和通信波特率,并确保地址和波特率各不相同。当上位机以某一波特率发送地址位时,各子模块分别以自己的波特率接收,然后对比地址。若接收到的地址与自己地址相同,则该子模块准备进行程序在线更新;若不相同,则放弃更新,进入各自应用程序。
4.1 底层程序执行流程
对于处于多单片机系统中的各子模块,其MSP430F2XX单片机存储空间的重新划分与单一系统在线编程时相同,见图1。但其内部底层程序执行流程略有不同,主要体现在引导程序的编写,如图4所示。在引导程序中,首先要进行时钟初始化,串口初始化,设定通信波特率,定时器初始化,然后开启定时器,等待上位机发送地址。若在规定的时间内接收到上位机发送的地址,且与本子模块地址相同,则向上位机发送确认信息,等待接收更新后的程序代码,将其写入用户应用程序空间,完成程序在线升级更新;若在规定的时间内没有接收到地址指令或接收到的地址与本机指定的地址不同,则跳过程序更新,运行原有应用程序。
图4 多单片机系统下
各子模块单片机底层程序执行流程
4.2 上位机软件开发
图5 上位机界面
上位机软件采用LabVIEW设计开发[6],LabVIEW是NI公司推出的一种虚拟仪器软件开发平台,采用了编译图形化编程语言,软件开发快速,灵活。上位机软件的功能是当随钻测井仪器上电复位后,在规定时间内向指定子模块发出更新程序指令(即子模块地址),在收到该子模块应答的确认信息后,向该子模块发送程序代码的可执行文件。上位机界面如图5所示。在操作时,首先打开PC机与RS485转换电路相连的串口,根据协议选择波特率和数据比特,在命令栏输入拟更新子模块的地址,点击“发送”按钮,发送子模块地址,待收到确认信息后,选择要更新的程序文件,点击“升级”按钮,就可
以进行子模块程序的升级更新了。更改地址和波特率,选择相应的更新文件,即可对系统中其他子模块进行程序在线升级更新。
5 结束语
将MSP430F2xx在线编程方法扩展到多单片机系统在线升级更新,并将其应用到随钻测井仪器在线程序更新,经实践验证表明,该升级方式稳定可靠,大大减少了随钻测井仪器电路维护的时间成本和人工成本,在实际应用中起到了事半功倍的效果。同时,此种方法同样适用于采用了MSP430Fxxx系列的其他领域的多单片机系统程序在线更新。
参考文献:
[1] 潘卫江等.MSP430单片机Flash存储器的特性及应用[J]. 单片机与嵌入式系统应用,2001,(4):38-41.
[2] 袁娟等.MSP430程序升级方式探讨 [J].单片机与嵌入式系统应用,2006,(5):65-67.
[3] MSP430x2xx Family User’s Guide[EB/OL].Literature Number:SLAU144H.
[4] 张园等.MSP430单片机串口的程序升级方法[J].单片机与嵌入式系统应用,2011,(10):23-24.
[5] 沈建华,杨艳琴编著.MSP430系列16位超低功耗单片机原理与实践[M].北京航空航天大学出版社,2008.
[6] 郑对元等编著.精通LabVIEW虚拟仪器程序设计[M].清华大学出版社,2012.