基于串口的 MSP430 远程程序更新

(整期优先)网络出版时间:2020-06-02
/ 2

基于串口的 MSP430 远程程序更新

黄继福

中国船舶重工集团有限公司第七一 0 研究所,湖北 宜昌 443003

摘要:MSP430以其低电压、超低功耗、强大处理能力及系统工作稳定等性能在水下电池供电设备研制中存在广泛运用,水下设备由于其水密性、耐压性,机械结构复杂、拆卸、组装不易,存在不易通过仿真器JTAG更新程序的缺点。为此,根据MSP430的原理,设计一种基于串口的MSP430远程程序更新的系统。实验结果证明该系统可以有效、可靠更新MSP430系列的单片机。

关键词:MSP430;水下设备;远程程序更新

概述

随着海洋事业的发展,水下设备的待机时间、工作时间均越来越长,对设备的低功耗提出了更高要求,MSP430以其低电压、低功耗、强大处理能力及系统稳定等性能在水下设备研制中存在广泛运用[1]。水下设备由于其运用环境,对水密性、耐压性有着严格要求,在某些情况下,需要根据具体的使用要求,微调MSP430单片机程序。传统是通过JTAG或是BSL从而实现对Flash程序数据更新[2]。在更新MSP430程序过程中,需要拆卸水下设备、拆卸MSP430板卡、更新MSP430程序、组装板卡、组装机械结构及检查设备气密性等一系列复杂操作[3]。所以,本文设计一种基于串口远程更新MSP430程序方法,方便、快捷更新MSP430的程序。

MSP430程序更新的原理

MSP430系列的单片机采用冯·诺依曼结构,程序指令存储区、数据存储区、信息存储区、特殊功能寄存器以及中断向量表全部映射到16地址的空间内(64KB)[4]。MSP430F1611的存储结构如图2.1所示。

5ed5b35557baa_html_f7ae8f1fcf583334.gif
2.1 MSP430F1611存储结构图

IAR软件通过JTAG烧录MSP430F1611程序代码存储于程序存储区(4000h~FFDFh),查看软件生成的点灯(每个1s闪烁)程序代码的txt文件,txt的如图2.2所示。“@4000”中“@”符号后面表示是地址,以4000h为例,表示“@4000”到“@FFFE”之间的内容需要写入以4000h开始地址的代码存储区,“@FFFE”中FFFEh表示程序复位向量地址,“q”为结束标志。改变程序复杂程度,添加各种中断,烧录的代码只是增加以4000h为起始地址内容,同时在各种中断向量地址内添加内容。因此,只需要将代码烧录到固定地址段,同时将中断向量、复位向量也指向同样的位置。

5ed5b35557baa_html_78e345e7648d5154.png

图2.2 烧录程序代码文件

将程序存储区(4000h~FFDFh)划分为3个区域,分别是引导程序区、用户中断向量地址区和用户空间区,对应地址如图2.3所示。硬件电路需要通过RS232或是RS485将串口线引出,通过3个步骤完成基于串口的远程程序更新。

(1)将真实中断向量(FFE0h~FFFFh)指向用户中断向量地址(F9E0h~F9FFh);

(2)通过JTAG将引导程序烧录在引导程序区(FA00h~FFDFh);

(3)进行用户程序更新时,只需要通过串口将程序更新到用户程序空间。

5ed5b35557baa_html_eb22ad7fbb890d8d.gif

图2.3 程序存储区划分

3MSP430远程更新程序实现方法

分析MSP430程序更新原理,通过一下几个步骤实现MSP430远程更新程序。

引导程序编写

引导程序的主要目的,将真实中断向量指向用户中断向量地址,接收串口发送过来.txt格式烧录文件,写入相应地址区域。

#pragma vector=0

__interrupt void intec_0(void) (1)

{

asm(" br &0xF9E0;");

}

通过式(1),分别改变地址(0xF9E0)与vector(vector=0),MSP430所有的中断向量均需通过式(1)指向用户中断向量地址,将真实中断向量指向用户中断向量地址;引导程序工作流程如图3.1所示。

5ed5b35557baa_html_347e40a9aa5022aa.gif

3.1 应到程序示意图

MSP430上电之后,进行初始化工作,通过串口打印“Update Ready”,在5s内判断是否接收任意字符的串口数据,如果接收到,则是进入更新程序代码,擦除串口缓存,用户程序区,打印“Update Send Data”,此时,通过串口将程序代码(txt文件)发送,根据程序代码指定地址,将数据写入指定的地址区域,完成后,打印“Update End”,跳转到用户程序空间,开始执行用户程序。

引导程序不需要更改链接文件(.xcl),直接编译,通过JTAG直接烧录,引导程序较小,默认烧录在引导程序区,如果引导程序较大,重新划分引导程序储存区。

划分MSP430程序存储区区

改变用户程序的链接文件,将MSP430存储区划分为引导程序区、用户中断向量地址和用户程序空间的3个区域。在IAR软件中,打开MSP430的连接文件(.xcl),可以查看存储区域的划分。如式(2)所示。

-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=4000-FFDF (2)

-Z(CODE)CSTART,ISR_CODE,CODE_ID=4000-FFDF

-P(CODE)CODE=4000-FFDF

-Z(CODE)INTVEC=FFE0-FFFF

-Z(CODE)RESET=FFFE-FFFF

式(3)是重新划分区域的连接文件。使用式(3)替换掉式(2),划分用户中断向量地址、用户程序空间,生成新的连接文件(lnk430f1611_app.xcl)。编译用户程序,采用该文件作为链接文件生成的程序文件(.txt)。

-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=4000-F9DF (3)

-Z(CODE)CSTART,ISR_CODE,CODE_ID=4000-F9DF

-P(CODE)CODE=4000-F9DF

-Z(CODE)INTVEC=F9E0-F9FF

-Z(CODE)RESET=F9FE-F9FF

上位机软件编写

采用C#编写简单串口助手,定时发送用户程序文件(.txt)即可,软件界面显示如图3.2所示,点击更新复位(随意发送字符)。

5ed5b35557baa_html_4ccaead06ac603e5.png

图3.2 升级界面

4MSP430远程更新程序验证

采用默认链接文件,通过JTAG将引导程序烧录到MSP430单片机。编写LED闪烁(1是间隔),编译采用lnk430f1611_app.xcl作为链接,输出txt格式烧录文件。通过串口助手将烧录文件发送到MSP430板卡,烧录结果如图4.1,对比图2.2,结果完全一致。烧录完成后,LED灯的闪烁(1s间隔),重新上电,LED灯闪烁(1s间隔),与通过JTAG烧录文件现象一样(默认的链接文件)。验证该方法可以通过串口完成MSP430程序的烧录。

5ed5b35557baa_html_c3fc09a61223f5c8.png

5ed5b35557baa_html_195acd171d8ab8d3.png

图4.1 串口烧录程序地址数据

结束语

本文分析MSP430程序更新的原理,同时介绍基于串口的MSP430远程程序更新的原理和实现方法,验证了该方法可行性。该更新方法已运用在水下设备的程序更新,只需引出2根性(RS485),或是3根(RS232)导线,节约了水下设备的更新程序的时间,简化了更新程序步骤。

MSP430系列超低功耗单片机及应用探究[J].席小卫,徐京,王雨琦,李昌霖.中国新通信.2020(02)

MSP430系列超低功耗单片机及应用[J]. 杨平,王威.  国外电子测量技术. 2008(12)

水上/水下无人设备[J].王娜娜.船舶工程.2020(2)

MSP430单片机程序升级方式探讨[J].袁娟.孙克怡.闫建国.单片机与嵌入式系统应用.2006(6)