【AUTOSAR】Bootloader说明(二)---- 初始化流程及配置

按照DSP复位后的执行情况,Boot-loader分为以下几部分:

  • DSP启动及系统初始化
  • RAM自检
  • 应用程序有效性检查
  • UDS命令处理
  • FALSH操作
    1. DSP启动及系统初始化
      1. 选择从FLASH启动

DSP的启动模式配置为从FLASH启动【参考】,硬件引脚配置如下:

引脚

GPIO18

GPIO29

GPIO34

电平

1 DSP启动模式硬件引脚配置

从FLASH启动模式下,DSP复位后将跳转到地址0x3F7FF6处,由于从0x3F7FF8开始是128位的代码安全密码区。故只有0x3F7FF6-0x3F7FF7允许编程。若使能RAM自检功能,则此处应是跳转到RAM自检代码入口的分支指令;RAM自检通过后,调用TI的C环境初始化函数入口_c_int00,完成C环境初始化及跳转到boot-loader main函数入口。如果没有使能RAM自检功能,则包含到C环境初始化函数入口__c_int00的分支指令。

_c_int00是TI的C环境初始化函数入口地址,包含在.reset段中,编译器连接时自动加入.reset段(需不需要对_c_ini00实现显式的重定位?TBD)。

    1. RAM自检

出于安全考虑,每次DSP复位后在使用RAM前先进行RAM自检。

RAM自检包括数据线测试和地址线测试。

如果RAM自检失败,这种情况下如果加载应用程序可能会导致数据错误或堆栈错误,所以失败后DSP进入disable模式。

RAM自检时DSP禁止中断及软件看门狗(硬件看门狗TBD)。

DSP在disable模式下应禁止中断及软件看门狗,GPIO也应设置到安全的状态(如禁止逆变器)。接着使能看门狗中断,并周期性喂狗。等待外部重新上电复位。

相关文件:bblk_startup.asm。

    1. 应用程序有效性检查及调用

RAM自检通过后,boot-loader会检查DSP FLASH中是否存在有效的应用程序(app_check())。

函数原型

bool app_check(void)

函数作用

检查FLASH中是否有有效应用程序

函数参数

函数说明

完成RAM自检后,被main()调用

2  函数app_check()说明

Boot-loader主要检查应用程序的完整性。在应用程序代码区的开始和结束分别存储一个完整性标识字,boot-loader将检查这两个标识字是否正确。如果正确,代表有有效应用程序,boot-loader跳转到应用程序入口(jump_to_app())。

函数原型

void jump_to_app(void)

函数作用

跳转到应用程序

函数参数

函数说明

此函数不返回

3  函数jump_to_app()说明

由于boot-loader和应用程序分属两个独立的工程,应用程序的符号表不能导入到boot-loader。故应在开发应用程序时指示连接器将应用程序入口存储在指定的FLASH地址,boot-loader将用汇编指令跳转到该地址。

当应用程序接收到有效的刷新请求之后,擦除完整性标识字(由于FLASH的特性,实际擦除完整性标识字所在的整个扇区),然后触发软件看门狗复位。复位后由于完整性标识被擦除,DSP进入刷新模式。

另,整个代码区的有效性将由应用程序执行:采用32位的CRC算法(TBD)。

    1. Boot-loader刷新模式初始化bblk_init()

进入刷新主程序之前,必须将配置外围时钟,并将GPIO等置于安全状态,之后才能初始化CAN模块,进入刷新主程序。

函数原型

void bblk_init(void)

函数作用

跳转到应用程序

函数参数

函数说明

被main()调用

4函数bblk_init()说明

【AUTOSAR】Bootloader说明(二)---- 初始化流程及配置_第1张图片

 

3 boot-loader刷新模式初始化

      1. 时钟配置bblk_init_periphral_clk()

外部晶振频率为20MHz, 经过PLL后产生100MHz的系统时钟。

使能用于诊断的CAN模块时钟(CANA/CANB:TBD)。

函数原型

void bblk_init_periphral_clk (void)

函数作用

配置系统时钟及模块时钟

函数参数

函数说明

被bblk_init()调用

5函数bblk_init_periphral_clk()说明

      1. 外围端口初始化bblk_init_gpio()

配置相应的GPIO的数据方向,并将输出设置为安全的状态。

需要配置的为数字输出的端口有三个:即逆变器使能、硬件看门狗输出和FLASH操作的翻转测试(Toggle Test)。

函数原型

void bblk_init_gpio(void)

函数作用

配置GPIO

函数参数

函数说明

被bblk_init()调用

6  函数bblk_init_gpio()说明

      1.  CAN初始化bblk_init_can()

本步骤初始化CAN模块,指定刷新使用的CAN ID。如果CAN模块初始化失败,MCU进入disable模式,等待复位。

函数原型

Bool bblk_init_can(void)

函数作用

初始化用于诊断的CAN模块

函数参数

函数说明

被bblk_init()调用

7函数bblk_init_can()说明

      1. 初始化FLASH时钟init_flash_clock()

由于要对FLASH进行操作,所以必须初始化FLASH时钟,频率为MHz(TBD)。

函数原型

void bblk_init_flash_clock (void)

函数作用

配置FALSH时钟

函数参数

函数说明

被bblk_init()调用

8函数bblk_init_flash_clock()说明

      1. 中断(PIE)配置

配置中断向量表:bblk_pie_table_config()。

函数原型

void bblk_pie_table_config (void)

函数作用

配置中断向量表

函数参数

函数说明

被bblk_init()调用

9函数bblk_pie_table_config ()说明

你可能感兴趣的:(单片机,嵌入式硬件,AUTOSAR,汽车,boot,loader)