打印
[KungFu8位 MCU]

基于KF8F4156 BootLoder的使用说明

[复制链接]
2440|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gbbfbaa|  楼主 | 2016-6-29 16:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

基于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


ChipONBootLoader资料包.rar

1.54 MB

回复可见内容

沙发
laoxu| | 2016-7-19 09:13 | 只看该作者
不错。

使用特权

评论回复
板凳
gbbfbaa|  楼主 | 2016-7-19 09:24 | 只看该作者

自写flash的特点不能浪费

使用特权

评论回复
地板
laoxu| | 2016-7-19 09:38 | 只看该作者
gbbfbaa 发表于 2016-7-19 09:24
自写flash的特点不能浪费

不过你这个 BootLoder 不实用,变量定义有问题。使得 C语言(用户程序)中,不能使用 STK00,STK01 .....

即既不能调用带参函数,也不能进行 乘除取模运算~~~

使用特权

评论回复
5
qdhtgcbycx| | 2016-9-28 11:29 | 只看该作者
GOOD

使用特权

评论回复
6
叶覃| | 2017-2-15 17:20 | 只看该作者
8位机还搞这么高大上,明显有点大材小用了。

使用特权

评论回复
7
hello牟| | 2017-2-28 22:31 | 只看该作者
不错,这点就比STC高大上了。

使用特权

评论回复
8
电子玩霸| | 2017-3-28 18:53 | 只看该作者
hello牟 发表于 2017-2-28 22:31
不错,这点就比STC高大上了。

STC的下载也是很方便的。比这个也方便,也可以远程升级的。

使用特权

评论回复
9
gaoxiansheng| | 2017-3-31 22:00 | 只看该作者
laoxu 发表于 2016-7-19 09:38
不过你这个 BootLoder 不实用,变量定义有问题。使得 C语言(用户程序)中,不能使用 STK00,STK01 .....
...

STK00,STK01
这是什么东东呢?

使用特权

评论回复
10
xiaolong12| | 2017-6-27 16:41 | 只看该作者
gaoxiansheng 发表于 2017-3-31 22:00
STK00,STK01
这是什么东东呢?

应该是个地址编号吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:更多精彩在chipon 论坛,高性能mcu,chipon工业级/汽车级/消费级,总有适合你的

4975

主题

5067

帖子

4

粉丝