SENT 单边半字传输协议:单线 4 位半字节、CRC 与 tick 时钟
更新时间:2026-09-19。前置:定时器输入捕获/PWM、CAN 错误与 Bus-Off。汽车里大量智能传感器(进气压力 MAP、温度、节气门、油门踏板位置)需要比模拟电压/PWM 更抗干扰、比 CAN 更便宜的数字接口,SAE J2716 **SENT(Single Edge Nibble Transmission)**用一根信号线完成。
一、协议定位
- 单根信号线、单向(传感器→ECU),传感器供电另算;无需晶振(时钟由同步脉冲推导),成本低,比 PWM/模拟抗噪、分辨率高。
- 发送方是传感器(从),ECU 是接收方;物理层是固定下降沿驱动、沿到沿时间编码,ECU 用输入捕获测量脉宽解码(见 定时器捕获)。
- 衍生 **SPC(SENT Short PWM Code)**增加 ECU→传感器 触发(双向、可定时同步采样),本文聚焦基础 SENT。
二、编码:时间长度表示 4 位值(核心)
SENT 不直接发高低电平比特,而是用相邻下降沿之间的时间长度(单位 tick)编码一个 4 位半字节(nibble):
- tick:基本时间单位,标称 3~10µs(常见 3µs)。接收端不假设精确 tick,而由同步脉冲算出实际 tick。
- 一个 nibble(值 0~15)的低电平+高电平总时长 =
(值 + 12) 个 tick,即范围 12~27 tick(下降沿到下一个下降沿)。- 值 0 → 12 tick;值 15 → 27 tick。加 12 偏移保证最小脉宽、便于区分沿。
- 因为数据藏在时间里,固定逻辑电平的噪声毛刺只要不产生错误下降沿就不影响,抗扰好;但要求接收端定时器分辨率足够、中断延迟小(见 UART 采样 的过采样理念)。
三、帧结构
一帧由若干下降沿界定的脉冲串组成:
[校准/同步脉冲][状态/通信 nibble][数据 nibble1..6][CRC nibble](可选暂停脉冲)
56 tick 12~27 tick 各 12~27 tick 校验- 校准/同步脉冲(sync/calibration):固定 56 tick 长(标准帧),作为标尺。接收器测它的实际物理时间除以 56,得到本次/当前温度下的实际 tick 时长——从而无需高精度晶振也能解码后续 nibble(类似 UART auto-baud 靠已知字符对齐,但这里每帧都校准)。
- 状态/通信半字节:传传感器状态(慢通道串行位、断线路等),也用于慢速消息帧标识。
- 数据 nibble:通常 1~6 个 nibble,承载 1~3 路测量值(如两路 12 位信号各 3 nibble,或 8 位状态+数据)。
- CRC nibble:对状态+数据 nibble 计算 CRC-4,检测传输错误;不同厂商/修订版有不同 CRC 多项式/初值变种(legacy 与 recommended),接收需按信号列表匹配。
- 可选暂停脉冲(pause):帧尾固定填充使整帧周期恒定,或作为帧分隔;可配有无。
帧数据按 nibble 流连续发,接收按沿间隔逐个还原 nibble 再拼接、校验。
四、慢速通道(串行消息)
除快速周期数据外,利用状态 nibble 中的位逐帧携带 1 bit,跨多帧拼出一条慢速串行消息(sensor ID、诊断码、附加温度等),用短串行消息(Short Serial Message,含 4 位 ID+8 位数据)或增强串行消息(16 位 ID/数据),并带自己的校验。ECU 要跨帧移位累积、识别消息类型位。
五、接收端实现要点
- 用定时器 **输入捕获(ICU)**在每个下降沿锁存自由计数,中断中算与上一沿的间隔,除以当前 tick 估计 → nibble;或用 PWM 测量模式(见 输入捕获)。
- 同步脉冲检测:间隔≈56 tick(物理上明显长于 27 tick)时认定为帧头,重新校准 tick 计数。
- 维护 nibble 计数状态机(同步→状态→数据×N→CRC),到 CRC 核对、计数不符或 CRC 错则丢帧并报诊断(可结合 事件路由/中断)。
- 断线诊断:线常低/常高(无沿)超时判开路/短路;传感器失效值、状态 nibble 错误标志要上报。
- SPC 模式还要 ECU 在精确时刻发触发脉冲(命令模式/测量模式),传感器在可编程延时后回帧,实现多传感器同步采样。
六、常见的坑
- tick 假设固定:传感器有容差和温漂,必须用每帧 56 tick 同步脉冲实时标定,不能写死 µs。
- 定时器分辨率/中断延迟不足:tick 3µs 量级,低分辨率定时器或高抖动 ISR 量化误差大;要用硬件捕获而非软件轮询。
- CRC 变种不匹配:legacy/recommended CRC、初值/多项式差异导致好帧被判错或错帧漏检。
- 帧长度/暂停脉冲配置不一致:pause pulse 有无、nibble 数按信号列表,配错帧同步乱。
- 慢通道当快信号:串行消息跨多帧才拼完,速率低,不能当实时测量。
- 短/增强串行消息位序错:跨帧位移和类型位处理错,ID/数据错位。
- 毛刺产生伪下降沿:虽时间编码抗噪,强干扰造成的假沿仍会插入错误 nibble,靠 CRC/帧长度/合理间隔范围剔除。
- 间隔超范围不判错:<12 或 >27 tick(除同步)应立即弃帧,否则噪声被当数据。
- 断线无超时检测:无沿/常电平需超时诊断。
- SPC 触发时刻抖动:多传感器同步依赖触发延时精度,软件触发抖动破坏同步。
- nibble→数据拼接顺序错:MSB/LSB nibble 顺序按规范,拼反数值错。
- 多实例 tick 混用:多个 SENT 传感器各自 tick 略不同,要分别按各自同步脉冲标定。
相关与延伸
沿时间测量见 定时器输入捕获/PWM;自校准思路类比 UART 自动波特率;汽车总线背景见 CAN 错误恢复;时间触发同步见 FlexRay。
总结
SENT(SAE J2716)是传感器到 ECU 的单向单线低成本数字接口:数据不按电平比特而按相邻下降沿之间的 tick 数编码,每个 4 位半字节占 (值+12) 个 tick(12~27),帧以固定 56 tick 的校准同步脉冲开头,接收端测其物理时长除以 56 实时推出当前 tick 因而传感器无需晶振,随后是状态半字节、1~6 个数据半字节和 CRC-4 校验,状态位还能跨帧拼出携带诊断/ID 的慢速串行消息;接收端必须用定时器硬件输入捕获逐沿测量、以同步脉冲重标定 tick、按 nibble 计数状态机组帧并做 CRC 和断线超时——写死 tick、定时器分辨率不足、CRC 变种不匹配和暂停脉冲/帧长度配置不一致是四大常见坑。