新闻详情

新闻详情

首页 / 资讯中心 / 详情

[AUTOSAR][诊断管理][ECU][$28] 通信控制

发布时间:2026/11/13 5:15:12来源:尧图网络
[AUTOSAR][诊断管理][ECU][$28] 通信控制
文章目录一、简介二、 应用场景三、通信控制基本原理四、服务请求请求格式请求实例服务响应正响应格式负响应NRC支持五、常见Bug大揭秘六、示例代码28_comm_ctl.c一、简介根据ISO14119-1标准中所述诊断服务28服务主要用于网络中的报文发送与接受比如控制应用报文的发送与接收又或是控制网络管理报文的发送与接收以便满足一定场景下的应用需求。下列文中使用到的Client可直接理解为上位机TesterServer可直接理解为接受Tester诊断请求的ECU。二、 应用场景一般而言对于28诊断服务主要应用场景为以下场合存在某些特殊的测试场景比如只希望接收或者发送对应的网络管理与应用报文绝大多数情况下应用在刷写ECU的过程中即在预编程条件下执行28服务功能寻址便可以抑制总线应用报文与网络管理报文的发送与接收以便减少网络总线负载提高ECU下载效率同时刷写结束后也要执行28服务使能对应控制报文的发送与接收在此过程中一般会配合85服务一起使用。三、通信控制基本原理如下图1所示针对28服务的通信控制过程会经过如下几个AUTOSAR BSW模块进行处理然后完成最终的通信控制具体步骤如下Tester发送28通信控制服务请求给到ServerServer会将该诊断报文请求传递至DCM模块DCM模块调用28服务对应的上层应用函数首先进行输入参数的基本校验校验无误之后然后传递相关控制模式请求至BswM模块BswM模块根据静态配置的规则来实现对应请求中的通道通信状态控制(常见的模式控制为3X4 12种)如下表1所示列举出了常见的12种的通信控制模式如下图1所示为28通信控制的原理图可以看到28诊断服务经过DCMBswMComNM完成整个上述12种通信模式的控制。其中蓝色表示的部分为最终完成通信控制的函数体。四、服务请求服务请求是Client发送给到Server的诊断服务指令。请求格式按照ISO14229-1标准所述如下图2所示为28服务诊断请求格式即上述通信控制原理中诊断服务请求格式值得注意的是28服务诊断请求中的nodeIdentificationNumber仅在subFunction等于4或者5才有效否则#4#5参数可以不存在。下图3中各参数解释如下如下图4所示为上述subfunction(control Type)中的各项取值的具体含义如下图5所示为communicationType的各项取值具体含义请求实例以抑制网络管理报文发送为例28服务诊断请求实例如下图6所示以控制远程特定地址节点进入仅诊断模式为例节点地址为0x00 0A, 28服务诊断请求示例如下关于控制控制远程特定地址节点进入正常工作模式这里就不一一列举具体message Flow可参考ISO14229-1规范。服务响应服务响应是针对Client对Server诊断请求的响应。正响应格式如下图8所示为28诊断服务的正响应格式从上图中可以看出28诊断服务的正响应由以下三个部分组成Response ID该参数固定为SID0x40 0x68SubFunction该参数为上述诊断请求格式中controlType;正响应实例抑制网络管理报文发送如下图9所示为上述28 01 02请求示例所对应的正响应其中0x01就是跟诊断请求中的controlType保持一致即可。控制远程特定地址节点进入仅诊断模式如下图10所示则为上述28 04 01 00 0A的所对应的正响应。负响应NRC支持绝大多数情况下Server针对Client的请求都会给到正响应比如发生重启前需确保整车处于安全状态如引擎熄火车速不能超过3km/h等或者为了防止不按照诊断请求格式进行请求那么Server需要通过某种方式来告诉Client执行不成功的原因在哪里以便于调查问题直至得到正响应。因此ISO14229-1针对所有的诊断服务提供了一种统一的诊断负响应的诊断格式7F SID NRC。其中NRC全称为Negetive Responce Code每个NRC具有唯一的含义来代表当前诊断请求错误的原因所在。当然每个诊断服务支持的NRC不尽相同具体支持的NRC需要参考ISO14229-1标准文档对于27服务而言支持的NRC如下表2当诊断请求的subfuntion不在Server支持的范围内时则Server会回复”7F 28 12“当发送报文长度或者格式不对时则Server会回复7F 28 13例如当尝试请求复位时且当前车速条件不满足此时Client发送诊断指请求时Server将会回复“7F 28 22”来告诉请求者当前进入编程会话的条件不满足请再次检查进入编程会话的条件。当communicationType与nodeIdentificationNumber均超出规定的范围时则Server会回复“7F 28 31”五、常见Bug大揭秘对于从事过UDS开发的小伙伴可能会发现其实针对每个服务的Bug都是有迹可循的万变不离其宗绝大多数问题都是由于针对需求理解不清晰或者其他人为因素导致的问题。因此为了方便大家能够在工作过程中能够快速找到问题症结所在特将了解到的常见28服务Bug分享给到大家当然具体问题还是要具体分析这里所列出的只是比较典型且出现错误次数较多的Bug仅供参考。六、示例代码28_comm_ctl.c/******************************************************************************** * file 28_comm_ctl.c * author jianqiang.xue * version V1.0.0 * date 2023-05-30 * brief 通信控制 ********************************************************************************//* Includes ------------------------------------------------------------------*/#includestdint.h#includestdbool.h#includestring.h#includestdlib.h#includemodules.h#includeos_api.h#includeedebug.h#includekv_sys.h#includeecu_ble_uart.h/* Private includes ----------------------------------------------------------*/#includestd_math.h#includeapp_can.h#includecan_nm.h#includeapp_nm.h#includediag_main.h/* Private define ------------------------------------------------------------*/#defineUDS_ID0x28/* Private typedef -----------------------------------------------------------*//* Private macro -------------------------------------------------------------*//* Private variables ---------------------------------------------------------*//***************软定时器创建***************//* Private func --------------------------------------------------------------*/voiduds28_main(nwl_msg_t*p){uint8_treq_type0;// 0-使能接收和发送 1-使能接收和禁止发送 2-禁止接收和使能发送 3-禁止接收和禁止发送uint8_tdata[10];if(p-len!3){LOGE(len err ! 3);send_nrc_data(UDS_ID,NRC_INCORRECT_MESSAGE_LENTH);gotoend;}req_typep-data[1]0x7F;if(req_type3){LOGE(Unsupported,sub:%02x,p-data[1]);send_nrc_data(UDS_ID,NRC_SUBFUNCTION_NOT_SUPPORTED);gotoend;}if((g_car_ste.IPB.bit.VehicleSpeedVld1)(get_car_speed()3)){send_nrc_data(UDS_ID,NRC_CONDITION_NOT_CORRECT);gotoend;}if(p-data[2]3){LOGE(Unsupported,sub2:%02x,p-data[2]);send_nrc_data(UDS_ID,NRC_REQUEST_OUT_OF_RANGE);gotoend;}LOGI(%x,%x,get_nm_msg_tx_ste(),get_nm_msg_rx_ste());switch(p-data[2]){// 应用报文case0x01:switch(req_type){case0x00:app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,0);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,0);break;case0x01:app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,1);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,0);break;case0x02:app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,0);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,1);break;case0x03:app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,1);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,1);break;}break;// 网管报文case0x02:switch(req_type){case0x00:can_nm_msg_tx_en();can_nm_msg_rx_en();break;case0x01:can_nm_msg_tx_disa();can_nm_msg_rx_en();break;case0x02:can_nm_msg_tx_en();can_nm_msg_rx_disa();break;case0x03:can_nm_msg_tx_disa();can_nm_msg_rx_disa();break;}break;// 网管报文和应用报文case0x03:switch(req_type){case0x00:can_nm_msg_tx_en();can_nm_msg_rx_en();app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,0);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,0);break;case0x01:can_nm_msg_tx_disa();can_nm_msg_rx_en();app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,1);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,0);LOGI(%x,%x,get_nm_msg_tx_ste(),get_nm_msg_rx_ste());break;case0x02:can_nm_msg_tx_en();can_nm_msg_rx_disa();app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,0);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,1);break;case0x03:can_nm_msg_tx_disa();can_nm_msg_rx_disa();app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,1);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,1);break;}break;default:break;}if(p-data[1]0x80){// 子功能bit7为应答位。 1则不允许应答// 应用无需应答}else{// 回复正响应码 单帧格式: len, 服务ID|0x40, 子功能ID,data[0]2;// 数据总长度数据长度服务号data[1]UDS_ID|0x40;// 服务号回复上位机需要 |0x40data[2]p-data[1];memset(data[3],0xAA,5);app_can_enqueue_msg(CAN_MSG_EVENT_SEND,NWL_RES_ADDR,data,8);}g_p2_service_time_remaining0;// 如果发送诊断报文则清除倒计时。P2_SERVER_MAXend:return;}#ifAUTOSAR_DIAG_SWITCHUSE_UDS_28DIAG_SERVICE_REG(UDS_ID,DIAG_NO_SECURITY_LEVEL,(EXTENDED_SESSION),(DIAG_PHYS_REQ|DIAG_FUNC_REQ),NULL,NULL,uds28_main);#endif
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/13 0:43:49

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/12 23:59:09

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/12 9:50:02

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/12 9:25:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/12 15:57:44

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/13 0:02:27

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉