SENT - Single Edge Nibble Transmission for Automotive

SENT 总线的特征和优势

  • SENT 总线是一种数字信号传输协议,具有更高的传输精度和速度
  • SENT 总线是单线传输数据,减少信号线,降低成本。加上电源和地线,总共 3 线
  • SENT 总线具有更强大的诊断功能
  • SENT 总线的逻辑电平为 4.75V – 5.25V
  • SENT 总线单向传输协议,数据只能从传感器到 ECU,传输是连续的,不需要请求命令;
  • SENT 总线由来传输数据,或者数据包的形式,每一帧由不同宽度的脉冲即半字节组成;
  • SENT 总线数据的传输可以分为快速通道和慢速通道,重要的信号用快速通道以实现高频率的更新,比如压力等,对于非关键的信号,如诊断等可以放在慢速通道传输;
  • SENT 总线快速通道是每一帧传输一个完整的信号,慢速通道需要多帧来传输一个完整的信号,即更新频率不同。

SENT协议定义

  • SENT协议的数据是使用Nibble(半字节)来进行编码定义的。
  • 脉冲的周期是指以发送信号的连续两个下降沿之间的时间。即发送信号开始的下降沿,然后维持特定的拉低时间,然后剩余的时间拉高,最后再次拉低结束这个脉冲传输的下降沿之间的时间差。
  • 在发送一个Nibble时,需要大于4个(通常用5个)时钟周期的拉低时间。
  • 脉冲所表示的数值由两个下降沿之间的时钟数决定。最小的数0的时钟数为12,每增加一个数值,时钟数在12的基础上加1,所以最大数15的时钟数为27。
  • n的时钟周期数 = 5个LOW时钟周期 + 7个HIGH时钟周期 + n*Clock。

各个数据对应的ticks数目如下:

Frame Format

一个Frame基本组成:

  • Sync 同步脉冲,固定的56Ticks。(这个不是按照标准的SENT数据格式发送),该脉冲与后续的下降沿之间的时间间隔等效于56个时钟节拍。
  • Status/Com 状态及通讯字段,按照SENT格式传送,12~27Ticks,即1个Nibble(4bit)。
  • 这个nibble可以传输零件号,错误代码等杂项信息
  • Data 数据段,12~162Ticks,即1~6个Nibble。
  • CRC 校验字段,12~27Ticks,即1个Nibble。
  • Pause 暂停脉冲(可选), 12~768Ticks,早期的SENT协议无此字段或者一个固定长度Ticks,SENT2010之后,部分通过此功能可以动态条件TICKS的个数,实现整个SENT协议是同一个固定长度TICKS。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#define u08_T	unsigned char
#define u16_T	unsigned short
#define u32_T	unsigned long

union fcFrame_T
{
	struct
	{
		u08_T scCom;
		u08_T data1;	// MSN   of Signal
		u08_T data2;	// MidSN of Signal
		u08_T data3;	// LSN   of Signal
		u08_T data4;
		u08_T data5;
		u08_T data6;
		u08_T crc;
	};
	u08_T array[8];
};

u08_T calc4BitCrc(u08_T* dataArray, u08_T startPtr, u08_T endPtr)
{
	u08_T calculatedCRC, i;
	const u08_T CrcLookup[16] = {
		0, 13, 7, 10, 14, 3, 9, 4, 1, 12,
		6, 11, 15, 2, 8, 5};

	calculatedCRC = 5; // initialize checksum with seed "0101"

	for (i = startPtr; i <= endPtr; i++)
	{
        calculatedCRC = CrcLookup[calculatedCRC];
        calculatedCRC = (calculatedCRC ^ dataArray[i]) & 0x0F;
	}
	// One more round with 0 as input
	calculatedCRC = CrcLookup[calculatedCRC];
	return calculatedCRC;
}

int main()
{
    union fcFrame_T 		fcFrame;

    fcFrame.data1 = 0x2;
    fcFrame.data2 = 0xC;
    fcFrame.data3 = 0x4;
    fcFrame.data4 = 0x8;
    fcFrame.data5 = 0x8;
    fcFrame.data6 = 0xD;
    fcFrame.crc = 0x0F & calc4BitCrc(fcFrame.array, 1, 6);

    printf("CRC=0x%X\r\n", fcFrame.crc);

    return 0;
}

消息格式

快速消息Fast Channel

SENT发送一帧数据,就是一帧快速消息。

串行消息

Short Serial Message 格式

  • 短串行消息是依靠“通信和状态位的bit3来传输的。”即每帧SENT数据只能传输串行消息中的一位;一个short serial message16位,所以要传输一个完整的short serial message 需要16sent信号。
  • 串行消息的识别:

串行消息是的识别是依靠SENT信号的“status&comm ”Nibble 的bit3来识别的;

第一个SENT信号的“status&comm ”Nibble 的bit3是1,接下来的15帧SENT信号的“status&comm ”Nibble 的bit3都是0。那么这16帧SENT信号中的status&comm Nibble中的bit2就可以构成一个串行消息。

  • 一个串行消息包括1个nibble的Message ID,2个nibble的data,还有1个nibble的CRC校验。
  • 一个Short Serial Message 的帧格式如下:

前4帧SENT信号的“status&comm ”Nibble 的bit2 构成了串行消息的MessageID;中间8帧SENT信号的“status&comm Nibble 的bit2 构成了串行消息的DATA byte;后4帧SENT信号的“status&comm Nibble 的bit2 构成了串行消息的CRC校验位。

Enhance Serial Message 格式

  • 增强型串行消息的传输是依靠SENT信号“status&comm”Nibble中的bit2和bit3共同传输的。增强型串行消息可以配置成12bit data和8bit messageID。也可以配置成16bit data和 4bit message ID。每传输一个增强型串行消息需要18SENT信号。
  • 增强型串行消息的识别:

如果连续6帧SENT信号“status&comm”Nibble中的bit3都是1,第7帧SENT信号“status&comm”Nibble中的bit3是0。那么从这个第1帧SENT信号 到 第18帧SENT信号中“status&comm”Nibble的bit2和bit3就可以提取出来一个增强型串行消息。

增强型消息可以根据配置位(由第8个SENT帧的bit3作为configuration bit)配置成两种形式:

12-bit 数据 and 8-bit 报文代号message ID (configuration bit = 0)

16-bit 数据 and 4-bit 报文代号message ID (configuration bit = 1)

                    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值