新闻中心

EEPW首页 > 牛人业话 > 浅析STM32 Bootloader设计

浅析STM32 Bootloader设计

作者:liklon时间:2013-09-29来源:电子产品世界收藏

  不需要拆机就能对产品进行是很多人想要的效果,不仅方便而且节省精力和成本。那么如何完成这项工作呢?接下来所介绍的就可以完成这项工作,通过引导程序完成固件的升级。下面来浅析 设计。

本文引用地址:http://www.eepw.com.cn/article/174370.htm

  设计思想

  由Bootloader负责检测SD卡中是否有固件更新所需的BIN文件。如果检测到所需要的BIN文件,则开始复制文件更新固件。更新结束后跳转到指定的地址开始执行最新的程序。可以在论坛的ARM版块找到liklon的帖子:两份简单的 Bootloader 程序。链接为:http://forum.eepw.com.cn/thread/238997/1帖子里已经共享了两份简单的 Bootloader程序,一份是利用znFAT进行SD卡上文件操作,第二份是利用FATFS进行文件操作。

  知识要点

  内部FLASH的起始地址为0X08000000,Bootloader程序文件就从此地址开始写入,存放程序的首地址设置在紧跟Bootloader之后。当程序开始执行时,首先运行的是Bootloader程序,此时Bootloader检测SD卡中的BIN文件并将其复制到区域使固件得以更新,固件更新结束后还需要跳转到程序开始执行新的程序,完成这最后这一步要了解Cortex-M3的中断向量表:

  程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成启动,当复位中断程序运行完成后才跳转到main函数。由此可见,在最后一步的设计中需要根据存放APP程序的起始地址以及中断向量表来设置栈顶地址,并获取复位中断地址跳转到复位中断程序。接下来开始分析程序设计步骤。

  Bootloader程序设计

  1.确定存放APP程序的首地址

  #define FLASH_APP_ADDR 0x08010000 //应用程序起始地址(存放在FLASH)上一句代码中是0X08010000可以看出,留给Bootloader程序的存储空间大小为64K。存放APP程序的起始地址为0X08010000。

  2.Bootloader检测是否有BIN文件

  gCheckFat = f_open(&FP_Struct,"/APP/LIKLON.BIN",FA_READ);//判读gCheckFat确定上面的代码是检测是否存在liklon.bin这个文件存在,其中liklon.bin文件就是所需要的BIN文件。

  3.复制文件到指定地址

  上一步中如果gCheckFat为0则表示存在所需BIN文件,则可以执行这一步。f_read (&FP_Struct,ReadAppBuffer,512,(UINT *)&ReadNum); //读取512个字节将512个字节转换为256个16位的数据存放在ChangeBuffer数组中,准备写入FLASH。FlashWrite(FLASH_APP_ADDR + i * 512,ChangeBuffer,256); //向指定地址写入读出数据向APP程序区写入512个字节的数据。按照这样读取写入,就可以完成对APP程序区的更新。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭