基于KF8F4156 BootLoder的使用说明
(上海芯旺微电子技术有限公司) 摘 要
本文介绍了基于ChipON单片机KF8F4156 BootLoder的使用。BootLoder 是单片机上电启动首先运行的一段程序。通过这段程序可以对芯片进行相应的初始化,使芯片在运行用户程序前达到一个合适的状态。本文介绍的 BootLoder 主要实现从串口接收用户程序,在 BootLoder 运行的同时实现对用户程序在flash 区的自写,自写完成后自动跳转执行用
户程序,目的是为用户提供远程更新程序的功能。
1、ChipON单片机KF8F4156 芯片介绍
◎ 复位向量地址 0x0000。
◎ 共有两个中断向量,高优先级入口地址为 0x0004,低优先级入口地址为0x0014。
◎ 8K的flash 空间,其中 0x800 – 0x1FDF 区间支持自写功能。
2、BootLoder 设计说明
◎ KF8F4156 flash 0x0800–0x1FDF(共6K)区间支持自写功能,0x0000-0x07FF区域不支持自写功能,所以,我们的 BootLoder 应该存放在 0x0000-0x07FF区间,而用户程序应该存放在 0x0800–0x1FDF区间。
◎ 芯片上电后运行BootLoder,BootLoder 从串口接收到数据并完成第一帧数据自写后,就在0x1FE0- 0x1FF7区间写上 0x99的标志,当6K的Flash自写区全部写完后会自动擦除0x99标志,如果自写6K Flash的过程中因外部原因(如掉电)未能全部更新6K Flash则0x99标志不会被擦除,当芯片重新运行后,BootLoder 如果检测到0x99标志的存在,会一直循环执行BootLoder,等待用户程序的更新。如果检测不到0x99 标志的存在,则会自动跳转到用户程序执行。
◎ 当芯片运行用户程序后,如果希望从用户程序跳转到BootLoder执行,只需要芯片复位 重新运行即可,在提供的例程里是通过打开看门狗并且不执行喂狗操作,并且对Application_Into_BootLoder 变量置1,18ms后芯片自动执行复位操作。此时BootLoder 除了判断是否有0x99标志,还要判断 Application_Into_BootLoder 标志是否为1,如果为1,则还要等待3秒钟左右,如果3秒钟内串口没有接收到数据,则跳转到用户程序执行,如果有接收到数据,则进行Flash自写操作。
◎ 由于BootLoder 已经占用了 main 程序入口,并且两个中断入口程序不在Flash 自写区,所以这三个函数需在 BootLoder 里进行重新映射,所以在用户程序里,主函数入口为MAIN_FUN (相当于main 函数的功能),两级中断的入口分别为 int_fun0和int_fun1。
◎ BootLoder通过串口接收数据时,需上位机发送字符串 ”ChipON Bootloader?”接一个回车字符和字符串结尾0,共 20个字符。然后BootLoder 会发送字符串"ChipON Bootloader Start 0x800 0x1FFF"接一个回车字符和字符串结尾0,完成握手操作。接下来上位机开始发送用户程序数据,每次发送32个字的数据外加一个字节的长度数据和一个字节长度的CRC,总共66个字节。数据长度为第一个字节,然后是64个字节的用户数据,最后一个字节是CRC,CRC就用累加方式。32个字的数据每次先发送高位,再发送低位字节。上位机每发送一次(65个字节)数据后,等待接收”ChipON Get OK!” 接一个回车然后是字符串结束标志0(注意字符串有空格),如果收到不是该字符串则重发数据,上位机发送数据帧格式如表1。
表1
数据长度(0x20) | 数据(32个字) | CRC(累加校验)
|
3、bootLoder使用操作步骤
步骤1:在提供的模板中编写完应用程序后,从用户程序跳转到Bootloader 前需对变量Application_Into_BootLoder 进行 置 1,提供的模板程序如图4所示,其中Application_Into_BootLoder 变量是和BootLoder进行交互的,用户不能更改其变量名。
MAIN_FUN、int_fun0、int_fun1是 BootLoder 重新映射的函数,用户不能更改其函数名,MAIN_FUN 相当于用户的main 函数功能,int_fun0 为高优先级中断入口,int_fun1为低优先级中断入口。另外需注意一点,由于硬件堆栈的原因,用户程序嵌套不要超过13层。
图 4
步骤2:把 BootLoder 项目中Release 下的 bootloder.o (如图1)文件拷贝到当前项目工程的Release 目下(如图2)。
图 1 图 2
步骤3
编写完用户程序,选中项目名称并点击右键,选择“属性”,在弹出的属性对话框里选择“C/C++ 构建”,在下拉选项中选择 “设置”,然后在右边选项框里选择 “C Project Linker Release”选项,在方框里填写连接文件名“bootloder.o”,然后点击“应用”,再点击“确定”即可,如图3所示。
图 3
步骤4
选中项目名称并点击右键,选择“构建项目”,对程序进行编译,编译通过后即可下载运行应用程序。
步骤 5
当用户程序运行起来后,如果希望更新用户程序,则需要让芯片复位重新跑到BootLoder运行,在此可以使用打开看门狗的方式对单片机进行复位,程序如图5所示。当按键S3按下时即可回到BootLoder,BootLoder下 P12口输出高电平,相应LED点亮(如图6)说明程序已经成功跳转到了BootLoder运行。
图 5
图 6
步骤 6
当程序跳转到BootLoder后,即可通过上位机向单片机串口发送更新的程序,如图7所示,当完成程序更新后,相应LED即进行闪烁(更新的程序中有LED闪烁功能),如图8所示,至此即完成了程序的更新。
图 7
图 8
|