MSP430程序升级方式探讨

发布者:Changfeng520最新更新时间:2012-06-09 来源: 单片机及嵌入式系统应用 关键字:MSP430  程序升级  引导程序 手机看文章 扫描二维码
随时随地手机看文章

    对MSP430系列单片机进行编程的方式有以下3种:利用JTAG接口,利用BSL固件和利用用户自定义的升级固件。由于利用自定义升级固件进行程序升级的方式比较灵活,且用途广泛,因此本文将对其作重点介绍。

1 利用JTAG接口
    MSP430系列的单片机都集成了JTAG接口,该接口实现了遵循IEEE STD1149.1规定的测试访问端口状态机(TAP Controller)。它使用一个4线串行接口(TEST用于引脚较少的芯片)。数据或指令从TDI(测试数据输入)移入;串行数据从TDO(测试数据输出)移出;TCK(测试时钟)作为时钟信号输入;TMS(测试模式选择)信号控制TAP控制器的状态。利用该接口可移入指令和数据,从而控制目标芯片的地址线和数据线,达到读/写目标芯片Flash和仿真调试的目的。另外,TI公司推出了新型的调试接口——SPY-BI-WIRE。它采用两线制,一根为数据线(双向),另一根为时钟线。

    利用该接口的优点是,无须设计额外的电路和程序,采用仿真器即可下载程序。缺点是一旦用户为了保证代码的安全,烧断了JTAG的熔丝,那么就永久性地破坏了该接口,也就不能再使用该接口了。

2 利用BSL固件
    BSL是Bootstrap Loader的缩写,中文名称是“程序装载器”。它实质是固化在芯片中的一段通信程序(占用OC00h~1000h的地址空间),利用它可实现对Flash的擦除和读/写。由于它是固化在芯片中的,因此不必担心被更改或丢失。

    该接口使用5根线:GND、TX(P1.1/P1.0)、RX(P2.2/P1.1)、RST和TCK(TEST)。在RST和TCK(TEST)上加特定的电平时序信号,即可启动BSL程序,从而实现与目标芯片的通信。通信的字符格式是8个数据位、1个停止位和1个偶校验位。起始波特率为9 600 bps(BSL 1.6版本可更改为38 40O bps)。BSL协议要求首先接收一个80h字符用于同步时钟;然后发送应答字符90h;最后接收8个字符,并根据命令跳转到相应的处理例程。BSL程序的C语言描述如下:
    点击在新窗口中浏览产品

    其实现细节可能因版本不同而有所变化。若用户想利用它来实现程序升级,则可见参考文献[2]和[3]。利用BSL程序进行升级,优点是节省代码空间,用户无须实现自己的升级固件,而且现在已有很多现成的BSL升级工具;缺点是须预留BSL接口,且需要现场接线。[page]

3 利用用户自定义升级固件
    MSP430系列单片机的Flash存储器模块是一个可独立操作的物理存储单元。全部模块安排在同一个线性地址空间中,存储器被分为多个512字节的段(信息段大小为128/64字节)。各段可单独擦除,并且在正常工作电压下程序可对Flash进行擦写操作,因此特别适合在线程序升级(In Systerrl Programming)。

    自定义升级固件就是在程序中内置一段用于升级应用程序的代码,即可利用现有通信接口进行远程代码的升级。其实现原理是在目标芯片中放置两段代码:一段为应用程序;另一段为升级程序。两者的地址段不重叠,这样就可以利用升级程序擦除应用程序,并写入新的代码。

3.1 引导程序
   
复位后先进入引导程序,由它来决定进入升级程序或应用程序。引导程序的意义在于当应用程序不存在或出现错误时能直接进入升级程序,从而保证若升级不成功则可进行再次升级。

    引导程序的描述如下:

    点击在新窗口中浏览产品
    其中:ResetVectorvalid()函数用于检测应用程序是否存在或是否有效。实现可以检测EnterApplication的入口地址是否合法,一种简单的实现是:
#define ResetVectorValid() (RcsctVector!=FFFF)
其中:ResetVetor为应用程序的入口地址,该地址通常放在一个固定的地址中,升级程序后再修改该入口地址。Application()为应用程序,它若正常执行则不会返回,只有在接收到升级指令后才返同。可在Application()中使用return语句进入升级程序。

    Updata()为升级程序,其入口处必须加检测指令,以确认正常进入升级程序。进入升级程序后,通信端应先发送擦除指令,擦除原有代码;然后发送升级代码更新Flash。如果具有外部扩展存储器或用户程序较小,那么可先接收整个程序段,若校验正确再写入,这样可靠性会更高。

    这里有个策略就是,最先擦除包含ResetVector的块,最后写入Resetvector的值,这样可以尽量保证不会进入不完整的应用程序。

3.2 应用程序的编写
   
应用程序的编写投有大的变化,只需在通信协议中加入自定义的一个升级命令,以进入升级程序。另外,须更改链接文件(*.XCL),指定应用程序的地址范围。地址范围为2500h~F7DCh的应用程序如下(用//注释掉的为默认设置):
    点击在新窗口中浏览产品

    修改完毕后将该文件添加到工程中。编译后的代码即可作为升级代码。

3.3 升级程序的编写

    新建一个工程,按上述方法将升级代码定位到与应用程序不重叠的区域(如F800h~FFFFh),此时不修改:一Z(CONST)INTVEC=FFE0-FFFF[page]

    在升级程序中,将除复位中断外的所有中断映射到应用程序中。一种方法是嵌入汇编,采用汇编的定位指令ORG;另一种是写15个中断映射函数。例如:

//重新映射中断向量地址

点击在新窗口中浏览产品
    另外也可采用动态确定中断入口地址的方法,即将中断向量地址放入约定好的RAM中。例如:

    点击在新窗口中浏览产品
    然后在应用程序中进行中断向量的映射,例如:mtvecl[TIMERA0_VECTOR/2]=Timer_A_O;即在TIMERA0中断时执行Timer_A_0()函数。这样做的优点是可在运行时动态决定中断函数的入口,如高级语言中的虚函数(Virtual Function)。
    这两个函数块编写完毕后即可进行工程测试。

3.4 应用程序与升级程序同时完成

    如果需要两个函数在一个工程里完成,那么除了修改链接文件外,还须注意以下几点:
    ①将升级程序的所有函数定位到升缴程序空间,即在甬数前面加如下定位指令:
    #pragma locanon="UPDATECODE"
                    //UPDATECODE为升级程序所在段的名称

    ②修改函数返回调用的例程。当函数返回时会调用弹出寄存器的默认例程,而这些例程可能并不在升级程序的地址空问内。一种解决方法是利用编译环境生成的LST文件(汇编代码),逐个修改函数返回时调用的弹出寄存器例程,即可保证两者代码独立。这样做的缺点是每次更改C语言代码后,须重新修改汇编代码,比较繁琐。另一种方法是考虑到升级程序的工作就是接收和发送数据,一般无须使用中断。这样就可以在升级函数前加入一monitor编译指令.指明该函数为原子操作。这类函数入口处先压入SR并禁止中断,返回时使用RETI返回。此时编译器并不调用例程弹出保存的寄存器,而是根据进栈情况逐个弹出寄存器。

    ③更改switch语句。使用switch语句时编译器也会产生默认例程调用。很难屏蔽掉,故只有将switch修改为多个判断语句。

结语
   
本文对MSP430系列单片机的升级方案进行了详细介绍,读者只须按照一定步骤,即可轻松实现远程程序升级,这在实际应用中具有重要意义;而且本文的升级方法并不仅限于MSP430系列,也可应用到类似的单片机系列中。

关键字:MSP430  程序升级  引导程序 引用地址:MSP430程序升级方式探讨

上一篇:P87LPC761单片机控制的时间控制器系统
下一篇:多功能红外线遥控器的设计

推荐阅读最新更新时间:2024-03-16 13:01

电压采集与电流采集电路
采样电路为电压采集与电流采集电路,采样电路如图3所示。其中P6.O,P6.1为MSP430芯片的采样通道,P6.O为电压采集,P6.1为电流采集。 电压采集 因为采样信号要输入单片机MSP430内部,其内部采样基准电压选为2.5 V,因此要将输入的采样电压限制在2.5 V之下,考虑安全裕量则将输入电压限制在2 V以下,当输入电压为36 V时,采样电压为:12/(12+200)×36=2.04 V,符合要求。 电流采集 采用康铜丝进行采集。首先考虑效率问题,康铜丝不能选择过大,同时MSP430基准电压为2.5 V,且所需康铜丝需自制。考虑以上方面在康铜丝阻值选取上约为O.1Ω。3.3 PWM驱动电路的设计
[单片机]
电压采集与电流采集电路
MSP430F149 单片机利用串口向PC发送数据
#include msp430x14x.h void Init(void);//声明初始化函数 char Data = a:bcd\n ; //发送的字符串,字符串末尾通常都会有一个默认的\0结束符 void main(void) { unsigned int i,k; WDTCTL = WDTPW + WDTHOLD; Init(); //调用初始化函数 while(1) //无限次循环 { for(i=0;i 6;i++) { TXBUF0=Data ; //向缓冲器送入待发送数据 while((UTCTL0&0x01)==0); //发送缓冲器有待发数据时,UTCTL0的第0位复位,进入等待 for(k=0;k 1000;k
[单片机]
MSP430内部上拉电阻的使用
简介:上下拉是否开启是否REN寄存器决定的,而上拉还是下拉是由OUT寄存器决定的,在作为输出时,随着OUT的高低,自动选择上下拉,作为输入的时候,我们也可以人为的付OUT寄存器来得到上下拉。 今天用MSP430的IO做按键,没有外部上拉电阻,发现设置内部上拉后有问题,以为只能在输出时才能用内部上拉,后面在网上搜到了这篇帖子,很好。转载一下。 今天帮助一个人测试msp430f2002,他又提出了这样的要求,输入,msp430内部上拉,我又习惯性的说,不行啊,只能输出可以内部上下拉,他是个硬件工程师,很是怀疑,其实我也怀疑。 又仔细看了下430的datasheet。对着内部电路一看,我靠,还真是。。作为一个电信专业出身的人
[单片机]
MSP430 F5529 单片机 OLED 十字路口 交通灯 动画
为了便于开发,我做了一块扩展板子: https://blog.csdn.net/x1131230123/article/details/108772807 扩展板有一些常用器件,这样开发MSP430 F5529程序的时候,就不用杜邦线连接了。当然也可以选择杜邦线连接器件,效果都一样。 Traffic light simulator. Draw a traffic intersection on the OLED display. Have cars, pedestrians, and bicycles randomly move across the display. When the cars approach the in
[单片机]
<font color='red'>MSP430</font> F5529 单片机 OLED 十字路口 交通灯 动画
超低功耗温度测量与显示方案
摘要 温度测量系统应用广泛,被大量应用于电厂、建材、煤化工、冶金、供热、工程机械热处理、煤质化验等温度测控领域。实现高精度、低功耗温度监测成为多种行业的需求,本文介绍了一种超低功耗温度测量显示系统的实现方法,给出了其硬件连接方式及软件工作流程,对超低功耗设计方法给出具体思路。 硬件连接 谈到低功耗方案设计,有过单片机开发经历的工程师基本都会想到欧美知名芯片厂商的MSP430超低功耗MCU,MSP430在功耗控制方面处在行业领先水平,但片内资源有限,在进行高精度温度测量时需要采集温度传感器的微弱信号,12位的片内ADC就不能满足要求,需要外加仪表放大器和高精度ADC,以满足温度传感器信号的高精度测量,通常选择AD7794或ADS
[单片机]
超低功耗温度测量与显示方案
基于MSP430的无极性恒流电刺激器的设计
电刺激治疗方法是当今临床康复和日常物理治疗最常用和最重要的手段之一,具有镇痛、消肿、消炎、脱敏、缓解肌肉痉挛、加强组织张力、促进恢复正常的神经传导和调节功能等治疗作用。无极性微分型指数波形,由电荷相等的正负脉冲波构成,负指数脉冲起神经纤维去极化作用,正脉冲起电荷平衡的作用,具有避免组织损伤的特点 。   本文提出了一种双极性恒流电刺激器的设计方案,并给出了具体的实现方法,该刺激器可用于合成多种信号调幅的无极性指数脉冲,不仅能满足治疗效果,还兼顾了刺激的安全性。   2、系统硬件结构与设计   系统硬件结构包括MSP430F4270主控芯片、信号合成模块以及信号输出模块,如图1所示。 图1 系统硬件结构框图   调
[单片机]
基于<font color='red'>MSP430</font>的无极性恒流电刺激器的设计
MSP430用按键中断控制定时器产生持续 1s 的周期信号
////////////////////////////////////////////////////////////////////////////////////////////////////// // 2012 年吉林省大学生电子设计大赛 C题 声源定位系统 ----(声源部分) // 要求: 有信号产生电路, 放大电路, 声音频率 800Hz 左右, 按一次键响声持续 1 秒. // 声源模块体积不超过 4cm*4cm*4cm. //======================================================================================
[单片机]
基于MSP430的SLED控制系统的设计
自1971年Kurbativ等人首次制备出半导体SLED以来,SLED得到了惊人的发展。特别是近几年,其在光纤陀螺仪、光纤传感、光时域发射仪等方面得到了广泛的应用。SLED兼有LD和LED的优点,是一种自发辐射单程光放大非相干光源,具有发射谱宽、高输出功率、体积小、质量轻的特点。另外,由于其时间相干性短和空间相干性长,能有效地将光耦合进单模光纤。 对于SLED来说,其出射光功率及中心波长会随着驱动电流和管芯温度的漂移而发生变化。为了获得良好的光源性能,SLED管芯的电流和温度控制精度必须达到一定的水平。基于实现输出功率稳定、可靠,输出波长准确的目的,笔者设计了基于MSP430F449单片机的智能数字化SLED控制系统。 SLE
[单片机]
基于<font color='red'>MSP430</font>的SLED控制系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved