![62dda35d2cac9259f59977afc81325ef.png](https://i-blog.csdnimg.cn/blog_migrate/f2c9a6dea47e9571457b1a0d09b63621.jpeg)
BootLoader主要方便于升级固件代码,而不同的硬件平台涉及的内核,外设的初始化和配置均有差异,很难做到统一。好在现在开源的BootLoader适配的硬件平台还比较齐全,在自己需要使用时,可以移植现有的开源BootLoader,对其进行裁剪或增加功能即可。比较常用的是U-Boot,但是编译后占用的体积较大。在小存储的硬件条件下,OpenBLT比较适合。
OpenBTL的设计考虑到了灵活性和可移植性。其理念是引导加载程序可以运行在任何类型的微控制器上,并具有任何类型的数据传输接口,用于实际的固件更新。
设计架构
OpenBTL的功能和代码分为4类:
![ce76f32cefeac5cfea6af9587b7db32f.png](https://i-blog.csdnimg.cn/blog_migrate/52768cc3e50fbb79863b48664fef9b4d.jpeg)
特定于应用程序的功能。本部分中的代码用于根据项目的特定需求调整引导加载程序。它包含main()函数、引导加载程序的配置文件和钩子函数,这些函数允许你调整引导加载程序的行为,而不需要修改引导加载程序的内部结构。例如,在这里,您可以实现控制后门的打开和关闭以及看门狗(如果适用的话)的处理的功能。
独立的功能目标。这一部分是驱动引导加载程序的核心部分。在软件更新期间,它处理从固件文件到微控制器内存的数据传输。它形成了应用程序细节和硬件之间的链接。您不需要对引导加载程序的这一部分进行任何更改。主机PC和嵌入式引导程序之间的通信遵循XCP 1.0协议。它的官方名称是ASAM MCD-1 XCP V1.0.0,它是一个通用的测量和校准协议,定义了一个总线独立的主从通信协议,用于连接ECU和校准系统。
目标相关的功能。当将引导加载程序移植到一个新的微控制器时,只有这一部分需要修改。它包含访问通信、定时器和内存外设的低级驱动程序。
编译器的具体功能。这实际上是目标相关类别的一个子类别。它包含诸如c启动例程和中断向量表之类的代码,这些代码通常需要一点编译器链接到正确的内存位置。
![e07b6e5a4923b0f54eaea21528fee63e.png](https://i-blog.csdnimg.cn/blog_migrate/9a5c08c9c285dfb51db86e7fadc51e41.jpeg)
通信流程
在固件更新过程中,主机通过配置的通信接口向微控制器目标发送XCP命令,且每个命令均有响应。