打印
[Kinetis]

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

[复制链接]
3207|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 FSL_TICS_A 于 2014-10-21 15:43 编辑

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

Ø 波特率同步校准
        MCU作为Target上电复位后,开始初始化硬件模块,配置时钟模式和建立内存空间的映射图,串口的波特率配置也在此过程完成。但是实际波特率与期望值可能会有出入,所以为保证Target与Host tool之间实现准确无误的数据传输,需要进行波特率同步校准,同步校准步骤:首先,MCU按照配置完成的波特率发送ACK(0xFC),作为Host tool的PC按照预先协定的波特率,接受从MCU过来的“ACK”,PC可接收数据的波特率容差范围为:33%~300%;接着,只要PC接收到非零的字节数据,马上按照预先协定的波特率发送ACK(0xFC)到MCU,当然MCU可接收数据的波特率容差范围跟PC一样,也为:33%~300%,如果MCU实际波特率与期望值有出入的话,接收到“0XFC”会不等于0xFC,表1所列即为MCU真实波特率与协定波特率不匹配情况下所接收到数据。然后,当MCU发觉接收到的“0XFC”与实际不符时,就不向PC发送ACK(0xFC),PC由于在指定时间范围内未收到ACK,就会发送间断字节符,而间断字节符一般由10个连续周期的低电平组成,假设PC以波特率9600bps发送间断字节符,那么传输时间为10 x 104µs=1.04ms;最后,MCU检测接收间断字节符的时间,并与标准时间进行比较,跟着调整波特率的设置,直到MCU与PC两者的波特率同步校准成功,在此期间PC可能会多次发送间断字节符,波特率同步校准流程如图2所示。
表1 Target与Hosttool波特率不同,导致数据接收不匹配





1.               指令
Ident指令
      当MCU与PC完成波特率同步校准并确立连接后,PC就会发送Ident(0x49) 指令, MCU接收Ident指令后,跟着将Bootloader的相关属性信息发送给PC,如Bootloader版本信息、应用程序的起始与结束地址、boot loader及应用程序的中断向量表地址等(如图3所示),而且Boot loader版本不同,发送给PC的数据也会有所不同,如果使能CRC功能的话,还会在最后发送2 个字节的校验码。

                图3Ident指令
Erase指令      PC发送Erase(0x45)指令,并紧跟2 个地址字节符,而MCU在接收到Erase(0x45)指令后,接着会擦写Flash中包含此地址的Block,如果使能CRC功能的话,还会在最后发送2 个字节的校验码;MCU在执行完擦写Flash操作后,则会发送ACK(0xFC)给MCU,具体流程如图4所示。
                图4Erase指令
Write指令       PC发送Write(0x57)指令,并紧跟2个地址字节符,1个数据长度字节符及对应长度的数据字节符,如果使能CRC功能的话,还会在最后发送2 个字节的校验码。而MCU在接收到Write(0x57)指令后,识别出地址字节符和数据长度字节符,然后以地址字节符为起始地址,将所有的数据字节符写入到Flash中。MCU在执行完烧写Flash操作后,则会发送ACK(0xFC)给MCU,具体流程如图5所示。
                   图5Write指令

Read指令
       PC发送Read(0x52)指令,并紧跟2个地址字节符,1个数据长度字节符,如果使能CRC功能的话,还会在最后发送2 个字节的校验码。而MCU在接收到Read(0x57)指令后,识别出地址字节符和数据长度字节符,接着向PC发送以地址字节符为起始地址,对应数据长度的数据字节符。具体流程如图6所示。
   
                       图6Read指令
Quit指令
       PC发送Read(0x51)指令,后面不跟任何字节符,而MCU则在识别出Quit(0x51)指令后,马上跳转到应用程序。具体流程如图7所示。

                         图7Quit指令

文档下载

AN2295—Developer’s Serial Bootloader 解析(一).pdf (607.06 KB)
AN2295.pdf (1.36 MB)
AN2295代码太大,无法上传,给大家一个链接,自行下载吧!
http://cache.freescale.com/files/microcontrollers/doc/app_note/AN2295SW.zip?fpsp=1&Parent_nodeId=1369087750761754789513&Parent_pageType=product




相关帖子

沙发
FSL_TICS_Jeremy|  楼主 | 2014-7-11 12:57 | 只看该作者
不足之处,欢迎指正,未完待续!!

使用特权

评论回复
板凳
FSL_TICS_ZJJ| | 2014-7-11 13:10 | 只看该作者
非常好的bootloader中文文档解析,欢迎大家下载学习。

使用特权

评论回复
地板
三个森林| | 2014-7-11 16:09 | 只看该作者
非常详细,一直等待中文的资料

使用特权

评论回复
5
xinyinxing| | 2014-7-14 15:40 | 只看该作者
讲的很详细,学习下。

使用特权

评论回复
6
FSL_TICS_Jeremy|  楼主 | 2014-8-5 14:04 | 只看该作者
三个森林 发表于 2014-7-11 16:09
非常详细,一直等待中文的资料

谢谢啊,关于bootloader的问题,欢迎在帖子下跟帖提问,还有不知道你对FSL产品有哪些方面比较感兴趣,我们也可以根据网友的回馈,做相关的中文文档出来。

使用特权

评论回复
7
风电小二| | 2017-9-14 15:22 | 只看该作者
先赞一个

使用特权

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

本版积分规则

113

主题

2865

帖子

38

粉丝