【经验分享】AN2295 bootloader文档解析(一)

2020-02-11 08:53发布

本帖最后由 FSL_TICS_Robin 于 2014-7-18 14:29 编辑

  AN2295 bootloader文档解析
       上个星期,KBOOT1.0.2版本终于release,着急等待的小伙伴可以去下载,而且在本届在深圳FTF研讨会上,就有FSL工程师对其进行了详细的介绍,大伙也可以去浏览一下。
        而今天这个文档以FSL的AN2295—Developer’s Serial Boot loader应用手册为引子,跟大伙交流一下Bootloader的相关知识,不足之处,欢迎大家指正。好的闲话少叙,正式开整。
       1.        Boot loader
        Boot loader基本概念:
        Boot loader是嵌入式系统上电启动时,执行的一小段引导加载程序,又称作固件。通过这段程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用应用程序准备好正确的环境。其中Boot代码由MCU启动时执行的指令组成,而loader则指向MCU的Flash中新写入的应用程序。Boot loader是依赖于特定的硬件实现的,因此,在众多嵌入式产品中,目前还不可能实现通用的Boot loader。
        Boot loader优点:
         Boot loader可以实现在不需要外部编程器的情况下,对嵌入式产品的应用代码进行更新升级,并且使得通过局域网或者Internet远程更新程序成为可能。由此可见,Boot loader功能对于嵌入式系统的广泛应用具有十分重要的意义。
        Boot loader代码特点:
       1.        代码量尽可能小,尤其对于Flash空间很有限的MCU来说至关重要。
       2.        应用代码更新通信接口所需引脚数要尽可能少。
       3.        Boot loader按照协定的接口接受、解析应用代码数据,然后写入到Flash中。
       2.        FC 协议
       AN2295应用手册中的Boot loader程序运行流程如图1所示,Target与Host tool通信过程中以0xFC为应答信号,程序运行流程:首先,MCU根据开发者的预先设置,判断是进入Boot loader模式还是直接运行应用程序;当MCU进入Boot loader模式后,第一步要同步校准Target与Host tool两者的波特率,保证通信数据在两者之间能够正确的传输;接着Target接收Host tool传输过来的数据;然后按照预先协定好的IDENT(0x49)、ERASE(0x45)、WRITE(0x57)、READ(0x52)、Quit(0x51)指令操作,将应用程序写入到Flash对应地址内。
3.jpg (21.84 KB, 下载次数: 1) 下载附件 2014-7-11 11:33 上传
图7 Quit指令

AN2295—Developer’s Serial Bootloader 解析(一).pdf (607.06 KB, 下载次数: 234) 2014-7-11 11:35 上传 点击文件名下载附件
AN2295.pdf (1.36 MB, 下载次数: 164) 2014-7-11 17:03 上传 点击文件名下载附件
AN2295代码太大,无法上传,给大家一个链接,自行下载吧。
http://cache.freescale.com/files ... nt_pageType=product




PS:本帖可从飞思卡尔版块置顶帖:飞思卡尔Kinetis资料大本营飞思卡尔论坛支持小组【经验分享】帖汇总链接进入。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
57条回答
FSL_TICS_ZP
1楼-- · 2020-02-15 04:51
 精彩回答 2  元偷偷看……
stevenniu500
2楼-- · 2020-02-15 09:30
谢谢楼主分享
FSL_TICS_ZP
3楼-- · 2020-02-15 09:39
lilo234 发表于 2014-9-28 15:31
LZ你好,按照下面2片文章对kl25的bootloader进行修改,好像bootloader都没有启动,需要额外的操作进入bootl ...

你好,
关于是否进入Bootloader模式,完全可以通过Debug设置对应的断点来判断,
而你说的关于KL25的bootloader我手头没有,你还是先试试文章给的例程,判断能否进入到Bootloader模式,
如果还有后续问题,咱们再交流。
lilo234
4楼-- · 2020-02-15 09:56
LZ你好!用opensda调试,代码不断的在main和WDG_Disable 之间跳转,不知道原因?

int __main(void)
{
  /* initialize any hardware specific issues */
  #if BOOTLOADER_INT_WATCHDOG == 1
    WDG_Enable();
  #else
    WDG_Disable();
....
}
FSL_TICS_ZP
5楼-- · 2020-02-15 15:03
lilo234 发表于 2014-9-28 16:33
LZ你好!用opensda调试,代码不断的在main和WDG_Disable 之间跳转,不知道原因?

int __main(void)

你好,
找你的表示,程序不断的复位呢,
你尝试单步运行,看看具体到哪一步开始跳转到Main()
tjcf
6楼-- · 2020-02-15 20:44
 精彩回答 2  元偷偷看……

一周热门 更多>