为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

204msp430_boot[1]

2011-09-05 45页 pdf 446KB 14阅读

用户头像

is_571449

暂无简介

举报
204msp430_boot[1] 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 1 前前前前 言言言言 本手册简单介绍了利用 MSP430 Flash 系列芯片内部的启动程序载入器(Bootstrap),通过 MSP430的 P1.1和 P2.2进行程序下载的方法. 利用这种方法自制的编程器,可以脱机操作 设定编程次数,方便现场操作. 另外,当通过 JTAG 口将程序加密后,还可通过此方法进行程序下载,但不能读出...
204msp430_boot[1]
利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 1 前前前前 言言言言 本简单介绍了利用 MSP430 Flash 系列芯片内部的启动程序载入器(Bootstrap),通过 MSP430的 P1.1和 P2.2进行程序下载的方法. 利用这种方法自制的编程器,可以脱机操作 设定编程次数,方便现场操作. 另外,当通过 JTAG 口将程序加密后,还可通过此方法进行程序下载,但不能读出. 本手册是根据 TI 光盘中的 SLAA096.pdf 文件翻译过来(现有最新 SLAA096A).手册中 所提及的文档在 TI的光盘中均可找到,读者若需要相关资料请与我们联系. 在翻译过程中得到本公司诸位同事的大力支持,在此一并表示感谢.本手册翻译的目的主 要是方便读者了解 利用 MSP430,由于译者的学识水平有限,翻译中难免有错误和不妥之处, 恳请读者批评指正. 译者 2001年 6月 启动程序载入器启动程序载入器启动程序载入器启动程序载入器(Bootstrap)在在在在MSP430F11X-硬件和软件中的应用建议硬件和软件中的应用建议硬件和软件中的应用建议硬件和软件中的应用建议 摘要摘要摘要摘要 由带 Flash Memory的 MSP430引申出来的启动程序载入器(Bootstrap) 也叫引导加载 允许在样品 成品 甚至在程序区访问其内置存储器 可以在 Flash Memory(electrically- erasable and programmable memory)中下载或修改代码 在 Flash Memory 或 RAM中存储标 准数据或其它系统相关数据 本应用手册描述了通过计算机串口 RS-232 访问MSP430F11X-芯片 F1121 F1101 F112和 F110等芯片 的启动程序载入器(Bootstrap)实现程序下载的简单的 低成本的软硬 件解决方法 本说明提供的及 C-源代码软件程序允许根据特定的要求来修改 目录目录目录目录 前言前言前言前言……………………………………………………………………………………1 摘要……………………………………………………………………………………1 绪论……………………………………………………………………………………3 启动程序载入器(Bootstrap)的基本要素……………………………………………..3 2.1 调用启动程序载入器(Bootstrap)………………………………………………..3 2.2 访问启动程序载入器(Bootstrap)………………………………………………..3 2.3 启动程序载入器(Bootstrap)的功能………………………………………………4 2.3.1非保护功能………………………………………………………………4 2.3.2保护功能…………………………………………………………………4 硬件描述………………………………………………………………………………4 3.1 供电方式…………………………………………………………………………..5 3.2 串口界面…………………………………………………………………………..5 3.2.1电平移位…………………………………………………………………5 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 2 3.2.2 RST/NMI和 TEST引脚的控制………………………………………..6 3.2 元件清单…………………………………………………………………………6 软件描述……………………………………………………………………………..7 4.1 全局变量…………………………………………………………………………7 4.2 RS-232口初始化…………………………………………………………….…7 4.3 调用启动程序载入器(Bootstrap)…………………………………………….…9 4.4 访问启动程序载入器(Bootstrap)………………………………………………10 4.4.1 同步………………………………………………………………………10 4.4.2 传输格式…………………………………………………………………11 4.5 调用启动程序载入器(Bootstrap)函数…………………………………………11 4.6 释放 RS-232口…………………………………………………………………12 4.7 一个完整应用程序……………………………………………………………..12 4.8 错误校验………………………………………………………………………..13 4.9 早期版本启动程序载入器(Bootstrap)的补丁…………………………………14 参考书目……………………………………………………………………………15 附录附录附录附录 A 清单……………………………………………………………………………16 附录附录附录附录 B PCB 设计建议…………………………………………………………………17 附录附录附录附录 C 示范程序使用方法……………………………………………………………18 图形列表图形列表图形列表图形列表 1 启动用户程序时 RST/NMI和 TEST的顺序………………………………………3 2 启动启动程序载入器(Bootstrap)时 RST/NMI和 TEST的顺序………………..…3 3 发送到启动程序载入器(Bootstrap)的格式…………………………………………4 4 启动程序载入器(Bootstrap)的接口示意图…………………………………………5 B-1 组成结构……………………………………………………………………………45 B-2 PCB设计……………………………………………………………………………45 表格列表表格列表表格列表表格列表 1 启动程序载入器(Bootstrap)的 UART设置…………………………………………3 2 启动程序载入器(Bootstrap)功能一览………………………………………………4 3 串口信号和引脚分配………………………………………………………………..5 4 RS-232电平………………………………………………………………………….6 5 元件清单…………………………………………………………………………..…6 6 附加连接器/衰减器……………………………………………………………….…6 7 启动程序载入器(Bootstrap)访问函数………………………………………………10 C-1命令行参数………………………………………………………………………….46 C-2 程序流修饰…………………………………………………………………………46 C-3 调用举例……………………………………………………………………………46 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 3 1 绪论绪论绪论绪论 由带Flash Memory(electrically-erasable and programmable memory)的MSP430引申出来的启动 程序载入器(Bootstrap)允许在几秒钟之内修改数据和程序代码 不再需要使用紫外线 UV 擦除EPROM的时间 控制单元中的部分 启动程序载入器(Bootstrap) 在带Flash Memory 的MSP430芯片中实现访问并使用这些特征 中阐述了用硬件和软件解决从PC到提供 控制访问加载器及简单使用启动程序载入器(Bootstrap)的方法 启动程序载入器启动程序载入器启动程序载入器启动程序载入器(Bootstrap)的基本要素的基本要素的基本要素的基本要素 本章叙述了启动程序载入器(Bootstrap)的基本要素和使用方法 详细请参见 MSP430F11x (SLAS256) 或者MSP430F11x1 (SLAS241)文档和MSP430 Bootstrap Loader in the MSP430F1121(SLAA089)应用手册 启动程序载入器(Bootstrap)是一种编程方法 它允许通过串行连接和MSP430通讯 甚 至在Flash Memory 被完全擦除时 不要同某些数字信号处理器 DSP 的从外部存储器向 DSP内部存储器自动装载程序代码或 数据 相混淆 这些编程方法也常被化归为启动程 序载入器(Bootstrap) 2.1 调用启动程序载入器调用启动程序载入器调用启动程序载入器调用启动程序载入器(Bootstrap) MSP430的启动程序载入器(Bootstrap)不会自动启动 需要对RST/NMI和TEST引脚设 置特殊的顺序 当TEST脚下降而RST/NMI为上升沿 图1 复位向量位于Memory地址 0FFFEh时 用户程序开始 图2显示了启动启动程序载入器(Bootstrap)所需的顺序 启动顺 序的详细资料请见上面所提及文档 2.2 访问启动程序载入器访问启动程序载入器访问启动程序载入器访问启动程序载入器(Bootstrap) 使用TEST和RST/NMI脚调用启动程序载入器(Bootstrap)后 通讯可以用一个的异 步串口确定 用MSP430的P1.1口 BSLTX 传输数据 P2.2口 BSLRX 接收数据 UART设置见表1 表表表表1.启动程序载入器启动程序载入器启动程序载入器启动程序载入器(Bootstrap)的的的的UART设置设置设置设置 设置 值 波特率 9600波特 数据位 8 二进制 寄偶位 偶 停止位 1 用于与启动程序载入器(Bootstrap) 的通讯协议来源于一个更复杂的协议 这增加了一 些开销 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 4 首先PC机必须发送一个同步字节 如果启动程序载入器(Bootstrap)正确接收该字符 将返回一个确认字节 同步通讯成功以后 PC机发送一帧包含命令和数据的字符 该帧 见图3 能被分割 成报头段 数据段及检验和 数据段总是包含至少4个字节的数据 通常为一个起始地址和 长度 但是一些命令可以忽略其或不同的意义 在字 2字节 的情况下 字节的顺序 总是从低字节到高字节 报头段 数据段 检验和 Hdr 0X80 始终 A 地址 其始 Cmd 被请求函数代码 L 长度 L1 L2 数据段字节个数 lo 低字节 hi 高字节 图图图图3.发送启动程序载入器发送启动程序载入器发送启动程序载入器发送启动程序载入器(Bootstrap)的格式的格式的格式的格式 处理完该格式后 启动程序载入器(Bootstrap)也返回一个确认信号 如果该格式不正 确则返回拒绝信号或命令失败信号 如果该命令不允许则发出命令失败信号 2.3 启动程序载入器启动程序载入器启动程序载入器启动程序载入器(Bootstrap)功能功能功能功能 启动程序载入器(Bootstrap)具有保护和非保护功能 要实现保护功能则必须将程序的 所有中断向量表 位于地址范围0FFE0h到0FFFFh之间 发送到启动程序载入器(Bootstrap) 本节给出了能用到的命令的提要 这些命令及其使用方法在本应用手册中的另一个文 档和软件部分有更详细的说明 2.3.1非保护功能非保护功能非保护功能非保护功能 设置口令 能实现保护功能 块擦除 完全擦除Flash Memory 访问保护功能的口令为32位 十六进制 2.3.2保护功能保护功能保护功能保护功能 发送模块 写数据到MSP430的存储器 接收模块 从MSP430存储器中读数据 擦除段 装载程序计数器 开始执行 表表表表2 启动程序载入器启动程序载入器启动程序载入器启动程序载入器(Bootstrap)功能一览功能一览功能一览功能一览 3 硬件描述硬件描述硬件描述硬件描述 在本应用手册中低成本硬件的提出 图4 主要由 一个低压差稳压器(low-dropout voltage regulator) 几个反向器和一个运算放大器 以及一些电阻 电容 二极管等组成 完整元件列在本节后面 下面详细介绍其功能模块 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 5 图图图图4 启动程序载入器启动程序载入器启动程序载入器启动程序载入器(Bootstrap)接口示意图接口示意图接口示意图接口示意图 3.1 供电方式供电方式供电方式供电方式 启动程序载入器(Bootstrap)硬件可以通过RS-232接口供电 RS-232信号DTR 串口连接器 第7脚 和RST 串口连接器第4脚 通常送给负载电容C1一正向电压 及低压差稳压器 (low-dropout voltage regulator)IC1(Texas Instruments TPS76030 or LP2980-3.0, or equivalent 3- V low-dropout regulator).供电 使用一个相当大的电容器 可以提取一个向Flash Memory编程所需要的高于串口所能 提供的短周期电流 也可以连接一个外部供电电压 Vext CON4 或者通过JTAG连接器的第2脚向硬件 供电 二极管防止反向电流 3.2 串口界面串口界面串口界面串口界面 表3为用于与启动程序载入器(Bootstrap)通讯的信号 所提及名称的引脚功能是由PC引 出 例如 PC经过RxD脚接收数据 反之启动程序载入器(Bootstrap)需要驱动该信号 带 有后缀-D的连接器与PC连接器组合的引脚分配显示 由外部看来 表表表表3.串口信号和引脚分配串口信号和引脚分配串口信号和引脚分配串口信号和引脚分配 3.2.1 电平移位电平移位电平移位电平移位 简单的 带有施密特触发器的CMOS反向器 IC2 被用于转换RS-232电平 见表4 为3-V CMOS电平 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 6 表表表表4.RS-232电平电平电平电平 依靠过电压保护所选设备 其剩余电压被送到VCC TI 74HC14 或GND TI 74AHC14 如果保护二极管导向VCC 则电压稳压器需要补偿过电压 这样74AHC14芯 片导向地面 GND 推荐 而74HC14也正常工作 为避免过剩电压浪费和保护二极管的损坏 串联电阻器 R1 R2和R3 用于限制输入 电流 运算放大器 IC3 用于产生3-V CMOS电平之外的RS-232电平 正向输入电平设置为 VCC/2 通常为1.5-V 如果负向输入电平超过该电平 输出电平将被导向运算放大器的 负向端 标志 如果电平低于VCC/2,则输出将被导向正向范围 隔离 运算放大器的正向供电与稳压器的输入相同 隔离电容 C10 用来产生负向供电电 压 该电容由启动程序载入器(Bootstrap)硬件 串口连接器的第5脚 的接收信号控制 在异步串口通讯期间 停止位和起始位相结合为同步发送器和接收器 当一个数据字 节发送后 停止位驱动发送行为已定义的状态 通常为逻辑位1 或在RS-232中标志 这 意味着当没有传送数据和电容被控制时 传送行电压为负向 二极管用于防止在传送期间 电容放电 因为用于启动程序载入器(Bootstrap)的通信协议是半双工的 一次一个发送端 所以 接收行的电压是负向 稳定的 且能被用于提供运算放大器所需电压 3.2.2 RST/NMI和和和和TEST引脚的控制引脚的控制引脚的控制引脚的控制 MSP430的RST/NMI和TEST引脚分别由DTR和RTS信号控制 正如已提及的 这两个 信号通常必须传送一个正向电压给启动程序载入器(Bootstrap)的硬件 它们也被用于控制 RST/NMI和TEST引脚的电平 RST/NMI和TEST引脚的电压在常规操作期间 分别为逻辑1和逻辑0 为完成这些电平 和使用相应的RS-232信号作为供电行 需要对RST/NMI引脚使用两个反向器 TEST引脚使 用一个反向器 允许通过控制RS-232的二极管来防止电容C1放电 RST和DTR 3.3 元件清单元件清单元件清单元件清单 表表表表6.附加连接器附加连接器附加连接器附加连接器/衰减器衰减器衰减器衰减器 表表表表5.元件清单元件清单元件清单元件清单 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 7 4 软件描述软件描述软件描述软件描述 本节说明了使用PC的RS-232接口访问启动程序载入器(Bootstrap)的基本顺序 这里给 出的代码为使用32-位WindowsTM API 在Microsoft Visual C++TM5.0环境下调用 也可工作 在Microsoft Visual C++TM 6.0版本下 该代码最初写于16-位Windows 主要由替换函数名 扩展为32-位Windows(Win32TM, Windows 95/98TM, and Windows NTTM) 某些Win32的特征不 能继续被移植 用商业库可以取代Windows API界面 一个详细描述在Win32中的串口通信 Serial Communications in Win32 文件 在线网 址 http://msdn.microsoft.com/library/techart/msdn_serial.htm 或参照微软开发网络库的VC++ 在线文件 详细描述API功能的使用文件请参照Windows软件开发包 SDK 附录A有完整的清单 4.1 全局变量全局变量全局变量全局变量 下面的全局变量使用在整个代码事例中 在Windows SDK文档可以找到有关DCB COMSTAT和COMMTIMEOUTS类型定义 HANDLE hComPort; /* COM-port handle */ DCB comDCB; /* COM-port control settings */ COMSTAT comState; /* COM-port status information */ COMMTIMEOUTS orgTimeouts; /* Original COM-port time-out */ 4.2 RS-232口初始化口初始化口初始化口初始化 程序访问串口RS-RS232时需要请求要使用口 通常为COM1 COM2 的句柄 下面 代码可用于这类请求 /* Size of internal WINDOWS–Comm buffer: */ 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 8 #define QUEUE_SIZE 512 . . . char* lpszDevice= ”COM1” /* For example ... *./ . . . hComPort= CreateFile(lpszDevice, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); if (hComPort == INVALID_HANDLE_VALUE) { . . . /* Error! */ } if (SetupComm(hComPort, QUEUE_SIZE, QUEUE_SIZE) == 0) { . . . /* Error! */ } Microsoft, Windows, Win32, Windows NT, Windows CE, and Visual C++ are trademarks of Microsoft Corporation. 大家知道复用输入/输出 I/O 口可以在Win32下完成 意味着系统可以立即返回回调 当操作完成后发出信号通知回调 甚至在I/O操作没有完成时 当涉及到移植性时 复用操 作不是一个很好的选择 因为大多数操作系统不支持它 因此它没有用在此程序中 当使 用回调函数CreateFile时 相映的变量参数置为零 收到一个有效的句柄后 通讯口的设置需要被定义和赋值 见表1 首先 获得初始设置 if (!GetCommState(hComPort, &comDCB)) { . . . /* Error! */ } 然后 可以修改 启动程序载入器(Bootstrap)的通讯的最重要的设置显示在下面的程 序段 comDCB.BaudRate = CBR_9600; /* Startup Baudrate: 9,6kBaud */ comDCB.ByteSize = 8; comDCB.Parity = EVENPARITY; comDCB.StopBits = ONESTOPBIT; comDCB.fBinary = TRUE; /* Enable Binary Transmission */ comDCB.fParity = TRUE; /* Enable Parity Check */ comDCB.fRtsControl = RTS_CONTROL_ENABLE; /* For power supply and TEST */ /* pin control */ comDCB.fDtrControl = DTR_CONTROL_ENABLE; /* For power supply and RST/NMI */ /* pin control */ . . . 最后 修改值赋给端口 if (!SetCommState(hComPort, &comDCB)) { . . . /* Error! */ } 一个Win32的应用在使用通讯口时总是要设置通讯暂停时间 否则 使用默认值或上 一级应用的余值 该应用不需要暂停功能 因此 一旦最初设置被保存 暂停完全丧失 可在程序的末尾恢复 /* Save original time-out values: */ GetCommTimeouts(hComPort, &orgTimeouts); 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 9 /* Set Windows time-out values (disable built-in time-outs): */ COMMTIMEOUTS timeouts; timeouts.ReadIntervalTimeout= 0; timeouts.ReadTotalTimeoutMultiplier= 0; timeouts.ReadTotalTimeoutConstant= 0; timeouts.WriteTotalTimeoutMultiplier= 0; timeouts.WriteTotalTimeoutConstant= 0; if (!SetCommTimeouts(hComPort, &timeouts)) { . . . /* Error! */ } 利用清除发送和接收缓冲器来完成初始化的顺序 PurgeComm(hComPort, PURGE_TXCLEAR | PURGE_TXABORT); PurgeComm(hComPort, PURGE_RXCLEAR | PURGE_RXABORT); 一个完整的初始化程序可以在Serial Communication Implementation File 见附录A 中 找到 int comInit(LPCSTR lpszDevice, DWORD aTimeout, int aProlongFactor) 4.3 调用启动程序载入器调用启动程序载入器调用启动程序载入器调用启动程序载入器(Bootstrap) RST/NMI和TEST的电平必须按照2.1节的指示来调用启动程序载入器(Bootstrap) 下面的子程序可以用来控制相应的RS-232队列RST和DTR void SetRSTpin(BOOL level) /* Controls RST/NMI pin (0: GND; 1: VCC) */ { if (level == TRUE) comDCB.fDtrControl = DTR_CONTROL_ENABLE; else comDCB.fDtrControl = DTR_CONTROL_DISABLE; SetCommState(hComPort, &comDCB); } /* SetRSTpin */ void SetTESTpin(BOOL level) /* Controls TEST pin (0: VCC; 1: GND) */ { if (level == TRUE) comDCB.fRtsControl = RTS_CONTROL_ENABLE; else comDCB.fRtsControl = RTS_CONTROL_DISABLE; SetCommState(hComPort, &comDCB); } /* SetTESTpin */ 调用函数SetRSTpin使RST/NMI 接地为0 反之调用SetTESTpin使TEST供电电源VCC 为0 其不同值起决于这些引脚所使用的反向器的个数 见第3章 下面的子程序允许使用上面显示的函数来对MSP430启动程序载入器(Bootstrap)的硬件 复位 首先 需要控制电容C1对电路板供电 接着 RST/NMI和TEST脚可以根据需要来 触发 然后 可以复位MSP430及启动应用程序(invokeBSL=FALSE) 或者用 invokeBSL=TRUE调用启动程序载入器(Bootstrap) 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 10 void bslReset(BOOL invokeBSL) { /* To charge capacitor on boot loader hardware: */ SetRSTpin(1); SetTESTpin(1); delay(250); SetRSTpin(0); /* RST pin: GND */ if (invokeBSL) { SetTESTpin(1); /* TEST pin: GND */ SetTESTpin(0); /* TEST pin: Vcc */ SetTESTpin(1); /* TEST pin: GND */ SetTESTpin(0); /* TEST pin: Vcc */ SetRSTpin (1); /* RST pin: Vcc */ SetTESTpin(1); /* TEST pin: GND */ } else { SetRSTpin(1); /* RST pin: Vcc */ } /* Give MSP430’s oscillator time to stabilize: */ delay(250); /* Clear buffers: */ PurgeComm(hComPort, PURGE_TXCLEAR); PurgeComm(hComPort, PURGE_RXCLEAR); } /* bslReset */ 到目前为止 可以获得访问RS-232接口的PC界面和使用当前函数调用启动程序载入器 (Bootstrap) 我们现在准备访问启动程序载入器(Bootstrap) 4.4 访问启动程序载入器访问启动程序载入器访问启动程序载入器访问启动程序载入器(Bootstrap) 本节描述了访问启动程序载入器(Bootstrap)的基本子程序 表7给出了当前函数的简要 说明 在附录A中有详细的清单 常数定义位于清单前部 表表表表7. 启动程序载入器启动程序载入器启动程序载入器启动程序载入器(Bootstrap)访问函数访问函数访问函数访问函数 4.4.1 同步同步同步同步 在调用一个函数的每种格式前PC和MSP430需要同步 因此 下面的参数 0x80 必 须由PC发送到MSP430 #define BSL_SYNC 0x80 这样 该参数被设为一变量且被函数WriteFile当作通讯口句柄的第一个参数回调 要 传送字节的数量必须被指定 这里指定为1 在这种情况下最后两个参数是不重要的 可 以忽略的 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 11 /* Send synchronization byte: */ ch = BSL_SYNC; WriteFile(hComPort, &ch, 1, &NrTx, NULL); 如果启动程序载入器(Bootstrap)正确接收该参数 将返回DATA_ACK 0X90 否则 将返回一个未知参数 因为加载器需要该同步字符去产生同步 例如 串口通讯 没有 参数被传回也是可能的 比如 当MSP430启动程序载入器(Bootstrap)函数没有连接时 下 面子程序是用来检测给定字符数在给定时间内收到 用函数ClearCommError来接收通讯口 的实际状态 在COMSTAT结构中用cbInQue保存接收字节的数量 int comWaitForData(int count, DWORD timeout) { DWORD errors; int rxCount= 0; DWORD startTime= GetTickCount(); do { ClearCommError(hComPort, &errors, &comState); } while (((rxCount= comState.cbInQue) < count) && (calcTimeout(startTime) <= timeout)); return(rxCount); } 该子程序用于同步函数中等待某个字符 如果字符被接收 可以使用函数ReadFile查 询 可在下面的程序段中看到 当接收字符为DATA_ACK时 同步成功 /* Wait for 1 byte; time-out: 100ms */ rxCount= comWaitForData(1, 100); if (rxCount > 0) { ReadFile(hComPort, &ch, 1, &NrRx, NULL); if (ch == DATA_ACK) { return(ERR_NONE); } /* Sync. successful */ } 程序 int bslSync()实现预先描述的函数 4.4.2 传送格式传送格式传送格式传送格式 下面的函数用于发送和接收的格式 int comTxRx(BYTE cmd, BYTE data[], BYTE length) 该函数实现TI标准串口协议的功能 仅需一个函数的子集和启动程序载入器(Bootstrap) 通讯的支持 使用Win32功能的程序已经描述过 函数 int bslTxRx(BYTE cmd, WORD addr, WORD len, BYTE blkout[], BYTE blkin[]) 结合同步和传输的格式 也准备了启动程序载入器(Bootstrap)所需的格式 一个重要 的条件是发送到 例如 使用RXBLK命令 启动程序载入器(Bootstrap)或加载器请求 使 用RXBLK命令 的字节的个数应该总是相等 4.5调用启动程序载入器调用启动程序载入器调用启动程序载入器调用启动程序载入器(Bootstrap)函数函数函数函数 使用当前函数bslTxRx调用启动程序载入器(Bootstrap)功能是相当简单的 在函数调用 期间根据需要设置参数 见4.7部分例子 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 12 可用到命令的相应常数定义可以在启动程序载入器(Bootstrap)的通讯头文件中找到 见 附录A 4.6 释放释放释放释放RS-232口口口口 程序结束后 RS-232口必须用函数 CloseHandle(hComPort) 释放 否则 其它应用程序不能使用 因为串行通讯口通常一次只允许一个程序正确访问 例程 int comDone() 提供了一个更完善的解决方法 一直等到所有等待数据传送完 清空所有缓冲器 恢复 初始暂停时间设置 注意 通常切断应用电源来关闭串行通讯口 因为经过串口的相应的串口控制线已丧失 4.7 一个完整应用事例一个完整应用事例一个完整应用事例一个完整应用事例 本节介绍了用TI-TXT格式向MSP430的flash memory编程的一个小的应用事例开发 完 整的示范程序代码列在附录A中的Bootstrap Loader Demonstration Program中 本节使用的 变量定义也在那里 首先 通讯口必须打开 COM-口的名字可以根据需要而改变 或者从命令行获得 if (comInit(”COM1”, DEFAULT_TIMEOUT, 4) != 0) { . . . /* Error! */ } 然后 启动程序载入器(Bootstrap)被调用: bslReset(1); 接下来 使用块擦除命令将flash memory全部擦除 if ((error= bslTxRx(BSL_MERAS, /* Command: Mass Erase */ 0xff00, /* Any address within flash memory. */ 0xa506, /* Required setting for mass erase! */ NULL, blkin)) != 0) { . . . /* Error! */ } 当flash memory被擦除 访问启动程序载入器(Bootstrap)保护功能的口令复位 所有寄 存器单元被设为0FFh 可以发送相应口令激活保护功能 /* Fill blkout with 0xff */ for (i= 0; i < 0x20; i++) { blkout[i]= 0xff; } if ((error= bslTxRx(BSL_TXPWORD, /* Command: transmit password */ 0xffe0, /* Address of interrupt vectors */ 0x0020, /* Number of bytes */ blkout, blkin)) != 0) { . . . /* Error! */ /* Special case here: 7(ERR_RX_NAK): Password not accepted! */ } 最后 分析TI-TXT文件格式 将数据写入到flash memory并校验 这里有一个单独的子程序清单 它能够从主程序分析文件 编程 校验FLASH内容中 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 13 调回 /* Program: */ if ((error= programFlash(”TEST.TXT”, ACTION_PROGRAM)) != 0) { . . . /* Error! */ } /* Verify: */ if ((error= programFlash(”TEST.TXT”, ACTION_VERIFY)) != 0) { . . . /* Error! */ } 程序programFlash对给定文件名进行简单分析 文件名来源于命令行 提取数据填 充缓冲器 当缓冲器几乎满时调用其它子程序 如果该数据需要编程 可以使用传送块命令(BSL_TXBLK)发送到启动程序载入器 (Bootstrap) error= bslTxRx(BSL_TXBLK, addr, len, blkout, blkin); 利用从启动程序载入器(Bootstrap) 读模块BSL_RXBLK 读出的数据与发送缓冲器中 的内容作比较来校验 error= bslTxRx(BSL_RXBLK, addr, len, NULL, blkin); if (error != 0) { . . . /* Cancel! */ } else { for (i= 0; i < len; i++) { /* Compare data in blkout and blkin: */ if (blkin[i] != blkout[i]) { printf(”Verification failed at %x (%x, %x)\n”, addr+i, blkin[i], blkout[i]); return(ERR_VERIFY_FAILED); /* Verify failed! */ } } } /* for (i) */ 注意 一个类似的数列可以用于检查擦除的范围 在这种情况下 blkin的内容和擦除 模式0xff相比较 检查成功后 MSP430可以复位 用户程序可以开始执行 bslReset(0); 串行通讯口在程序结尾释放 comDone(); 现在 用户已有所有部分的资源去写自己的应用程序 访问MSP430的启动程序载入器 (Bootstrap)及根据特殊需要修改 4.8 错误校验错误校验错误校验错误校验 在示范程序中没有错误校验的装置 当发现错误时编程失败 在某些情况下某些错误 校验装置是很有用的 如果 发送到MSP430的数据格式因为数据未知信号(DATA_NAK)而被拒绝 传送格 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 14 式可能简单重复 但是 错误的数据可能已经被编程到FLASH 一个更复杂的装置 包 含校验 擦除和再编程是需要的 如果 接收格式是不正确的(wrong checksum, inconsistent lengths) 从MSP430发送到接 收模块的上一级命令需要重复 4.9 最初版本的启动程序载入器最初版本的启动程序载入器最初版本的启动程序载入器最初版本的启动程序载入器(Bootstrap)补丁补丁补丁补丁 最初版本的启动程序载入器(Bootstrap)向FLASH编程需要一个小的补丁 该补丁在本 节中描述 它的句柄包含在程序BSLDEMO.C (见附录A中the Bootstrap Loader Demonstration Program 清单)中 附录A中还能找到所需TI-TXT文件WAROUND.TXT 示范程序中的补丁句柄可以用删除关闭 启动程序载入器(Bootstrap)将来版本 或 注释 见下面 #define WORKAROUND 代码部分所需要的工作区由预处理命令包围 #ifdef WORKAROUND . . . #endif 获得访问被保护的启动程序载入器(Bootstrap)的命令后 需要调回装载器代码的子程 序 准备补丁中堆栈的指针 这可以由装入PC地址的启动程序载入器(Bootstrap)来完成 if ((error= bslTxRx(BSL_LOADPC, /* Command: load PC */ 0x0C22, /* Address to load into PC */ 0, /* No additional data! */ NULL, blkin)) != 0) { . . . /* Error! */ } 再次调用函数锁存保护命令 口令必须重新发送 然后补丁能被写到RAM中 支持补丁的TXT文件WROUND.TXT可以在附录A中找到 下载完成后使用flash-programming函数分析文件 programFlash(”WAROUND.TXT”, ACTION_PROGRAM | ACTION_VERIFY); 既然这样 在单次发送中使ACTION_PROGRAM 和 ACTION_VERIFY用在一起进行 编程和校验补丁 也就是说文件WAROUND.TXT仅被读取一次 注意 补丁必须位于与执 行程序相同的位置 现在已准备好向flash memory编程 如果编程范围扩展 或者位于地址范围0x1000到 0xffff flash memory所在范围 在发送程序数据格式之前 PC仅仅需要下载补丁起始地 址 0x0220 #ifdef WORKAROUND if (addr + len >= 0x1000) { error= bslTxRx(BSL_LOADPC, /* Command: Load PC */ 0x0220, /* Address to load into PC */ 0, /* No additional data! */ NULL, blkin); if (error != 0) return(error); } #endif error= bslTxRx(BSL_TXBLK, addr, len, blkout, blkin); 利尔达电子 中国 有限公司 电话 0571-88800000 88886195 传真 0571-88805970 15 即使发送格式有一个确定的校验核 还是有一个小错误可能影响存储器单元 RAM或 外围模块寄存器 普通的工作区是不允许 这个错误与向flash memory编程的补丁无关 在所有其他情况下能被提供的唯一帮助是 如果发生这种情况时警告 该功能由包含在文 件SSP.C中的comRxTx函数 见附录A中Serial Communication Implementation File 来完成 全局变量BSLMemAccessWarning允许打开 关闭消息 { WORD accessAddr= (0x0212 + (checksum^0xffff)) & 0xfffe; if (BSLMemAccessWarning && (accessAddr < 0x1000)) { printf(”WARNING: This command might change data ” ”at address %x or %x!\n”, accessAddr, accessAddr + 1); } } 5 参考书目参考书目参考书目参考书目 1. MSP430F11x Mixed Signal Microcontroller data sheet , literature number SLAS256 2. MSP430F11x1 Mixed Signal Controller data sheet, literature number SLAS241 3. Graf, Franz. Features of the MSP430 Bootstrap Loader in the MSP430F1121, literature number SLAA089. 4. Denver, Allen. Serial Communication in Win32, Microsoft Developer Network (MSDN) Library 5. Microsoft Win32 Software Development Kit (SDK) Documentation 附录附录附录附录A 清单清单清单清单 A.1 建立示范程序建立示范程序建立示范程序建立示范程序 为建立示范程序需要编译文件bslcomm.c和bsldemo.c 以及连接生成的目标文件 不 需要编译单独的文件ssp.c 因为它直接包含在文件bslcomm.c中 另一个不同的方法 拷贝 或粘帖SSP.C的内容到bslcomm.c在下面行的位置中 移动该行 #include ”ssp.c” 例如 如果选择Win32 Console Application模板,使用Visual C++ 创建一个空的新的工 程 在工程中包括文件bsldemo.c bslcomm.c,和bslcomm.h并建立 在这之前 自动包含文 件ssp.c 和ssp.h 如果在工程中包含SSP.C文件则创建进程将失败 A.2 启动程序载入器启动程序载入器启动程序载入器启动程序载入器(Bootstrap)通讯头文件通讯头文件通讯头文件通讯头文件 bslcomm.h /**************************************************************** * * Copyright (C) 1999–2000 Texas Instruments, Inc. * ****************************************************************/ #ifndef BSLComm__H #define BSLComm__H #include ”ssp.h” /* Transmit password to boot loader: */ #define BSL_TXPWORD 0x10 /* Transmit block to boot loader: */ #define BSL_TXBLK 0x12 /* Receive block from boot loader: */
/
本文档为【204msp430_boot[1]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索