基于串口的单片机参数在线下载方法
2018-04-09栾婷王效亮刘志蕾
栾婷 王效亮 刘志蕾
摘 要 本文研究一种利用XC164的内嵌引导程序加载机制实现控制参数在线调整的方法。文章介绍了实现机制,分析了设计原理,完整地给出了上下位机软件及接口的设计和实现情况。该方法目前已成功的应用在控制系统性能调试中,操作简单明了,提高了系统调试的工作效率,极大地减少了软件设计人员的重复工作量。
【关键词】串口 XC164 参数下载
1 引言
随着数字集成电路的高速发展,电机驱动多采用单片机或DSP来控制,控制算法采用软件编程的方式内嵌入控制芯片,实现控制要求。在控制算法建模完成后,通常需要在真实系统中对控制参数进行多次调整才能满足控制性能的要求,这需要多次更改代码中的控制参数,多次编译程序并烧写到控制芯片中,稍有不慎,就会改错地方,或在不期望变动的地方产生变动,出现安全隐患,且对后期问题的查找带来很多不便。本文介绍一种通过串口烧写控制参数的参数在线下载方法。
2 设计原理简析
本文采用英飞凌公司的XC164单片机作为控制芯片实现一种不更改程序修改参数的功能。XC164 的内嵌引导程序加载器(BSL)提供了一种加载启动程序的机制,通过串行接口实现。BSL机制可以用来加载Flash器件的编程程序。硬件复位时,进入BSL模式后将自动进行相应的初始化,引脚TxD0设置为输出,BLS向提供加载数据的主机返回一个ID字节。发送ID字节后,BLS通过ASC0接口循环接收数据,并将数据存入用户指定的任意地址单元。该数据可以是最终的应用程序代码,也可以是更高级的加载程序,还可以是一段代码。XC164芯片片上Flash存储器由多个可以独立进行写保护、擦除和编程的扇区组成,基于BSL机制,可以通过将程序和参数加载到不同的Flash区中来实现参数下载功能。
原理图如图1所示,将Flash空间分配为代码数据存储区和下载参数存储区,通过上位机软件将程序代码和下载参数分别写入Flash的不同区域中,再通过内嵌入XC164芯片的软件执行读取、使用下载参数的功能。
3 程序空间使用和分配
要实现参数下载首先需要为下载参数分配Flash空间,下面给出XC164芯片的空间分配情况和参数下载的空间分配情况。
3.1 XC164芯片空间分配
XC164的存储器空间为冯诺伊曼体系架构。即程序存储器、数据存储器、寄存器和IO口组织在同一个线性地址空间内,容量高达16MB。整个存储器空间可按字节或字访问。XC164单片机有两段片上程序存储区,可用于代码数据的存储。第一是程序Flash/ROM,可用于代码和常量数据的存储;第二是程序SRAM,可用于存储临时代码序列以及其他数据信息,掉电后数据被擦除。片上Flash存儲器由四个8KB扇区、一个32KB扇区和一个64KB扇区组成。每个扇区可分别进行写保护、擦除和编程。片上Flash模块扇区映射见图2。
扇区0:0x00C00000~0x00C01FFF(8K);
扇区1:0x00C02000~0x00C03FFF(8K);
扇区2:0x00C04000~0x00C05FFF(8K);
扇区3:0x00C06000~0x00C07FFF(8K);
扇区4:0x00C08000~0x00C0FFFF(32K);
扇区5:0x00C10000~0x00C1FFFF(64K)。
3.2 在线下载参数空间分配
在编译过程中程序会自动将代码和常量数据存贮在芯片的Flash区域中,根据编译环境的不同,存储的位置会有所差别。本文中使用的编译环境为Keil4,扇区0为代码和常量的起始存储位置,扇区2为数据的起始存储位置,为了给程序留出足够的存储空间,避免存储空间冲突,本设计将下载参数分配到扇区5,下载控制参数时只对该片Flash区单独擦写,不会影响其他区域的内容。
4 参数下载功能实现
参数下载主要需实现如图3的3个步骤,首先通过参数转换模块将参数转换成为能够烧写到控制芯片中的格式,然后通过烧写软件实现烧写功能,烧写过程中从上位机到控制芯片需要进行电平转换,最后,控制芯片中的控制程序在检测到烧写完成的参数后将参数读出执行闭环控制。
4.1 参数转换功能实现
本设计中参数直接由烧录软件通过串口烧写到芯片的Flash中,必须将参数转换成.H86或.hex文件格式才能烧写到Flash中。Hex文件的编码规则以行为单位,,每行以冒号开头,内容全部为16进制码(ASCII码)。将某一值为100的整型参数放在0x00C10001地址中,编写的Hex文件如下:
:0200000400C13B
:02000100640067
:00000001FF
:0200000400C03A看作 0x02,0x00,0x00,0x04,0x00,0xc1,0x3b。其中0x02代表数据长度,其后的0x00,0x00为地址,0x04为数据类型,0x00,0xc1为数据,0x3a为校验和。其中数据类型分为以下几类:00—数据记录、01—文件结束记录、02—扩展段地址记录、03—开始段地址记录、04—扩展线性地址记录、05—开始线性地址记录。本行文件数据类型为0x04,那么随后数据的基地址为(0x00c1<<16)|0x0000。
:02000100640067看作 0x02,0x00,0x00,0x00,0x64,0x00,0x67。其中0x02代表数据长度,其后的0x00,0x01为地址,0x00为数据类型,数据类型为数据记录,0x64,0x00为数据,0x67为校验和。由于上一行中数据类型为扩展线性地址记录,因此数据存储的地址为(0x00c1<<16)|0x0000+0x0001=0x00C10001。
:00000001FF为每个Hex文件的最后一行,代表文件结束。
按照上述规则,根据协议将参数转换成hex文件。本设计中采用C#语言编写参数转换功能的界面和转换程序,流程如图4。
界面如图5,点击打开数据按钮打开参数文件,可直接使用或进行更改。点击启动转换按钮即可生成需要的hex文件。点击参数下载按钮打开参数烧写软件,执行参数下载功能。
4.2 参数下载功能实现
Memtool工具是英飞凌公司提供的串口程序烧写软件,支持Flash空间的单独擦写,支持多种hex文件到单片机的烧录。在Memtool工具中选择芯片型号,将自动显示该型号芯片的Flash分布情况,利用此工具,可以直接将生成的hex文件写入指定Flash片区。下载界面如图6所示。
本参数下载采用串口实现,需要实现TTL电平到RS232之间的转换,本设计采用max232芯片完成电平转换。
4.3 下位机程序设计
下位机中参数在线下载部分软件设计的流程图如图7所示。首先为保证控制的有效性,为控制参数赋一组默认值,在程序运行时,检测参数下载区是否有参数,如果有,将参数更新为下载参数。下载分配地址范围是:0x00C10000~0x00C1FFFF(64K),每個参数分配16位或32位数据空间,须与上位机制定协议一致。
5 结果及结论
基于串口的单片机参数下载方法已成功的应用在控制系统性能调试中,极大地减少了软件设计人员的工作量,提高了控制系统调试的工作效率,缩短了控制系统的开发周期。
此方法是直接将下载参数转换成二进制文件后再烧录到Flash中,只需更改参数下载地址,就可以灵活的应用与其他单片机,方法通用性很强。
参考文献
[1]朱德爽,胡凤燕,胡复明等译.C#完全手册[美]Herbert Schildt 著[M].电子工业出版社,2002.
[2]张晓斌,周鑫,郑先成.基于RS_232的FLASH在线编程研究[J].机电一体化,2011.
[3]朱艳芳,李艳娟,杨茜,付士.一种基于RS422的DSP应用程序的在线升级方法[J].制造技术研究,2015(10):5.
[4]XC164-16内嵌C166SV2核的16位单片微控制器第1卷:系统单元,infineon Technologies Asia Pacific,2006.
[5]XC164-16内嵌C166SV2核的16位单片微控制器第2卷:外设单元,infineon Technologies Asia Pacific,2006.
作者单位
北京精密机电控制设备研究所 北京市 100076