标题: 基于IAR平台STC8A8K64S4A12单片机的一种bootloader实现更新程序 [打印本页]

作者: 没有你    时间: 2019-12-15 23:50
标题: 基于IAR平台STC8A8K64S4A12单片机的一种bootloader实现更新程序
    STC8A8K64S4A12单片机程序烧录一般用STC官方提供的stc-isp软件,其烧录原理是:STC8A8K64S4A12上电会先进入官方固化的ISP区执行代码,代码会对串口进行检测,一旦发现上位机(PC)有发送有效数据,STC8A8K64S4A12就可以执行程序烧录。每次程序烧录,都要重新上电,或者软件重启才能进入ISP区,也只要在ISP区,串口烧录才是有效的,而且官方在SP区固化的代码仅支持串口烧录,发送的串口数据要按照STC官网给的格式发送。
   另外一种烧录程序的方式就是自己写一个引导程序bootloader来实现程序的烧录,比如用bootloader接收串口数据、读取外挂flash的数据或者SD卡数据,然后一边读数据、一边烧录应用程序。STC8A8K64S4A12一上电就执行ISP区代码,超时后,会执行bootloader程序,bootloader会检查是否要更新程序,如果没有,就直接跳去执行应用程序。这种方法和好处是可以不用串口去更新程序,因为串口要再加一颗MCU,或者要用专用的上位机,多了成本。通过STC8A8K64S4A12主动拷贝数据来更新程序可以说是一种省成本的方式。
   下面我用一个简单的例子来说明一种简单BIM的更新程序方式。
   首先新建一个应用程序工程IMAGE_A,里面放一个点灯的操作。然后把代码的起始地址设在0x27FF。


编译后产生的hex文件用stc-isp软件打开,可以看到全部代码的数据。


   然后在IAR平台新建一个BIM工程来作为bootloader,把IMAGE_A的代码数据存放在一个hexfile[]数组里面,执行main函数的时候,会将数组写入到以0x27FF起点的内部flash中,然后跳转到0x27FF执行IMAGE_A代码。


编译BIM工程,产生的hex文件用stc-isp软件烧录到STC8A8K64S4A12中,打开串口可以看到写flash的过程


实物可以看到P5_5驱动的LED灯亮了,说明程序正常跳转。


本例子是简单的实现程序的烧录,后面可以完善一下BIM工程,添加从外部flash中拷贝程序到内部flash的功能。

作者: jeeseliu    时间: 2019-12-22 17:21
感谢分享




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1