Bootloader的开发1

        前几天看到一篇新闻,某电动车改进了自己的电源管理算法使得电池续航里程增加了约10%。用户只需要去服务站就可以升级程序了。我们知道,大部分芯片支持JTAG,开发程序的时候都是通过JTAG下载到芯片中的。但是为了保密或者其他原因,出厂后OEM不希望ECU被打开更新程序。所以我们需要开发一个bootloader,通过一根通信线来下载程序,ECU有软件改动的话就可以很方便的进行修改。

        开发bootloader之前,有3点需要明确:

        1:bootloader的通信方式:汽车上常见的通信方式有CAN,串口,Lin。最常用的做法是利用ECU上面的标定线,这样可以节省成本。

        2:bootloader在flash中的地址:我们需要利用编译器将bootloader固定在一个约定好的位置,更新程序时最好不更新bootloader的内容。

        3:中断向量表冲重定位:中断向量表里面存的是ISR的地址。假如我们不对中断向量表进行重定位,那么我们必须保证修改后和修改前的ISR在flash中的位置是一样的并且不增加或者删除ISR。不然的话更新后的程序中断到来时,还使用默认的中断向量表,程序跑到未知的地方。我们只需向在芯片的中断向量寄存器写入一个新的值,并将ISR的地址放到新的值指向的flash地址中。这样我们就可以修改ISR了。

        确定完这些以后就可以开始自己的工作了。一般来说芯片供应商都会提供底层驱动的demo,假如不提供的话,你就要自己看芯片资料了。博主用过飞思卡尔的9s12系列的芯片,所以bootloader开发介绍就基于MC9S12XET256。首先我们去飞思卡尔官网下载bootloader的demo和应用笔记。应用笔记的编号是AN4258。

        那么我们是怎么进入到bootload模式的呢。一般来说有两种方式:1、程序周期性的检测一个IO口(规定这个IO口电平为高后者低时进入bootload模式);2、通信的时候发一条约定好的命令,程序检测到这条命令以后进入bootloader模式。 这篇应用笔记是采取的检测IO口电平的方式来识别bootload模式。
       下图是bootloader的运行流程图:
        

        读完之后是不是对bootloader有了大概的思路了呢。

        

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值