首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

汽车XCP协议的服务介绍

XCP规范定义了不同的服务,并且有些服务是必须实现的,有些服务是可选的。下面将对XCP的常用服务进行介绍。

1、存储器页面切换

标定参数存放在Flash存储器中(长久存储),程序运行时参数拷贝到RAM存储器(ECU重启后参数消失)中执行。存储器可以划分为多个扇区,每个扇区划分为多个段,段又可以包含多个页面,一般为一个Flash页面和一个RAM页面,也可能为多个RAM页面和无Flash页面。

分段的概念是基于逻辑地址而言的,每个分段的起始地址与物理扇区中的起始地址并不一致,但有对应关系。其中介绍两个概念,逻辑地址:为了XCP的逻辑应用定义的一块地址;物理地址:是直接对应存储器上的一块实际地址。

每个分段中存在不同的页面,但是有且仅有一个页面为”活动页面“。A2L文件中需要存储分段的信息,并且用0~255作为递增标识符,并且每个分段至少要有一个页面。

主单元可以通过GET_CAL_PAGE命令获取从单元的页面使用情况(例如:哪些页面可以被ECU使用,哪些页面可以被XCP使用)。若当前的页面正在被ECU使用,那么XCP则不能使用。主单元可以通过SET_CAL_PAGE命令控制ECU和XCP访问页面的切换。当然XCP的从单元是无法自己实现页面切换的。

页面切换可以快速的改变ECU的所有运行参数,不同的页面可以设置不同的参数。XCP可任意改变其它页面的参数(参数有时设置会出现错误),而保持当前ECU状态的稳定。

XCP协议可以将RAM(ECU重启后参数丢失)中的数据页面永久存储在ECU的非易失性内存(例如Flash)中。

2、Flash刷新

Flash刷新就是将数据写入Flash内存中。Flash内存被划分为多个扇区(物理地址的划分),每个扇区由0~255的编号进行识别,并且每个扇区都有其对应的起始地址和长度。

”刷新内核“为可执行的代码,用来刷新从单元ECU的程序。在刷新开始之前“刷新内核”代码从XCP主单元发送到从单元ECU的RAM中运行, 用来建立XCP通信以及擦除内存。受限于ECU的内存空间和安全性,该代码不会永久的存储在ECU中。

XCP的刷新可以分为三个部分:

(1)准备阶段:(主单元进行版本控制,判断ECU是否需要进行刷新)

(2)执行阶段:(刷新内容发送到ECU);

(3)后处理阶段:(刷新内容校验、检查);

PROGRAM_START:刷新开始阶段。若ECU当前条件不满足刷新时则回复ERR,否则回复RES。实际的刷新过程是在RES确认之后开始的。

PROGRAM_CLEAR:擦除现有的内存程序。擦除现有的内存程序后才能写入新的程序。

PROGRAM_FORMAT:选择刷新数据的格式。XCP主单元用PROGRAM_FORMAT来决定传输刷新数据的格式(例如:压缩与加密),若不发送该命令,则默认不压缩数据,不加密数据。

PROGRAM:向从单元发送刷新数据。主单元使用PROGRAM命令将数据传输到从单元中,并存储在Flash内存中。

PROGRAM_VERIFY:检查刷新后的内容。主单元发送PROGRAM_VERIFY给从单元,从单元在内部检查刷新数据是否正确。

PROGRAM_RESET:使从单元复位。主单元使用PROGRAM_RESET命令让从单元进行复位,从单元执行复位后就会断开与主单元的连接,若继续发送命令需要重新建立连接(CONNECT)。

3、获取从单元信息

XCP协议允许主单元向从单元获取XCP协议特定的属性信息,下面介绍获取信息的相关指令:

GET_COMM_MODE_INFO:该命令的响应信息中需包含从单元的各种通信相关的信息,例如是否支持块传输(下面会介绍到)、交错模式或者主单元在这些模式下的请求之间必须保持的最小时间间隔(MIN_ST)。

GET_STATUS:该命令的响应信息包含从单元的的当前状态信息,例如:是否支持标定、测量、刷新等功能?是否正在进行标定、测量?是否正在进行DAQ列表的配置?

GET_DAQ_PROCESSOR_INFO:主单元需要获取从单元的限制信息,例如:预定义DAQ列表的数量,可用的DAQ列表和事件。

GET_DAQ_RESOLUTION_INFO:获取DAQ的其它参数,例如:用于DAQ和STIM的ODT最大参数数量,ODT条目的颗粒度,报文中时间戳的字节长度。

GET_DAQ_EVENT_INFO:主单元发送此命令给从单元后,从单元在每次事件发生时发送响应信息,信息包含:事件是否可用于DAQ/STIM,事件是否是周期性发生的等等。

4、块传输模式

之前的文章中介绍过数据的三种传输模式,当数据进行上传、下载和刷新的时候要使用块传输模式(即多问一答)。

当传输大量的数据时(如指令:UPLOAD、SHORT_UPLOAD、DOWNLOAD、SHORT_DOWNLOAD和PROGRAM),块传输模式能有效的缩短传输时间。主单元可以通过GET_COMM_MODE_INFO命令查询从单元是否支持块传输模式(前面已介绍)。

5、数据测量的冷启动方法

数据测量之前需要先进行配置,但是测量又必须发生在ECU的启动阶段。因此我们需要先进行配置(DAQ列表),然后启动ECU之后再进行测量,那么配置数据就必须存放在非易失性的内存中(非RAM内存)。此方法可称之为冷启动。

6、XCP的授权机制

Seed(种子) 与 Key(密钥)用于对主单元进行授权,若授权成功,才可执行测量、标定、刷新等操作,当然也可以不做授权功能。

(1)主单元首先发送连接请求-CONNECT与从单元建立连接;

(2)主单元发送GET_STATUS确定从单元是否支持标定、测量、刷新等功能;

(3)主单元发送GET_SEED命令获取种子(SEED),种子是从单元产生的随机数(每次获取都不一样);

(4)主单元获取种子后用指定的算法(从单元指定的算法)算出密钥,并且通过指令UNLOCK_REQUEST发送给从单元;

(5)从单元用指定的算法和种子也计算出密钥,与主单元发送来的密钥进行比较,若一致则回复RES正响应,否则回复ERR否定响应;

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190910A0HYW500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券