通俗易懂的CCP/XCP协议介绍--标定基础2

文摘   2025-01-05 09:31   上海  

在 通俗易懂的CCP/XCP协议介绍--CCP基础1 (qq.com) 介绍了CCP/XCP的基本概念,CCP报文类型和内容,以及如何通过CCP记录ECU数据。本文继续这个话题,介绍如何解析这些数据,A2L文件解析,种子与密钥授权,以及基于CAN总线的XCP基础等内容。

本文目录如下:

1 解码来自ECU的CCP信号数据

    1)解码CCP轮询数据

    2)解码CCP DAQ数据

2 A2L - ECU 描述文件

3 种子和密钥授权

4 基于CAN总线的XCP协议

    1)XCP 数据包

        #1 XCP中的CAN ID

        #2 选择CCP与XCP CMD值

        #3 XCP CTO CONNECT例子

        #4 XCP轮询例子

    2)XCP DTO,数据传输对象

5 小结


1 解码来自ECU的CCP信号数据

在 CCP 轮询/DAQ 中,实际上是使用特定的信号编码结构记录原始 CAN 帧。为了理解记录的数据,需要将其解码为人类可读的形式,即物理值。

与CAN总线报文相似,但有一些差异,CCP解码会更复杂些,下面对此进行解释:

1)解码CCP轮询数据

先回顾下之前的CCP轮询请求/响应的数据,如下所示:

主机向ECU请求两个不同的4字节信号值,即来自源地址0x12345678和 0xABCDEF00。在这两种情况下,ECU 都以CAN ID 0x702进行响应。

在大多数CAN总线解码场景中,只需查找响应CAN ID并找到给定信号的“起始位”和“位长”即可从有效负载中提取原始数据。然而在这是不可能的,因为ECU在两个不同的信号上使用相同的CAN ID,响应有效数据也不包含 ECU 源地址,这样导致无法直接根据CAN ID 来区分来自0x12345678 的信号和来自 0xABCDEF00 的信号。那要怎么办?

需要结合请求和响应报文中的信息,即通过“重新打包”有效载荷来解决,如下所示:

这里要查找的CAN ID是0x702,多路复用器位于第5-8个字节,而信号值位于第12-15个字节。现在可以指定两个单独的解码规则,相关规则取决于4字节多路复用器的值。
2)解码CCP DAQ数据
先看初始化后DAQ  trace的片段,如下所示:
可以看出DAQ-DTO报文具有预先指定的CAN ID(0x712)和有效载荷。其中第1个字节是ODT列表ID,又称ODT PID(0x07),无需“组合”DAQ-DTO响应帧来唯一地标识哪些帧包含哪些信号,可以通过CAN ID和ODT PID的组合直接识别。
这样使得 DAQ-DTO 报文的解码比轮询消息更简单。实际上只要知道每个ODT列表的剩余字节中的信号编码,就可以直接创建具有多路复用的DBC文件。在大多数实际应用中,可以合理地假设已知这种信号编码,因为主机本身控制(通过初始化序列)如何将每个信号打包到DAQ和ODT列表中。
这里举个例子:已知CAN ID为0x712且ODT PID为0x07的DAQ-DTO,在第2个字节中包含源地址为0x00001000的信号。然后可以从ECU描述文件中查看如何解释这个1字节信号值,比如该测量信号是以摄氏度为单位的温度,应将其乘以0.8倍,并将其偏移量乘以 20。
综上不难理解,CCP轮询/DAQ可以在CAN总线帧解码的正常逻辑内处理,即使用DBC文件处理数据,但处理CCP数据的最常见选择是使用A2L文件。

2 A2L - ECU 描述文件

ECU描述文件包含主机与ECU通信所需的一切信息,从数据测量的角度来看,应包括有关 CAN ID、可用信号、信号解码规则和DAQ/ODT等的信息。
ASAP2描述格式 (*.A2L) 用于构造此信息。ASAM在ASAM MCD-2 MC中对ASAP2数据定义进行了标准化,第一个版本1.3.1于1999年6月15日发布,即CCP 2.1标准发布的同一年,该标准的最新版本 1.7.0 于 2015 年发布。

A2L示例文件下载路径:
https://pan.baidu.com/s/12luEJMiMH0AOSTaka2tngA?pwd=4y5s 提取码: 4y5s
实际上,A2L文件用于“配置”主机,实现与ECU的通信。就如之前例子,使用CAN ID 0x701和0x702进行主机和ECU之间的CRO/DTO通信,这些ID会在A2L文件中指定。
A2L 文件也描述了信号在ECU中的存储方式以及如何解码它们具体可以参考来自A2L示例文件的片段:
这里与其他CAN协议和DBC文件中的信号编码逻辑进行比较:“MEASUREMENT”标签用于封装测量信号的描述。在本例中为 Airflow,它具有详细的描述和由下限/上限定义的最小值/最大值。该信号还有一个4字节源地址,即0x40000144。回顾下CCP轮询内容,这个源地址可以在SHORT_UP命令轮询序列中用于请求此特定ECU信号的原始值。同样,在 DAQ测量中,这个源地址将用于初始化过程。
换句话说,工程师可以在A2L文件或A2L GUI工具中查找想要的信号(气流),并配置主机来请求此信号。
假设我们已经记录了原始值的数据,需要解码这些信息。如前所述:
第一步是从响应有效负载中提取原始字节,执行此操作的方法取决于使用的是轮询还是 DAQ测量。此外字节顺序不是由CCP协议指定的,而是在A2L文件中以全局或信号级别指定。一旦提取了信号字节并将其转换为十进制形式,我们就需要知道如何转换它们。
在DBC文件上下文中,这始终以“线性”方程的形式完成,即y=ax+b,其中a等于比例因子,b等于偏移量,两者均在每个信号的 DBC 文件中指定。而A2L 文件允许更复杂的转换方法,从信号描述中可以明显看出,它指的是定义为“CompuMethod_6”的转换规则,我们可以在 A2L 文件的另一部分中查找这一点:
此转换规则使用称为RAT_FUNC的转换类型,定义如下:y=(axx+bx+c)/(dxx+ex +f)
具体来说,它支持5个系数,需要在计算方法中指定。这里它们分别设置为 0 1 0 0 0 1,这意味着函数简化为以下形式:y = x。
在这个简单的情况下,与DBC文件中使用的函数一样。实际上A2L文件还支持另一种转换类型LINEAR,即y = ax + b,在 Airflow 信号的情况下,可以使用此类型。
最后在测量细节中还指定了单位,这意味着可以绘制以 kg/s 为单位的气流物理值。
格式字段为%6.2,应读作%Length.Layout,其中Length反映解码信号的总长度,Layout 反映小数位数。
通常上述介绍,我们发现直接查看A2L不太容易,但这没关系,通常我们不会直接查看,而是将A2L 文件加载到标定工具中,比如CANape和INCA,也就是说工程师就算不了解A2L文件的结构和语法,也可以使用工具执行ECU相关的测量和标定工作。
这就是关于A2L描述的简单介绍,更多内容可以自行下载A2L示例文件。

3 种子和密钥授权

汽车ECU开发过程中,通常使用CCP/XCP协议进行ECU的测量和标定,在某些情况下,与 ECU通信只需要A2L文件和合适的CAN工具,也可以简单地提取A2L文件的子集来配置设备,比如用于测量特定的信号。但如果没有A2L文件,几乎不可能进行通信,因此许多 OEM除了锁定A2L文件外不需要任何其他安全措施,但有些用例需要额外的安全性。
CCP通过称为“种子和密钥”授权的概念来支持这点,即主机从ECU接收种子并将其用作内部安全算法的输入来计算密钥,然后主机通过CAN将密钥发送到ECU,如果它与ECU内部计算的密钥匹配,则提供进一步通信的授权。具体过程如下所示:
主机通过GET_SEED命令0x12请求种子,并在第3个字节中指定“资源掩码”0x02,资源掩码表示请求的访问级别,0x02仅表示DAQ 访问。
ECU用一个帧进行响应,其中第4个字节为0x01,表示DAQ访问受到保护,ECU在剩余的 4个字节中提供请求的种子。
根据种子主机计算密钥并通过UNLOCK命令0x13提供密钥,密钥长度为4个字节。ECU做出肯定响应,包括请求的资源掩码0x02,这意味着DAQ访问现已解锁。
安全算法最常见的实现方式是通过*.dll文件,因为主机通常是带有GUI工具和CAN接口的 Windows PC,因此使用 *.dll文件还可以实现跨CCP工具的标准化,同时主机无需知道所使用的底层算法。当然在独立的CAN总线数据记录器和远程信息处理设备中使用 *.dll 文件具有挑战性(因为它们不运行 Windows),因此一些公司使用替代解决方案,比如更适合嵌入式设备的专有文件格式。

4 基于CAN总线的XCP协议

了解了上述这些CCP的基础知识后,接下来了解基于CAN总线的XCP,重点关注帧结构。

1)XCP 数据包

为了理解基于CAN总线的XCP与CCP的结构变化,先比较以下CCP的CRO/DTO和XCP的CTO/DTO。XCP数据包包括XCP CTO(与CCP CRO和CRM-DTO的作用相似)和XCP DTO(与CCP DAQ-DTO的作用相似),如下所示:
另一种说明CCP与XCP报文的方法是可以通过架构来比较,如下所示:
接下来更详细地介绍基于CAN总线的XCP。

1)XCP CTO,命令传输对象

在基于CAN总线的XCP中,CTO是用于传输控制命令的CAN帧,包括命令(CMD)、命令响应(RES)、错误(ERR)、事件(EV)和服务请求(SERV)。
与CCP中的CRO不同,CTO由主机和ECU 同时使用,另外主机发出的CMD数据包必须由ECU以RES或ERR数据包进行应答,而其他数据包类型则异步发送。
如果查看CTO的有效载荷,第1个字节反映的是数据包标识符 (PID),其余7个字节由特定的CTO数据包类型的数据组成。如果将这个结构与CCP的CRO进行比较,它们是相似的,除了排除XCP中的命令计数器字节。
#1 XCP中的CAN ID
XCP通信至少需要两个CAN ID:一个用于主机(0x551),一个用于ECU( 0x552),如果主机需要通过XCP与多个 ECU 通信,则需要一组额外的ID。
XCP和CCP之间的CMD字节的实际值也不同,比如CCP使用0x0 作为CONNECT命令,而XCP使用0xFF。CTO PID的分配取决于报文是主机发送还是从机发送,如下所示:
#2 选择CCP与XCP CMD值

下表比较了CCP与XCP CMD之间的CMD子集:

#3 XCP CTO CONNECT例子

基于CAN总线的XCP的CONNECT报文如下所示:
注意此例不使用 0xAA 填充,因为基于CAN总线的XCP对此是可选的。主机向ECU发送 CONNECT CMD (0xFF),并将通信模式设置为正常 (0x00)。这里与CCP不同,主机无需在CONNECT帧的有效负载中指定站地址,这是因为CAN ID已经唯一地标识了主机正在与哪个ECU通信。ECU用CAN帧进行响应,其中:
  • 第1个字节是正响应PID(RES);

  • 第2个字节是资源可用性,类似于CCP通信中的种子和密钥,0x04表示DAQ可用;

  • 第3个字节与“通信模式”(此处为“可选”)有关;

  • 第4个字节是最大CTO的大小(此处为8个字节);

  • 第5个和第6个字节是最大 DTO的大小(此处为 8 个字节);

  • 第7个和第8个字节分别是XCP协议层版本和传输层版本(在本例中均为 1)。

#4 XCP轮询例子

建立连接后,主站可以启动轮询,与CCP一样,这可以通过SHORT_UPLOAD命令完成:
这里主机发送一个SHORT_UPLOAD CMD (PID 0xF4),用于2个字节的数据,第3个字节是保留的,第4个字节是地址扩展(在本例中为0),其余4 个字节等于源地址0x12345678(intel字节顺序)。为了响应命令CTO,ECU发送一个响应CTO,其中包含2个字节数据的值。

2)XCP DTO,数据传输对象

XCP DTO用于发送同步数据(类似于CCP中DAQ-DTO的作用),它还支持传输STIM数据和Bypass ECU内的正常算法。
这里不详细介绍XCP DAQ测量,因为它的概念与CCP DAQ相似。关于XCP DAQ测量,它允许ECU将测量时间写入XCP DTO数据包中,这意味着主机能够利用ECU测量时间戳(而不是主机自己的内部时间戳)正确同步跨多个帧分割的ECU数据。
XCP DTO 时间戳是可选的,并以递增计数器的形式实现,其递增逻辑在A2L文件中指定。如果要为特定DAQ列表包含时间戳,则该时间戳将写入第一个ODT列表(但如果同一 DAQ 列表中存在多个ODT 列表,则不会写入后续列表)。
在DAQ DTO中打包DAQ列表#和ODT列表#信息的方法有多种,最简单的情况是“绝对 ODT 编号”,其中ODT列表#在所有DAQ列表中都是唯一的,PID(即ODT#)足以全局识别ODT列表。还有另一种方法,即在DAQ列表中使用相对ODT列表编号。比如可能有两个PID=0x00的ODT列表,这意味着它们无法唯一标识,因为CAN ID在两个DTO中是相同的。此时可以在CAN帧有效负载的第2到第3个字节中添加1或2字节DAQ列表标识符,这样就可以再次唯一地标识特定的ODT列表。A2L文件和ECU将提供有关所用方法的信息。
在XCP DTO通信中,可以选择使用1字节计数器字段。如果在XCP DTO DAQ数据包中使用CTR字段,则从机将仅将CTR的值插入DAQ列表的第一帧中,即第一个ODT列表中。
5 小结
以上就简要介绍完了如何解析这些数据,A2L文件解析,种子与密钥授权,以及基于CAN总线的XCP基础等内容。关于CCP/XCP 还很多内容没在这里讨论,因为本文意图专注于与数据记录相关的基本主题和概念。不过如有兴趣,下面提供一些参考:
  • Vector's XCP Book v1.5 : A detailed overview of the XCP 1.5 protocol 
  • XCP (Wikipedia) : The basics on the XCP protocol 
  • ASAM MCD-1 XCP overview : Also provides a detailed overview of the XCP protocol 
  • ASAM ASAM MCD-2 MC overview : Provides an overview of the ECU description file standard 
  • Seed & key details (Vector) : A useful intro to the basics on authorization



创作不易,欢迎点赞再看收藏关注


汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车从业人员。

谦益行
分享汽车研发日常,助力你我共同成长。
 最新文章