SENT协议学习总结

  • 1.SENT协议简介
  • 2.基本概念
  • 3.消息定义
    • 3.1 帧结构
    • 3.2 基本规则
    • 3.3 通信格式
    • 3.4 慢通道(slow channel)介绍
  • 4.CRC计算
    • 4.1 快通道CRC Nibble
    • 4.2 慢通道(slow channel)CRC
  • 5.接收策略
    • 5.1运算与校准
    • 5.2接收检测
  • 6. 时钟偏差容忍度

1.SENT协议简介

  SENT 全称:Single Edge Nibble Transmission,中文名称为:单边半字节传输协议,是SAE推出的一种点对点的、单向传输的方案,被用于车载传感器和ECU(Engine Control Unit)之间的数据传输,其主要特点如下:

  • SENT 总线一种数字信号传输协议,相比CAN或Lin成本更低,且具有不错的传输精度和速度,数字数据传输速度可达30kb/s;

  • SENT 总线是单线传输数据,加上电源和地线,总共 3 线;
    在这里插入图片描述

  • SENT 总线单向传输, 数据只能从传感器到 ECU,传输是连续的,不需要请求命令;

  • SENT 总线由帧来传输数据, 或者数据包的形式,每一帧由不同宽度的脉冲即半字节组成;

  • SENT 总线数据的传输可以分为快速通道和慢速通道,重要的信号用快速通道以实现高频率的更新,比如压力等,对于非关键的信号,如诊断等可以放在慢速通道传输;

  • SENT 总线快速通道是每一帧传输一个完整的信号,慢速通道需要多帧来传输一个完整的信号, 即更新频率不同。

(引自: SENT (Single Edge Nibble Transmission)协议接口_sent协议-CSDN博客

2.基本概念

协议版本(本文):J2716 JAN2010
  • 脉冲周期:Pulse Period,指SENT协议波形两个连续下降沿之间的时间

图1. 脉冲周期定义

图1. 脉冲周期定义
  • Nibble:半字节,4bit位宽;
  • 时钟节拍:Ttick,也称UT (unit time),是SENT通信的基本时间单位。

3.消息定义

3.1 帧结构

  每一帧信号都是由同步域,状态&通讯域,数据域,校验域,加一个可选的暂停域构成。

图2. SENT帧结构

图2. SENT帧结构

(1) Calibration/Synchronization
  同步域,协议规定持续56 ticks。接收端(ECU)的tick判定,根据同步域的波形进行运算与校正补偿,产生贴近发送端(Sensor)的实际tick,用以对帧剩下的Nibble进行译码。

(2) Status and Serial Communication
  状态&通讯域,1 Nibble,可译码为4bit数据。通过多个帧中的状态通讯域的拼接可以传递传感器代号,生产厂家和诊断信息,根据状态消息的规则由两种形式:简短型串行信息(Short Serial Message)和增强型串行报文格式(Enhanced Serial Message)。该Nibble的译码信息如下对应:

表1. Status and Serial Communication描述

在这里插入图片描述
注意:校验域的CRC运算不包含状态&通讯域Nibble,在多帧组成的慢通道应用中,有相应的另外的CRC运算操作。

(3)Data
  数据域,最多6个Nibbbles(4bit),即最多 3Byte/帧。数据域的字节定义由不同的应用决定,对于一个特定的应用,数据域的长度是固定的。

(4)CRC/Checksum
  校验域,CRC4。从图2可以看出,考虑CRC Nibble后,最短的帧时间为154ticks,最长为270ticks。具体见下表

表2. 最短帧时间154ticks情形
Case D1 D2 D3 D4 D5 D6 CRC
#1 0 0 0 1 1 0 0
#2 0 0 1 0 0 0 1
#3 1 0 0 0 0 1 0
表3. 最长帧时间270ticks情形
Case D1 D2 D3 D4 D5 D6 CRC
#1 E F F F F E F
#2 F F E F F F E
#3 F F F E E F F

(5) Pause pulse
  暂停域,可选。

(引自: 简单的SENT 协议解析-(1)_sent协议-CSDN博客, SAE J2716_201001协议)

3.2 基本规则

  • 脉冲顺序(即帧结构)是固定的,最小的Pulse Period为12 ticks ;
  • Pulse Period低电平至少维持4ticks,无论是同步域,状态&通讯域,数据域,还是校验域都是;
  • 每一个Nibbbl代表的数值范围仅为[0,15],其他情况诊断为错误。例如,0(0x0)对应12ticks,15(0xf)对应27ticks;

图3. Nibble波形规则

图3. Nibble波形规则
  • 允许最大时钟节拍时间误差为±20%;
  • 时钟节拍可以设置成介于3-90us;
  • 当时钟节拍时间为3us时,最长允许的一帧数据时长不超过1ms;
  • 编码方案采用4位CRC校验位。

3.3 通信格式

  根据协议,通信格式可以划分为快通道(fast channel)信息,与慢通道(slow channel)信息。
  一般SENT信号由“校验/同步脉冲(同步域)+1个状态Nibble(状态&通讯域)+6个数据Nibble(数据域)+CRC Nibble(校验域)”组成。其中,6个数据Nibble传输的是传感器发出的快通道(fast channel)数据,传输的是主要信息。而状态Nibble中可以存储传感器的额外信息(例如传感器的型号、制造商、环境温度等),构成慢通道(slow channel)数据。
  慢通道分为简短型串行信息(Short Serial Message)和增强型串行信息(Enhanced Serial Message)。简短型串行信息由16帧连续的无错误SENT信号拼接而成,而增强型串行信息由18帧拼接而成。同时增强型根据传递的数据量不同,又可以分为12位数据+8位ID,和16位数据+4位ID两种。
  单个SENT帧可以称为快速帧(fast frames),慢通道也可以称为慢速帧(slow frame),因此两者的关系是:快速帧将传输的数据放在单个SENT帧中,而慢速帧则用于通过多个快速帧传输更长的数据流。
(引自: Single Edge Nibble Transmission (SENT), SENT协议学习)

3.4 慢通道(slow channel)介绍

(1)简短型串行信息格式
  对于本格式,完整的消息由16个连续的SENT帧组成,其中表1 Status and Serial Communication中的Bit3,Bit2情况如下:

  • Bit 3作用:第一个SENT帧中为1,表示一个消息的开始,其余15个帧均为0;
  • Bit 2作用:由每个SENT帧的数据域拼接成数据类型定义。这些类型包括Message ID、Data Byte和相应的CRC值等,此CRC和SENT帧内部的CRC算法一样。MessageID决定了Data Byte数值的意义。

在这里插入图片描述

图4. Short Serial Message帧结构

(2)增强型串行信息格式
  增强型消息可以表示更大的Message ID和Data Byte,该格式需要连续18个SENT帧来完成,由Bit3 和Bit2共同在18个帧中拼接完成。

在这里插入图片描述

图5. Enhanced Serial Message结构

  其中,第8帧中的Status and Serial Communication Bit3,记为configuration bit,可以区分为如下两种功能格式。当configuration bit = 0,慢通道信息组成为:12bit 数据 + 8bit 报文代号message ID;当configuration bit = 1,慢通道信息组成为:16bit 数据 + 4bit 报文代号message ID。

在这里插入图片描述

图6. configuration bit = 0的Enhanced Serial Message

在这里插入图片描述

图7. configuration bit = 1的Enhanced Serial Message

4.CRC计算

4.1 快通道CRC Nibble

多项式:x4 + x3 + x2 + 1 ,seed value:0101。

(1) 传统方法实现

  • 代码
CheckSum = 5; % initialize checksum 
for I=1:numNibbles 
    tempCS = data(I)+CheckSum*16; 
    CheckSum = CRC4Table(tempCS+1); 
End
  • 数组
    在这里插入图片描述
图8. 256个元素的数组

(2) 协议推荐方法实现
  使用与传统计算相同的种子值和多项式,但在CRC计算中还将消息数据增加了额外的4个零位。

(2.1)256个元素数组实现
  CRC校验和可以通过一系列左移4位(相当于乘以16)操作,接着进行一个256元素数组查找来实现。校验和的计算通过按顺序使用所有数据字节,然后将结果与额外的零值一起进行校验和计算。

  • 代码
CheckSum = 5; % initialize checksum 
for I=1:numNibbles 
    tempCS = data(I)+CheckSum*16; 
    CheckSum = CRC4Table(tempCS+1); 
end 
% checksum with an extra “0” value 
tempCS = CheckSum*16; 
CheckSum = CRC4Table(tempCS+1);
  • 数组(同图8数组)

(2.2)16个元素数组实现
  CRC校验和可以通过逐位异或操作与一个16元素的数组查找来实现。校验和的计算通过按顺序使用所有数据字节,然后将结果与额外的零值一起进行校验和计算。

  • 代码
%CRC table for poly = 0xd 
crc4_table = [0 13 7 10 14 3 9 4 1 12 6 11 15 2 8 5 ];  % array

CheckSum16 = 5; % initialize checksum 
for I=1:numNibbles 
  CheckSum16 = bitxor(uint8(data(I)), uint8(crc4_table(CheckSum16+1))); 
end 
% checksum with an extra “0” value 
CheckSum16 = bitxor(uint8(0), uint8(crc4_table(CheckSum16+1)));

4.2 慢通道(slow channel)CRC

(1) Short Serial Message 格式的CRC(4 bit)
  算法同快通道,通过吃入消息ID(4 bit)和2个Nibbles(8bit)求得。

(2)Enhanced Serial Message 格式的CRC(6 bit)
  该CRC值是根据第7到第18帧的串行数据消息位#2和#3的内容计算得出的,包括12位数据字段(第7-18帧的串行数据消息位#2)、8位消息ID(第9-12帧,第14-17帧的串行数据消息位#3)、第8帧的配置位(串行数据消息位#3),以及第7、13和18帧串行数据消息位#3的0。为了进行CRC计算,位应按以下顺序排列见图
在这里插入图片描述

图9. Enhanced Serial Message 格式的CRC

  多项式:x6+x4+x3+1,seed value:010101 (0x15)。末位补6个0便于CRC运算,mcrc = [m0 m1 m2 ……. m21 m22 m23 0 0 0 0 0 0]。CRC校验和可以通过按位异或操作,利用一个64元素数组来实现。

% Table-based CRC generation with Matlab 
% 24-bit message data 
% data = 4 x 6-bit  (Attention: Difference to 4-bit nibbles) 
% CRC table for poly = 0x59  (x^6+x^4+x^3+1) 
% Seed 0x15  (21 in decimal) 
  crc6_table = [ 
   0  25  50  43  61  36  15  22  35  58  17   8  30   7  44  53    
  31   6  45  52  34  59  16   9  60  37  14  23   1  24  51  42   
  62  39  12  21   3  26  49  40  29   4  47  54  32  57  18  11 
  33  56  19  10  28   5  46  55   2  27  48  41  63  38  13  20 ]; 

CheckSum64 = 21; % initialize checksum 
for I=1:4   
  CheckSum64 = bitxor(uint8(data(I)), uint8(crc6_table(CheckSum64+1))); 
end 

% checksum with an extra “0” value (message is augmented by six zeros) 
CheckSum64 = bitxor(uint8(0), uint8(crc6_table(CheckSum64+1)));

5.接收策略

5.1运算与校准

  ECU检查同步段的时间长度,如果算出来的时钟数和理论上的时钟数相差±20%以内,则认定为一个新数据的开始,并且此后的时钟数的计算将以此同步段换算出来的clock时间为基准,进行计算。
  例如,对于一个3us时钟的计算如下:
  同步段理论时间:3us*56=168us
  时钟比例 K= 同步段测量的时间值/168 us(K∈[0.8,1.2])
  数据N的值:Data Value N = Round[(数据N的测量时间/K – 36 us)/3us]

  此外,接收端还需要依据J2726编写相应的CRC计算方法,才能检验CRC是否正确。

(引自: 关于对SENT信号传输协议的理解

5.2接收检测

  当出现如下任何一种情况时,接收端认为出现错误:

  • 同步段时间超出理论时间的±25%;
  • 两个同步段之间的下降沿数不等;
  • Checksum不匹配;
  • 计算出的Nibble值在0-15之外;
  • 连续两次的同步段时间比例大于±1/64;

  上述任何错误都将导致接收器重新开始搜索有效的校准脉冲,以同步接收与发射设备的消息开始。诊断将允许在±25%时间范围内接收消息。然而,只有最大±20%时间范围的系统才会被认证为符合SENT要求。

6. 时钟偏差容忍度

发送器/接收器都有自己的时钟偏差,根据协议,容忍度如下表:

表4. Clock tolerance

在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐