[AutoSar]BSW_Diagnostic_007 BootLoader 跳转及APP OR boot response 实现

ops/2024/11/25 22:54:52/

目录

  • 关键词
  • 平台说明
  • 背景
  • 一、Process Jump to Bootloader
  • 二、相关函数和配置
    • 2.1 Dcm_GetProgConditions()
    • 2.2 Dcm_SetProgConditions()
  • 三、如何实现在APP 还是BOOT 中对10 02服务响应
    • 3.1 配置
    • 3.2 code
  • 四、报文
  • 五、小结

  

关键词

嵌入式、C语言、autosar、OS、BSW、UDS、diagnostic

平台说明

项目Value
OSautosar OS
autosar厂商vector
芯片厂商TI
编程语言C,C++
编译器HighTec (GCC)
autosar版本4.3.1
参考文档TechnicalReference_Dcm.pdf AUTOSAR_SRS_DiagnosticLogAndTrace.pdf AUTOSAR_SWS_DiagnosticCommunicationManager.pdf AUTOSAR_SWS_DiagnosticEventManager.pdf AUTOSAR_SWS_FunctionInhibitionManager.pdf- 【14229-1.2.3】,【15765-1.2.3.4】. 【11898】 《MICROSAR Classic DCM

在这里插入图片描述
  
  
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  
  

缩写描述
DEMDiagnostic Event Manager
DETDevelopment Error Tracer
DDMDiagnostic Data Modifier
DCMDiagnostic Communication Manager
LSBleast significant byte
MSBmost significant byte
DIDData dentifier
DSDDiagostic Service Dispatcher (submodule of the DCM module)
DSLDiagostic Session Layer (submodule of the DCM module)
DSPDiagostic Service Processing (submodule of the DCM module)
ResDataresponse Data
ReqDatarequest Data
HISHersteller Initiative Software
RCR-RPresponse pending

背景

   1.基于vector 工具 的boot 跳转的通用流程及其实现。2.如何实现在在APP还是boot 中对 10 02 的response。

一、Process Jump to Bootloader

  在autosar 标准文档中我们可以看到跳转到boot的流程图如下:
在这里插入图片描述
  一般情况下需要先进入external session(10 03),并且在external session 下进行 解锁(27 01 and 27 02),再通过 10 02 进入 program session 触发上图流程。

二、相关函数和配置

2.1 Dcm_GetProgConditions()

  该函数用于在ECU启动的时候获取配置信息(例如被置位的 bootloader_flag),并根据冷启动或热启动判定结果判定是否对10 服务进行响应。
  使用此函数需要配置DcmFinalResponseToFblEnabled = true.
在这里插入图片描述

2.2 Dcm_SetProgConditions()

  此函数在触发10 02 后被调用,主要实现在跳转到boot 前的信息的存储(如置位 bootloader_flag),硬件配置(如关闭watchdog 检测)等,最后调用软复位 函数对ECU进行复位。

三、如何实现在APP 还是BOOT 中对10 02服务响应

  两种情况:1.在请求 10 02 后 ,先在APP 中 对 10 02 进行 positive response,然后进行ecu复位,复位后进入boot。2.在请求 10 02 后 ,先在APP 中进行ecu复位,诊断响应0x78 pending,复位后进入boot,再在boot中 对 10 02 进行 positive response。

3.1 配置

  要实现此功能需要进行两处配置
1.DcmResetToFblAfterSessionFinalResponseEnabled
该配置决定了是否在APP 中响应10 服务。如果设置为false,则为在BOOT 中响应。
在这里插入图片描述
2.DcmSendRespPendOnRestart
  该配置决定了是否在ECU复位前发送0x78 即RCR-RP 。同时需要合理设置P2 和P2* 时间。
在这里插入图片描述

3.2 code

1.Dcm_SetProgConditions()

Std_ReturnType Dcm_SetProgConditions(Dcm_ProgConditionsPtrType progConditions)
{Std_ReturnType retVal = DCM_E_NOT_OK;Psc_t_Status s_RetVal_Psc = PSC_NOT_OK;if(NULL_PTR != progConditions){if( (progConditions->ReprogrammingRequest == TRUE) &&(progConditions->Sid == 0x10) &&(progConditions->ResponseRequired == FALSE) &&(progConditions->SubFuncId == 0x02) ){bootloader_flag = TRUE;/*设置标志位用于在复位后判定是该进入app还是boot*/close_watchdog() /*关闭喂狗*/Mcu_PerformReset()/*复位,4.0.3之前调用这个函数,新版本会在10 或者 11复位 触发Rte_Switch_DcmEcuReset_DcmEcuReset进行复位*/retVal = DCM_E_OK;}if (progConditions->ReprogrammingRequest == FALSE){retVal = DCM_E_OK;}}else{/* NOK returned */}return retVal;
}

2.Dcm_GetProgConditions()

Dcm_EcuStartModeType Dcm_GetProgConditions(Dcm_ProgConditionsPtrType progConditions)
{Dcm_EcuStartModeType retVal = DCM_COLD_START;if(NULL_PTR != progConditions){/* Check if there was a programming request */if(bootloader_flag == TRUE) /*热启动,从APP跳转而来*/{progConditions->TesterSourceAddr = DIAG_ID;/*DcmDslProtocolRxTesterSourceAddr 配置的值*/progConditions->Sid = 0x10;progConditions->SubFuncId = 0x02;progConditions->ResponseRequired = TRUE;/*TRUE 才能响应*/progConditions->ApplUpdated = FALSE;bootloader_flag == FALSE;/*清除标志位*/retVal = DCM_WARM_START;}}if(retVal == DCM_COLD_START){/* The ECU starts normally */progConditions->TesterSourceAddr = DIAG_ID;/*DcmDslProtocolRxTesterSourceAddr*/progConditions->ProtocolId = 0;progConditions->Sid = 0x10;progConditions->SubFuncId = 0x02;progConditions->ReprogrammingRequest = FALSE;progConditions->ResponseRequired = FALSE;progConditions->ApplUpdated = FALSE;}return retVal;
}

四、报文

  
在这里插入图片描述
  

五、小结

  

在这里插入图片描述

  
  
>>>>>>>>>>>>>>>>>>>>>>>>>回到总目录<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  
  


http://www.ppmy.cn/ops/136691.html

相关文章

mybatis学习(一)

声明&#xff1a;该内容来源于动力节点&#xff0c;本人在学习mybatis过程中参考该内容&#xff0c;并自己做了部分笔记&#xff0c;但个人觉得本人做的笔记不如动力节点做的好&#xff0c;故使用动力节点的笔记作为后续mybatis的复习。 一、MyBatis概述 1.1 框架 在文献中看…

HBU算法设计与分析 贪心算法

1.最优会场调度 #include <bits/stdc.h> using namespace std; const int N1e55; typedef pair<int,int> PII; PII p[N]; priority_queue<int,vector<int>,greater<int>> q; //最小堆 存储最早结束的会场的结束时间 int n; //其实这个题可以理…

OpenAI震撼发布:桌面版ChatGPT,Windows macOS双平台AI编程体验!

【雪球导读】 「OpenAI推出ChatGPT桌面端」 OpenAI重磅推出ChatGPT桌面端&#xff0c;全面支持Windows和macOS系统&#xff01;这款新工具为用户在日常生活和工作中提供了前所未有的无缝交互体验。对于那些依赖桌面端进行开发工作的专业人士来说&#xff0c;这一更新带来了令人…

iOS屏幕共享技术实践

一、 背景 iOS应用中实现屏幕共享功能&#xff0c;允许用户在视频通话或互动直播中将屏幕内容以视频的方式分享给其他的观众&#xff0c;以增强互动体验&#xff0c;提高沟通效率。这种功能在视频会议、在线教育和游戏直播等场景中非常有用。 视频会议场景中&#xff0c;屏幕共…

网络安全的学习方向和路线是怎么样的?

最近有同学问我&#xff0c;网络安全的学习路线是怎么样的&#xff1f; 废话不多说&#xff0c;先上一张图镇楼&#xff0c;看看网络安全有哪些方向&#xff0c;它们之间有什么关系和区别&#xff0c;各自需要学习哪些东西。 在这个圈子技术门类中&#xff0c;工作岗位主要有以…

mysql约束和高级sql

约束 MySQL中的约束用于定义表中数据的规则&#xff0c;以确保数据的准确性和可靠性。以下是MySQL中常用的一些约束类型及其概述&#xff1a; PRIMARY KEY&#xff08;主键&#xff09;&#xff1a;唯一标识表中每条记录的字段或字段组合&#xff0c;一个表中只能有一个主键。…

深度学习中的长短期记忆网络(LSTM)与自然语言处理

一、LSTM简介 长短期记忆网络&#xff08;Long Short-Term Memory&#xff0c;简称LSTM&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;&#xff0c;专门用于解决标准RNN在处理长期依赖问题时容易出现的梯度消失或梯度爆炸等问题。 LSTM的核心结构&#xf…

第三百二十九节 Java网络教程 - Java网络UDP套接字

Java网络教程 - Java网络UDP套接字 TCP套接字是面向连接的&#xff0c;基于流。基于UDP的套接字是无连接的&#xff0c;基于数据报。 使用UDP发送的数据块称为数据报或UDP数据包。每个UDP分组具有数据&#xff0c;目的地IP地址和目的地端口号。 无连接套接字在通信之前不建立…