介绍
这篇应用笔记描述了一个加载flash并执行(LFAE)次级bootloader的示例。这个应用是开发来增强AN2546中给出的加载RAM并执行主bootloader的,其中加入了允许随意写flash存储器的代码。
这篇文档的目的是向读者示范怎么实现一个次级bootloader。次级bootloader可以用来 在系统 或在个巨大的生产线中通过CAN或SCI接口将应用程序代码编程进设备,这样就不需要在生产中使用BDM接口来编程应用程序了。它假设主bootloader已经通过BDM或者第三方程序商编程进设备了。
一个运行在32位Windows *** 作系统PC上的接口小工具会传输所有的数据到MCU上。通信使用的是CAN或SCI。这个接口简单示例了怎么设置和监控传输。
下面是要进行的几个步骤。前提是LRAM主bootloader已经被加载进MCU的flash存储器中了。
接口和主bootloader决定了通信的方法和速度。
接口把LFAM次级bootloader传输给MCU并存储它到RAM中,然后执行它。
LFAM次级bootloader获得控制权并与接口重建链接。
接口传输应用程序代码到MCU,这样就把代码存储到了flash中。
在完成传输后,两个bootloader都会被移除,然后就会执行代码。
这篇文档中描述的bootloader和接口软件只用于示例,由此产生的任何后果概不负责。
概述这篇应用笔记的目的是使用(AN2546给出的)LRAM bootloader的改进版本来下载一个更大的次级bootloader,这个bootloader可以把应用程序代码写入flash中。
对应的软件是AN3391SW。
缩略词CAN — 控制器区域网络,Controller area network
LFAE — 加载flash并执行,Load flash and execute
LRAE — 加载RAM并执行,Load RAM and execute
LSB — 最低有效字节,Least significant byte
MCU — 微控制器单元,Microcontroller unit
MSB — 最高有效字节,Most significant byte
RAM — 随机访问存储器,Random access memory
SCI — 串行通信接口,Serial communicaTIon interface
BDM — 背景调试模块,Background Debug Module
S-Record(SREC)bootloader能接受应用程序以S-resord(SREC)文件形式表示的二进制镜像。SREC文件给出用可印刷ASCII格式表示的二进制对象代码,使它们能很简单地在不同的系统间传输。SREC中的每一行都有一个前缀,如S1(头)或S9(尾)。与bootloader有关的前缀是S1和S2。
S1记录描述的是存储在逻辑地址中的数据,而S2记录描述的是放在全局地址中的数据。S1和S2行有同样的结构,如下:
Type字段包含前述的前缀。Record Length是一个1字节长(两个ASCII字符)的值,它说明了后面字段的字节数。Address字段给出了数据应该被写入的地址。在一个S1记录中,Address有两字节长(逻辑地址使用16位地址)。在S2记录中,Address有三字节长(标准的16位地址加上一个7bit PPAGE值)。Data字段包含要加载进存储器的数据。最后,通过加和Record Length、Address和Data字段对应的字节值然后取反来计算校验和。
需求
这个部分给出了通过主和次bootloader加载应用程序到MCU中所需的软硬件。
硬件这篇应用笔记中描述的方法需要一个S12XE MCU,其flash中要预装好主bootloader。为了测试,使用了EVB9S12XEP100 Kit开发套件。
还需要一个装着兼容32位Windows的 *** 作系统的PC来运行接口。PC必须有一个SCI端口或者如果使用CAN通信的话要有PC-CAN卡。为了测试,使用了Vector CANalyzer卡。
软件所有为MCU准备的代码都在CodeWarrior V5.70中测试。
为了保证主次bootloader间快速平滑的转换,LRAE需要一些小改动。
CANFlag结构中需要另外加一个flag来说明bootloader正在使用的是SCI还是CAN接口。
在把控制权交给次级bootloader前,需要清零CAN帧接收标志位(canrflg.rxf)。
功能描述
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)