前几天看到一篇新闻,某电动车改进了自己的电源管理算法使得电池续航里程增加了约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。
读完之后是不是对bootloader有了大概的思路了呢。