代做一个网站多少钱月熊志网站
目录
- 1. 简介
 - 2. E2E P01 介绍
 - 2.1 P01 特性
 - 2.2 E2E_P01ConfigType 介绍
 - 2.3 E2E_P01CheckStateType 介绍
 
- 4 E2E 的接口
 - 5 E2E 故障状态
 - E2E_P01MapStatusToSM
 - E2E Data Layout
 - 6 E2E 使用示例
 
1. 简介
E2E 保护的概念:
 保护运行时安全相关的数据交换,免受通信链路内故障的影响。
 造成故障可能的原因包括:
- 硬件随机故障(CAN Trcv 的寄存器故障)
 - 硬件EMC干扰
 - 软件设计/运行故障
为了保证接收端 能够接收到正确的数据,或者在收到错误的数据时能够进行识别。 

2. E2E P01 介绍
E2E 模块提供了多种不同的E2E 范式,可以运用在不同的场景下。
- E2E P01
 - E2E P02
 - E2E P04
 - E2E P05
 - E2E P06
 - E2E P07
 - E2E P11
 - E2E P12
数字越大,可以保护的数据量越大。
E2E 是通过对数据元素计算CRC 以及Counter 来进行保护,接收方在根据接收到数据来判断是否正确

以报文DBC为例,在下图中受保护的数据实际是Signal ADCU_ACC_SYS_FAILURE
但实际报文中还有Counter 以及 CheckSum 和DATA ID(报文ID)

Counter 值随着报文的发送计数,Checksum 根据 DATA ID +Rollingcnt+ ADCU_ACC_SYS_FAILURE 计算得出。 
2.1 P01 特性
P01的主要特性如下
- Counter的阈值 是0-14
 - Timeout 监控
 - DATA ID 16位
 - CRC 采用 CRC-8-SAE J1850(非AUOTSAR 标准CRC8, 起始值和异或值都是0x0)

Note: 有些主机厂的规范并不会按照AUTOSAR规范来实施,按需要修改代码即可。 
2.2 E2E_P01ConfigType 介绍
E2E P01 通过E2E_P01ConfigType 以适配不同的被保护数据元素,如下图
 
 E2E 保护数据的都是以数组的形式体现(连续的Bit位),如下图
 
因此需要通过E2E_P01ConfigType 来进行对应参数的配置
- CounterOffSet Counter 的起始Bit 位
 - CrcOffset CRC 值的起始Bit 位
 - DataIDNibbleOffset DataID 的起始Bit 位
 - DataIDMode ID的CRC计算模式,有如下选项
 

 4.1 E2E_P01_DATAID_BOTH DATA ID 两个Byte 都参与CRC计算
 4.2 E2E_P01_DATAID_ALT 奇数Counter.Low Byte 参与计算,偶数Counter High Byte 参与计算
 4.3 E2E_P01_DATAID_LOW 仅Low Byte 有效
 4.4 E2E_P01_DATAID_NIBBLE Low Byte 参与CRC计算,高Byte的半个Byte+Low Byte 随着数据传递
 5. MaxDeltaCounterInit 当前后两帧数据的Counter差值大于该值,就被判定为数据接收跳变
 5. MaxnoNewOrRepeatedData 当接收到重复数据次数小于该配置参数,则接收端不需要执行数据同步处理
 6. SyncCounterInit 当执行数据同步处理时,接收到正确数据次数必须大于该配置参数,才能将状态有同步状态转移到OK状态
2.3 E2E_P01CheckStateType 介绍

4 E2E 的接口
E2E 主要利用两个接口进行数据的保护和验证
- E2E_P01Protect 用于数据发送前的保护
 - E2E_P01Check 用于数据接收后的校验
 
5 E2E 故障状态
E2E P01通过 E2E_P01CheckStatusType 来表示当前E2E的状态。
 一共有一下几个故障状态
 
 
 
E2E_P01MapStatusToSM
将 E2E_P01CheckStateType 映射成 E2E_P01CheckStateType
 
E2E Data Layout
E2E受保护的数据中所有的元素应保证Byte对齐
 
6 E2E 使用示例
E2E 最典型的使用场景就是配合Com Tx /Rx Callout 进行报文的E2E计算与校验。
 
ComCallout E2E 发送
 
ComCallout E2E 接收
 
Com_ReceiveSignalGroup(SignalGroupA);
Com_ReceiveSignal(SignalGroupA_Sig1, &SignalGroupBuffer->sig1Val);
Com_ReceiveSignal(SignalGroupA_Sig2, &SignalGroupBuffer->sig2Val);
Com_ReceiveSingal(SignalGroupA_Sig3, &SignalGroupBuffer->sig3Val);
ret_u8 = E2E_P01Check( Config_SignalGroupA, State_SignalGroupA, SignalGroupBuffer);