Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说SENT协议学习,希望能够帮助你!!!。
本文资料来自SNET传输协议手册(J2716 JAN2010),加上了自己的理解,如有不对的地方,欢迎大家指正。
SENT协议(Single Edge Nibble Transmission,单边半字传输协议)是一种将传感器数据编码成一系列脉冲信号的单向通信方案,用于传感器向发动机控制单元(Engine Control Unit,ECU)的数据发送。使用该协议传输的传感器信号,具有信号频率高,传输速度快,数据单向连续发送等特点。它旨在作为一种替代方法,代替10位A/D和PWM的较低分辨率的信号传输,并且是CAN或LIN的一种更简单的低成本替代产品。
SENT信号以tick为单位计时,1个tick的名义长度是3us。数据每4 bit记为1个Nibble,即半字,半字的脉冲周期为12 ~ 27个tick,代表数据0 ~ 15。
一帧SENT信号包含如下几个部分:
下图是一帧带有2个12位数据的SENT信号。除了可选的Pause Pulse外,包含1个校验/同步脉冲,1个状态Nibble,6个数据Nibble,1个CRC Nibble。因CRC Nibble的值由前面6个数据Nibble的大小经循环冗余校验得到,一帧不含Pause Pulse的SENT信号最短为154个tick,最长为270个tick。
SENT信号是将数据值对应到相邻下降沿的时间间隔上,因此解析SENT信号的关键也就是检测出时间间隔,计算出tick数。标准的1个tick为3us,实际信号中会存在一些偏差,可根据校验/同步脉冲修正。修正过程如下:
首先,SENT信号中校验/同步脉冲的理论周期为56个标准tick(3us),实际处理中允许周期长度存在±20%的误差。解析时,用校验/同步脉冲的实际周期与理论周期(168us)相除,得到一个修正因子;后面数据Nibble的实际周期与修正因子相除,得到当前数据Nibble的理论周期,该值与36us的差,除以3us,就可以得到数据Nibble对应的数据值(范围是0~15)。协议中的描述如下图所示。
一般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两种。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章