SENT协议学习
本文资料来自SNET传输协议手册(J2716 JAN2010),加上了自己的理解,如有不对的地方,欢迎大家指正。
SENT协议(Single Edge Nibble Transmission,单边半字传输协议)是一种将传感器数据编码成一系列脉冲信号的单向通信方案,用于传感器向发动机控制单元(Engine Control Unit,ECU)的数据发送。使用该协议传输的传感器信号,具有信号频率高,传输速度快,数据单向连续发送等特点。它旨在作为一种替代方法,代替10位A/D和PWM的较低分辨率的信号传输,并且是CAN或LIN的一种更简单的低成本替代产品。
1 信号定义
SENT信号以tick为单位计时,1个tick的名义长度是3us。数据每4 bit记为1个Nibble,即半字,半字的脉冲周期为12 ~ 27个tick,代表数据0 ~ 15。
一帧SENT信号包含如下几个部分:
- 校验/同步(Calibration/Synchronization)脉冲,脉冲周期为56 ticks。
- 一个状态和串行通信(Status and Serial Communication)半字。
- 一串数据半字(Data nibble),最多有6个半字,代表要传输的数据。
- 一个CRC校验半字(Checksum nibble)。
- 一个可选的暂停脉冲(Pause Pulse)。
下图是一帧带有2个12位数据的SENT信号。除了可选的Pause Pulse外,包含1个校验/同步脉冲,1个状态Nibble,6个数据Nibble,1个CRC Nibble。因CRC Nibble的值由前面6个数据Nibble的大小经循环冗余校验得到,一帧不含Pause Pulse的SENT信号最短为154个tick,最长为270个tick。
2 解析方法
SENT信号是将数据值对应到相邻下降沿的时间间隔上,因此解析SENT信号的关键也就是检测出时间间隔,计算出tick数。标准的1个tick为3us,实际信号中会存在一些偏差,可根据校验/同步脉冲修正。修正过程如下:
首先,SENT信号中校验/同步脉冲的理论周期为56个标准tick(3us),实际处理中允许周期长度存在±20%的误差。解析时,用校验/同步脉冲的实际周期与理论周期(168us)相除,得到一个修正因子;后面数据Nibble的实际周期与修正因子相除,得到当前数据Nibble的理论周期,该值与36us的差,除以3us,就可以得到数据Nibble对应的数据值(范围是0~15)。协议中的描述如下图所示。
3 慢通道数据
一般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两种。
本文地址:https://blog.csdn.net/qq_35693079/article/details/110149743
上一篇: vue项目中禁用浏览器缓存配置案例
下一篇: 香蕉有没有种子?香蕉种子怎么种?
推荐阅读
-
Oracle 存储过程发送邮件实例学习
-
PHP学习记录之面向对象(Object-oriented programming,OOP)基础【类、对象、继承等】
-
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
-
oracle使用sql脚本生成csv文件案例学习
-
C# Redis学习系列(一)Redis下载安装使用
-
PHP学习记录之面向对象(Object-oriented programming,OOP)基础【接口、抽象类、静态方法等】
-
MS SQL Server游标(CURSOR)的学习使用
-
从零学习node.js之简易的网络爬虫(四)
-
从零学习node.js之文件操作(三)
-
从零学习node.js之模块规范(一)