• 《诊断服务》禁止功能寻址



    ->返回总目录<-

    前言

    本章基于DaVinCi禁止功能寻址的办法。DaVinCi默认支持功能寻址,因此需要特殊处理。


    一、功能寻址是什么?

    诊断报文的CAN identifier分为物理寻址和功能寻址。前者针对整车上一个ECU会指定一个物理寻址ID。
    例如物理寻址ID为0x716,功能寻址ID为0x7DF(均由整车厂定义
    物理寻址:通过诊断仪发送物理寻址0x716的报文时,只有被指定的某个ECU可以接收到这个报文,类似单播模式。
    功能寻址:通过诊断仪发送物理寻址0x7DF的报文时,整车上所有ECU均能收到这个报文,功能类似广播方式。

    二、步骤

    1.使能制造商函数接口

    1)使能函数
    在这里插入图片描述
    2)申明函数名
    在这里插入图片描述
    3)将Service port 连接到诊断模块,保持打开DaVinci Dev。
    在这里插入图片描述
    4)打开DaVinci Dev, 检查是否port生成了
    在这里插入图片描述

    5)DaVinci configurator 编译并生成代码
    在这里插入图片描述
    在这里插入图片描述
    到此配置已结束。


    2.分析函数并填充代码

    下图为该函数的函数指针
    在这里插入图片描述
    形参分析:
    sid: 诊断服务ID (如0x10,会话控制服务)
    reqData: 诊断报文SID后面的数据(指针类型)
    reqDataLen: 报文中除SID之外的数据长度(Byte)
    reqType: 诊断请求类型,0 - 物理寻址, 1- 功能寻址
    srcAddr: 测试地址(指针类型,没使用过)
    nrc: 要返回的NRC码(指针类型)

    代码如下(示例):

    FUNC(Std_ReturnType, AppDiag_CODE) ServiceRequestManufacturerNotification_DcmDslServiceRequestManufacturerNotification_Indication(uint8 SID, P2CONST(uint8, AUTOMATIC, RTE_APPDIAG_APPL_DATA) RequestData, uint16 DataSize, uint8 ReqType, uint16 SourceAddress, P2VAR(Dcm_NegativeResponseCodeType, AUTOMATIC, RTE_APPDIAG_APPL_VAR) ErrorCode) /* PRQA S 0850 */ /* MD_MSR_19.8 */
    {
    	Std_ReturnType returnVal = RTE_E_OK;
    	 if( ReqType == 1u)  
    	  { 
    	    /* Functional Request */
    	    switch(SID)
    	    {
    	      case 0x27:  /* SecurityAccess */
    	          returnVal = RTE_E_ServiceRequestNotification_E_REQUEST_NOT_ACCEPTED;
    	          break;
    	      case 0x2E:  /* WriteDataById */
    	          returnVal = RTE_E_ServiceRequestNotification_E_REQUEST_NOT_ACCEPTED;
    	          break;
    	      case 0x2F:  /* IoControlById */
    	          returnVal = RTE_E_ServiceRequestNotification_E_REQUEST_NOT_ACCEPTED;
    	          break;
    	      case 0x31:  /* RoutineControl */
    	          returnVal = RTE_E_ServiceRequestNotification_E_REQUEST_NOT_ACCEPTED;
    	          break;
    	      default:
    	          break;
    	    }
      }
      return returnVal;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    总结

    当你发送任何诊断报文,都会先进入这个函数里执行,类似于可以扼杀一切的一个闸门。
    例如:你以功能寻址的方式发送 27 01请求seed,这时会先调用这个函数,然后返回RTE_E_ServiceRequestNotification_E_REQUEST_NOT_ACCEPTED。
    ECU不会做任何响应,即实现了禁止功能寻址。

    ->返回总目录<-

  • 相关阅读:
    petite-vue源码剖析-优化手段template详解
    Node.js-express框架-cookie设置参数详解和举例
    lenvo联想笔记本小新Air-14 2020 AMD ARE版(81YN)原装出厂Windows10系统镜像
    # 消息中间件 RocketMQ 高级功能和源码分析(五)
    线上宠物销售系统的设计与实现
    HTML知识点
    清晰易懂IoC
    牛客网:NC32 求平方根
    【C语言步行梯】一维数组、二维数组介绍与应用详谈
    《对比Excel,轻松学习Python数据分析》读书笔记------数据选择
  • 原文地址:https://blog.csdn.net/weixin_48498880/article/details/127571348