NXP bootloader开发详解

所需积分/C币:41 2018-09-14 17:33:13 1.83MB PDF
43
收藏 收藏
举报

关于NXP 57XX 系列bootloader的开发详解 1. bootloader的功能详细介绍以及开发
2018/42 汽车电子 ECU bootloader开发要点详解 3.解析编程文件(S19/HEX/B|N) 不同的MCU软件开发DE编译链接生成的编程文件格式可能不同,但S19、HEX和BIN文件之 间是可以相互转化的,所以只需要在 bootloader中开种编程文件的解析程序就可以了,其他的 可以使用相应的转换工具 convert tool在上位机上进行转换; 对编程文件的解析,目的在于获得应用程序的程序代码和数据及其在NVM中的存储地址; 为了解析编程文件必须先了解其中的编码格式和原理,常用的S19、HEX和BIN文件的格式说 明请参考如下维基百科链接 S19x:https://en.wikipedia.org/wiki/srec_(fileformat HEX文件https://en.wikipediaorg/wiki/intelHe BN文件https://en.wikipedia.org_/wiki/binaryfile 4.NVM驱动程序开发 ECU的NM一般包括其MCU片内集成的用于存放数据的 EEPROM或者Data-Fash和用于存 储程序代码/数据的Code- Flash/Program-Fash以及MPU扩展的片外N○ R Flash或者NAND Flash;NWM驱动程序包括对NVM的擦除 erase)、编程( program)和校验 verify)等基本操作,也 包括对NwM的加密( secure)解密( unsecure)和加保护(φ protection)/解保护 unprotection操作。 Tips: a.MCU片上集成的NWM中 EEPROM/D-Fash和 C Flash/P-Fash一般属于不同的bock,所 以可以直接在 Flash上运行NVM驱动对EEPR○M/D- Flash进行擦除和编程操作; b.NVM驱动一般都是通过运行一个 NVM command序列,在其中通过NVM控制器寄存器给 岀不同的NM操作命令代码、NVM编程数据和目标地址的方式完成,典型的 NVM command序 列如下( Freescale的S12X系列 MCU Flash write command序列) http://mp.weixin.qq.com/s/el6rqobs1yujs4qta-oszg 3/9 2018/42 汽车电子 ECU bootloader开发要点详解 START Read fclkdiy register tr Clock divider FDiV ho Read: FSTAT register CCIF Value Check ye yes Note: FCLKDIV must be set after each reset FCCOB Availability Check Read:FSTAT register Write: FCLKDIV register CCIF Set? Results trom prevous Command Access Error and AGCERR Protecton violation FPVIOL Clear ACCERRFPVIOL 0x30 Write to FccoBiX register to identify specific command parameter to load. Write to FCCOB registe to load required command parameter. s Parameters? Write: FSTAT register (to launch command Clear CClF Oxc Read: FsTAT register Bit Polling or Command completion CClF Set? Check EXIT 汽车电子pErt应长之路 Figure 29-26 Generic Flash Command Write Sequence Flowchart C.由于NVM的工作速度一般较CPU内核频率和总线频率低,所以运行NVM驱动前必须对 NVM进行初始化,将设置分频器其工作频率设置为正常工作所需频率范围 d.MCU片内的NVM同一个 block上不能运行NVM的驱动对其自身进行擦除和编程操作,否 则会传出 read while write的总线访问冲突每个 nVM block只有一条数据总线,一个时刻只能进 行读出或者写入,不支持同时读出和写入)。因此对于仅有一个 block flash的McU来说,就必须 在RAM中调用其NvM驱动,来对其自身进行擦除和编程操作,同时在 aunch flash command 到等待 command完成期间必须关闭CPU全局中断,禁止外设中断响应,否则取中断向量和运行 http://mp.weixin.qq.com/s/el6rqobs1yuJs4qTa-oszg 4/9 2018/42 汽车电子 ECU bootloader开发要点详解 中断sR都会访问Fash。要使能中断,就必须将中断向量表偏移到RAM或者NMM block( EEPROM/D-Fash)并将响应的中断SR也拷贝到其他RAM或者 NVM block上(当然该中断 向量表也必须更新捐导新的中断|SR) e.由于以上b的要求,通常需要将 bootloader的NVM驱动拷贝到MCU的RAM中运行,其可 以将其完成的NVM拷贝到RAM中运行,也可以只拷贝 NVM command launch到等待 command 完成的几条指令到RAM执行即可,因为NWM驱动中其他操作(比如填写NⅥM操作命令、写入编程 地址和数据等)并不会往占用数据总线上往NM中写入数据; fNVM的驱动程序驻留在 Flash中,如果出现堆栈溢出等意外程序跑飞意外运行NM驱动程 序则会造成NVM內容意外擦除丟失或者修改的情况。因此需要对关键数据或代码(比如 bootloader本身)迸行保护以防止意外修改,或者更为安全的方法是不将NVM驱动程序存放在 NVM中,而是在 bootloader最开始通过上位机将其下载到RAM中运行, bootload结束后将该 区域RAM清除,从而避免由于意外运行NWM驱动程序造成的NWM数据丢失和修改。(PS:后续我 会专门写一篇文章介绍相关的方法,尽请关注阅读) g.一般MCU厂商都会给出其MCU的NWM驱动库,用户可以使用该类库实现NVM操作,如 果是 Freescale/NXP的汽车级MCU,还可以使用 CodeWarrior|DE集成的 Processor Expert生成 相应的NVM驱动程序 5. bootloader开发的其他要点 a. bootloader与应用程序的关系 bootloader和应用程序分别是两个完整的MCU软件工程,各自都由自己的启动代码 main函数、链接文件、外设驱动程序和中断向量表; http://mp.weixin.qq.com/s/el6rqobs1yujs4qta-oszg 5/9 2018/42 汽车电子 ECU bootloader开发要点详解 Memory Map without Bootloader Memory Map with Bootloader Reset女edt Interrupt vector Low 工n工甲 Pt vector Law rnte工 upt vector High 王七e到 t vector H9h User Main B。 tirade code Uses-Reset VecLor user Interrupt Vector Iow t T工AEu最234下……+ User Hair Use、℃ 军跑子兰玩长乙路 因此 bootloader和应用程序的链接文件中,对NⅥM的地址空间分配必须分开独立,不能重 ( overlap),但其RAM分配没有约束,两者都可以使用整个RAM空间,因为跳转到应用工 程后,将启动代码将重新初始化RAM; bootloader必须使用McU默认的中断向量表,因为每次复位后MCU都是从其默认中断向量 表的复位向量取地址执行的;应用程序的中断向量必须进行偏移通过相应的中断向量偏移寄 存器,如s12系列MCU的VBR寄存器或者 ARM Cortex M系列MCU的SCB->VTOR寄 存器);而NVM(P-Fash)的擦除都是按照 secto进行的,所以为了充分利用NVMP-Fash)空 间,都将 bootloader分区到包含默认中断向量表的若干NVM(P-Fash) sector(s12(X)系列 McU的NVM最后若干 sector, ARM Cortex n系列McU从0地址开始的若干 sector) b, bootloader到应用程序的跳转方法 开发使用 bootloader后,每次ECU复位之后都将首先运行 bootloader,若无远程应用程序下 载请求则直接跳转到应用程序复位函数地址,这里面有两个问题需要考虑 如何获得应用程序复位函数地址:方法有:1)通过链接文件固定应用程序的复位启动函数地 址;2)从应用程序中断向量表的复位向量地址获取;推荐方法2):因为其灵活性好,每次应用 程序变化后无需关心应用程序复位函数被编译到了NVM的具体地址,只需要将应用程序中断向量 表中的复位向量取出运行即可 典型方法如下(假设S12系列MCU的应用程序中断向量表基地址寄存器VBR=0X7F typedef void (*near tlsrFunc)(void); /*ISR prototype definition * word*Ptr; /*pointer used for ISR vector fecth* http://mp.weixin.qq.com/s/el6rqobs1yujs4qta-oszg 6/9 2018/42 汽车电子 ECU bootloader开发要点详解 Ptr=(word *)0x7FFE; /*get the ISR vector from the interrupt vector table of aPP project ((tIsrFunc( *Ptr))0:/*covert and run*/ 跳转时机:方法有:1) bootloader更新完应用程序并校验其完整性OK之后,将用到的外设 (比如CAN八LN通信总线模块、定时器、GP|O等)寄存器恢复到复位后的默认状态,然后直接跳 转; bootloader更新完应用程序并校验其完整性OK之后,等待看门狗定时器超时溢岀复位,在 bootloader最开始判断无远程应用程序下载请求而跳转;推荐使用方法2):因为方法1相对于软 件复位,其眺转至应用程序复位启动函数时McU的硬件环境与直接运行应用程序可能存在差异, 而方法2)的看门狗复位则属于硬件复位,其会将绝大部分外设(模拟、时钟和外设)电路复位,更 接近直接运行应用程序的情况。 c.开发 bootloader需要掌握的知识和调试方法技巧 首先,开发 bootloader需要对ECU所用的McU的RAM和NVM资源十分清楚,然后对其进行 分区,保证应用程序和 bootloader的NM分配没有重叠。所以必须了解所用软件开发工具IDE的 链接文件的使用方法和编写规则; 具体可以参考: CodeWarrior ide使用tips之ρrm链接文件详解(自定义存储器分区以及自定 义RAM数据初始化与在RAM中运行函数)(点击跳转阅读) 其次,需要判断中断向量表偏移是否成功,NVM驱动拷贝的地址和大小等信息,所以必须掌 握所用软件开发工具DE的编译链接结果中map文件的具体信息 具体可参考: CodeWarrior ide使用tips之map文件详解(点击跳转阅读) 此外,掌握如何将NVM函数重定向(将函数程序代码的存储地址和运行时地址分开到RAM中 执行的方法也十分有用 ps 在开发应用程序时,需要先对其进行单独调试以保证其功能正常,这时虽然其外设中断向量 表已经进行了偏移,但其复位向量必须的放置在默认中断向量表中复位向量所在的地址,否则下 载后无法运行,进行正常调试,因为如果把应用程序的复位向量放在偏移后的应用程序中断向量 表中,则默认的复位向量内容为0xFF(Fash擦除后的状态),CPU内核就会到 OxFFFFI的地址取指 运行,显然不是真实的工程启动函数,所以无法运行,其结果跟一个新MCU未写入任何程序时上 电运行的情况—样,会不断的岀现非法地址复位;而在应用程序开发完成后,再将其偏移到应用 程序中断向量中,以避免与 bootloader工程的 Flash地址冲突; 最后,掌握利用调试器的 Hotsync或者 attach方法加载ef文件中的调试信息对 bootloader 和应用程序进行无缝调试也是非常实用的,可以大大提高 bootloader的调试效率 具体可参考: CodeWarrior IDe使用tips之b9定位绝技- hotsync与 attach调试(点击跳转阅 读 http://mp.weixin.qq.com/s/el6rqobs1yujs4qta-oszg 7/9 2018/42 汽车电子 ECU bootloader开发要点详解 d量产时 bootloader和应用程序的下载方法 推荐将 bootloader和应用程序编译链接生成的编程文件进行合并,一次性使用量产工具(如 Cyclone编程器)下载以提高生产效率。 总结 本文详细介绍了汽车电子 ECU bootloader的一般性工作原理和开发要点,其适用于所有的汽 车电子 ECU bootloader开发,当然不同的MCU其软件开发工具DE和CPU内核对中断的处理机制 等各不相同,所以后续我还将继续推出系列公众号文章,介绍S12(X)系列McU、 Magni s12z 系列MCU和 Qorivva MPC56X/57系列MCU以及KEAS32K系列McU的 bootload开发实 例介绍,并提供相应的demo工程供大家参考学习,敬请关注! 以上就是今天跟大家分享的内容。希望对大家有用。 本微信公众号已经发布的个人原刨精品-嵌套嵌入式系统技术文章链接如下,欢迎大家参者 学习,并转发分享 汽车电子expe成长之路公众号系列文章列表 浅谈嵌入式McU开发中的三个常见误区 浅谈嵌入式MCU软件开发之应用工程的堆与栈 浅谈嵌入式McU软件开发之中断优先级与中断嵌套 浅谈嵌入式McU软件开发之代码风格与代码优化 浅谈嵌入式McU软件开发之 startup过程详解(从复位向量到man函数之前的准备工作) 浅谈嵌入式McU软件开发之 startup过程详解(在 CodeWarrior51中实现RAM自定义初 始化) 浅谈嵌入式MCU软件开发之S12系列MCU中断SR在 CodeWarrior5.1|DE中的 三种写法 浅谈嵌入式McU硬件设计之McU最小系统电路 S12(X系列McU的片上存储器资源与分页访问机制详解(一) S12(X)系列MCU的片上存储器资源与分页访问机制详解(二) s12(X)系列McU的加密( Secure)原理和解密( Unsecure)方法 使用 Cyclone离线编程器对S12X和 MagniVS12Z系列MCU片上NVM编程 Qorivva MPC56κκ/57Xκ系列McU的模式控制与切换(片上外设資源使能与功耗控制) 外设使用Tips之 MSCAN接收D滤波器设置 外设使用Tips之TM定时器使用FAQ和使用经验 外设使用Tips之MPC574xP系列汽车级MCU的sWT看门狗定时器配置与使用 s32DS使用tips--使用 Flash from file下载s19或ef文件 http://mp.weixin.qq.com/s/el6rqobs1yujs4qta-oszg 8/9 2018/42 汽车电子 ECU bootloader开发要点详解 s32DS使用tps-S32 DS for arm v13工程到S32 DS for arm vi20迁移升级方法 和注意事项 s32DS使用tips-工程属性配置(编译选项和C编译器、汇编器及链接器设置) CodeWarrior ide使用tps之map文件详解 CodeWarrior de使用tips之prm链接文件详解自定义存储器分区以及自定义RAM数 据初始化与在RAM中运行函数) CodeWarrior|DE使用tps之bug定位绝技- hotsync与 attach调试 CodeWarrior IDE版本选择与 License功能( feature)和价格,授权形式差异、激活方 法与安装使用 如果你喜欢本公众号的文章,请点击文章最开始的公众号关注或微信直接长按扫描识别 下方二维码关注,你也可以在微信添加朋友->公众号->输入"汽车电子 expert,成长之路"搜 索->点击关注。若对本文观点有任何意见和建议也欢迎留言指岀。您的关注、点赞、转发分 享是对我辛勤写作的最大肯定 可感回 胡恩伟 NXP汽车电子FAE 2017年9月17日于山城重庆 http://mp.weixin.qq.com/s/el6rqobs1yujs4qta-oszg 9/9

...展开详情
试读 9P NXP bootloader开发详解
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
qq_29025717 文章转载的公众号文章,直接可以搜到。
2019-09-21
回复
上传资源赚积分or赚钱
    最新推荐
    NXP bootloader开发详解 41积分/C币 立即下载
    1/9
    NXP bootloader开发详解第1页
    NXP bootloader开发详解第2页

    试读结束, 可继续读1页

    41积分/C币 立即下载 >