0 手电筒传信
首先约定:A每次点亮手电筒时,B按下秒表计时,A将信息藏于时间。B根据“密码本”对照看每次点灯时间长度来查找对应字母。于是,A不停的亮灯,灭灯,亮灯灭灯。B根据A亮灭灯来掐表,对照密码本看是什么字母。由于AB手里的秒表时基不同,彼此时间并不同步。为了解决这个问题,AB又约定:A每次发送信息,都会持续点亮56秒,然后A再发送数据。这56秒是给B对表用的。
于是,B接收到A的56秒数据时,都会同步自己的秒表,这样就能确保A的时间刻度和B时间刻度保持一致,查密码本时就不会出错。
但手电筒传递过程中,偶尔出现恶劣情况或有飞沙掠影,B可能看到A的灯光“虚闪”,这样的话,B掐表就会出现紊乱。
为了解决这个问题,AB约定:A每次发送完信息后,再发送一个验证码,验证码是由前面的信息反算得来。即A每次发送的信息都会有一套加密算法得到一组验证码,A再将验证码发送出去。B接收到信息后,也会接收到验证码,同时B根据相同算法将接收的数据转换得到一组验证码,将计算得到的验证码和接收到的验证码比较,一致说明信息正确,不同则丢弃数据。
简单总结就是:对表、计时和验证,这也就是SENT协议传输的全过程。
SENT (Single Edge Nibble Transmission)协议,最初由通用公司在2005年提出,后来由SAE完善并成为SAE标准文件 — SAE J2716。SENT协议这种新的传感器接口具有传输效率高、成本低等优点,能满足发动机控制系统的复杂需求。
SENT协议有以下特点:
- 是一种数字信号传输协议,具有更高的传输精度和速度;
- 单线传输数据能力,减少信号线,降低成本。加上电源和地线,总共3线;
- 点对点连接,一个传感器信号对应一个SENT接口;
- 单向传输协议,数据只能从传感器到ECU,传输是连续的,不需要请求命令;
- 具有更强大的诊断功能;
- 可传输大数据;
- 发送数据的时间由传感器的时钟决定;
- 数据的传输可以分为快速通道和慢速通道,重要的信号用快速通道以实现高频率的更新,比如压力等,对于非关键的信号,如诊断等可以放在慢速通道传输;
- 快速通道是每一帧传输一个完整的信号,慢速通道需要多帧来传输一个完整的信号,即更新频率不同;
2 协议特性
脉冲周期(Pulse Period): 发送信号的连续两个下降沿间隔时间;
半字节(Nibbbles): 信号识别的基本单位,共4 bit;
Nibble的发送时间由传感器时钟决定,发送的时钟周期范围 3us 到 10us,以传感器的性能决定。
一个Nibble的最短时间为12 时钟周期(数值0的时候);在发送一个Nibble时,需要大于4个(通常用5个)时钟周期的拉低时间,剩余的clock需要拉高,为下降沿做准备。
Nibble所表示的数值由两个下降沿之间的时钟数决定。
每增加一个数值,时钟数在12的基础上加1,所以最小的数0的时钟数为12,最大数15的时钟数为27。
时钟周期数 = 5个LOW时钟周期 + 7个HIGH时钟周期 + n*Clock
3 数据帧
通讯状态域:一个Nibble,4 bit,12-27个时钟
数据域:数据域的字节定义由不同的应用决定,但是对于一个特定的应用,数据域的长度是固定的,即数据的Nibble数量是固定的。长度为6个Nibble。
校验域:一个Nibble,4 bit,12-27个时钟
状态域
状态信息包括Sensor ID、生产厂家和诊断信息等。STATUS中有一个位可以用于传输传感器的状态信息,当然是通过多个SENT帧拼接而成。短消息
一帧消息需要有16个连续的SENT帧组成:
Bit 3作用:第一个SENT帧中为1,表示一个消息的开始,其余15个帧均为0
Bit 2作用:由每个SENT帧的数据域拼接成数据类型定义。这些类型包括Message ID、Data Byte和相应的CRC值等,此CRC和SENT帧内部的CRC算法一样。MessageID决定了Data Byte数值的意义。
12-bit data and 8-bit message ID (configuration bit = 0)
增强型消息
增强型消息可以表示更大的Message ID和Data Byte,这些定义需要连续18个SENT帧来完成,还是由bit3 和bit 2共同在18个帧中拼接完成。
增强型消息可以配置成两种形式:(由第8个SENT帧的bit3作为configuration bit)
16-bit data and 4-bit message ID (configuration bit = 1)
数据域
SENT帧的数据包含传感器输出值的fast channel和传感器的状态信息slow channel。比如,
Nibble #1 = 0d
Nibble #2 = 15d
Nibble #3 = 0d
Nibble #4 = 8d
Nibble #5 = 15d
Nibble #6 = 0d
Nibble #7 = 8d
Nibble #8 = 12d
按照3μs的时钟周期,那么该帧SENT报文的传递时间为456μs(152个时钟周期)到816μs(272个时钟周期)之间。
数据域可以表征一个物理信号,比如角度。
Nibble #2 = Angular Information
– MSN (Most Significant Nibble)
Nibble #3 = Angular Information
– MidN (Middle Nibble)
Nibble #4 = Angular Information
– LSN (Least Significant Nibble)
Nibble #5 = 8 bit rolling counter
– MSN (Most Significant Nibble)
Nibble #6 = 8 bit rolling counter
– LSN (Least Significant Nibble)
Nibble #7 = Inverted copy of Nibble #2
(15 – Nibble #2 value)
数据域也可以表征两个物理信号,比如压力和温度。
Nibble #2 = Pressure Information
– MSN (Most Significant Nibble)
Nibble #3 = Pressure Information
– MidN (Middle Nibble)
Nibble #4 = Pressure Information
– LSN (Least Significant Nibble)
Nibble #5 = Temperture Information
– MSN (Most Significant Nibble)
Nibble #6 = Temperture Information
– MidN (Middle Nibble)
Nibble #7 = Temperture Information
– LSN (Least Significant Nibble)
数据接收策略
ECU检查同步段的时间长度,如果算出来的时钟数和理论上的时钟数相差±20%以内,则认定为一个新数据的开始,并且此后的时钟数的计算将以此同步段换算出来的clock时间为基准,进行计算。
例如,对于一个3us时钟的计算如下:
同步段理论时间:3us*56=168us
时钟比例 K= 同步段测量的时间值/168 us
数据N的值:Data Value N = Round[(数据N的测量时间/K – 36 us)/3us]
此外,接收端还需要依据J2726编写相应的CRC计算方法,才能检验CRC是否正确。
接收检测
当出现如下任何一种情况时,接收端认为出现错误:
1. 同步段时间超出理论时间的±20%;
2. 两个同步段之间的下降沿数不等;
3. Checksum不对;
4. 计算出的Nibble值在0-15之外;
5. 连续两次的同步段时间比例大于±1/64;
Demu,传统汽车电控向智能驾驶转变的汽车人。从事发动机控制器系统工程师和软件工程师多年,有丰富的ECU系统和软件设计经验。欢迎大家一起留言交流,共同进步。