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

news2024/11/24 18:34:11

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

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()说明

 

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 ()说明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/614806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue.js 中的 Nuxt.js 是什么?如何使用 Nuxt.js?

Vue.js 中的 Nuxt.js 是什么?如何使用 Nuxt.js? Nuxt.js 是一个基于 Vue.js 的服务端渲染应用框架,它提供了一种简单的方式来创建基于 Vue.js 的应用程序。Nuxt.js 提供了许多有用的功能,如自动路由、代码分割、服务端渲染等&…

你了解 .gitkeep文件吗?

目录 简介 作用 例程 简介 本文主要介绍在git中, .gitkeep的作用。 作用 git无法追踪一个空的文件夹,当用户需要追踪(track)一个空的文件夹的时候,按照惯例,大家会把一个称为.gitkeep的文件放在这些文件夹里。 例程 就个人而言&#…

VST的天花板?苹果Vision Pro解析

看了那么多预测、分析之后,苹果MR头显(Apple Vision Pro)真正的来了。 十多年前,Oculus Rift DK1开启了近代新一轮VR热潮。十年之后,发展未及预期,VR仍未走向大众。如今整个AR/VR行业都在期待,…

一文带你了解11个Linux最常用命令

文章目录 1. 前言2. 文件与目录的查看:ls3. 显示当前路径:pwd4. 创建目录:mkdir5. 切换目录:cd6. 创建文件:touch7. 查看指定文件:cat8. 向终端输出:echo9. 树形结构显示目录: tree10. 删除文件或目录: rm11.复制文件或目录: cp12.文本编辑器: vim13. 总结 1. 前言 Linux的命令…

强大交互功能,真实产品体验一步到位!

动态交互效果是原型项目的灵魂,也是原型与设计产出物的关键区别。一个好的交互设置不仅能准确地传达静态界面难以表达的逻辑、流程和细节体验,还能呈现出丰富精彩的视觉效果,提高项目的质量。对于产品经理来说,学会交互设计是必不…

教你一招,能解决90%的机房问题

近年来,随着科技的发展,蓄电池的使用十分普遍,而蓄电池的广泛应用,也出现了一系列的问题,如不及时处理,可能给系统造成更严重的损失。 为什么需要电池监控? 01.人工值班巡检已经不能满足机房电…

人工智能(pytorch)搭建模型8-利用pytorch搭建一个BiLSTM+CRF模型,实现简单的命名实体识别

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型8-利用pytorch搭建一个BiLSTMCRF模型,实现简单的命名实体识别,BiLSTMCRF 模型是一种常用的序列标注算法,可用于词性标注、分词、命名实体识别等任务。本…

chatgpt赋能python:Python如何到下一行

Python如何到下一行 Python是一种高级编程语言,因其简单易学、可读性高、广泛的应用领域与强大的工具库而迅速成为了广泛使用的语言之一。在Python编程中,换行操作是经常使用的操作。本文将介绍Python中的换行操作以及如何在代码中使用它。 换行符 换…

百度APP iOS端包体积50M优化实践(三) 资源优化

01 前言 百度APP iOS端包体积优化系列文章的前两篇重点介绍了包体积优化整体方案、各项优化收益和图片优化方案,图片优化是从无用图片、Asset Catalog和HEIC格式三个角度做深度优化。本文重点介绍资源优化,在百度APP实践中,资源优化包括大资…

存储过程和函数的区别

目录 零、基本格式 一、返回值 二、参数传递 1、存储过程 2、函数 三、执行方式 四、事务处理 1、存储过程 2、函数 五、数据库兼容性 课上老师提出的讨论题:存储过程和函数的区别? 有同学回复:在数据库后端编程中,存储…

Python数据攻略-Pandas的数据创建与基础特性

大家好,我是Mr数据杨!今天将进入Python的Pandas数据世界,就像三国演义中的英雄们,用聪明才智塑造自己的命运。 记得三国中,周瑜曾利用兵法巧妙策划火烧赤壁,击败曹军。这就像创建一个Pandas DataFrame&…

布局量子计算工业应用!D-Wave正在“偷偷”干大事

​ (图片来源:网络) D-Wave 致力于让用户从量子计算中即时受益,而不必等到长远的未来。几十年来,这家加拿大公司一直努力将设备商业化,多家企业客户都在使用其量子计算来优化业务运营。例如,Pay…

Spark RDD容错机制

文章目录 一、RDD容错机制(一)血统方式(二)设置检查点方式 二、RDD检查点(一)RDD检查点机制(二)与RDD持久化的区别(三)RDD检查点案例演示 三、共享变量&#…

mysql数据库出现Too many connections以及磁盘满了的查看方式

Too many connections问题 这问题是数据库连接数太多了导致的, 两个排查方向 1、当用户数量大的时候 先查看最大连接数show variables like ‘%max_connections%’; 这里的最大连接数就是2000,够用了,一般500-1000就够了,内存多…

【干货分享】3D模型可视化、格式转换引擎和Parasolid如何集成?

​今天分享一个示例项目,该示例项目使用HOOPS链轮将HOOPS Exchange和Siemens Parasolid实施到HOOPS Visualize中。 HOOPS中文网http://techsoft3d.evget.com/↓ 点击下方视频查看详情 ↓ HOOPS Visualize - Exchange和Parasolid集成视频 正如您在上面的视频中看到…

小白必看:零基础入门网络安全

1、什么是网络安全? 官方的回答:指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。 具有保密性、完整性、可用性、可控性…

chatgpt赋能python:Python如何分成两栏写入Word文档

Python如何分成两栏写入Word文档 在进行文本排版时,有些时候我们需要将文字分成两栏来排版,这样可以让文章更加美观,易读。 本文将介绍一种使用Python将文本分成两栏写入Word文档的方法。在介绍具体实现方法之前,我们先来了解一…

【SLAM】ROS平台下三种自主探索算法总结

目录 前言 一、frontier_exploration 二、explorate_lite 三、rrt_exploration 总结 前言 探索是指当机器人处于一个完全未知或部分已知环境中,通过一定的方法,在合理的时间内,尽可能多的获得周围环境的完整信息和自身的精确定位&#…

自动化测试支持

自动化测试支持 自动化测试是现代软件开发中不可或缺的一环。它可以帮助开发团队快速、精确地检测软件中的缺陷,提高软件质量和开发效率。 自动化测试可以在代码变更频繁、测试用例数庞大时,显著地减少测试时间和工作量。相对于手动测试,自动…

集权设施攻防兵法:实战攻防之堡垒机篇

一、黑客视角下的堡垒机 堡垒机是一种网络安全设备,用于保护和管理企业内部网络与外部网络之间的访问。它作为一种中间节点,提供安全的访问控制和审计功能,用于保护内部网络免受未经授权的访问和攻击。堡垒机通常被用作跳板服务器&#xff0…