SENT网关转发数据读取(串口)
  OfxKr3hzcJZ7 2023年12月08日 15 0

通过串口助手获取到的SENT网关转发数据如图所示:

SENT网关转发数据读取(串口)_MACH

1.1、数据来源及类型分辨

SENT网关转发数据读取(串口)_串口_02

数据中ID = D2(十六进制)==> 210,则该数据为SENT2数据发送回声

若为SENT1 接收到的快速帧数据,ID = 100 = 64(十六进制)

若为SENT2 接收到的快速帧数据,ID = 200 = C8(十六进制)

若为SENT1 接收到的慢速帧数据,ID = 101 = 65(十六进制)

若为SENT2 接收到的慢速帧数据,ID = 201 = C9(十六进制)

1.2、数据读取与读取顺序

在SENT Configuration中有以下选项会影响到数据的读取顺序 (仅快速帧)

SENT网关转发数据读取(串口)_串口_03

当不勾选,即Swap fast data nibbles = 0时

SENT网关转发数据读取(串口)_SENT网关_04

60代表status=0,DataNibbleCount=6

22为CRC=2,CRCCalculated=2


注意:Swap fast data nibbles = 0,

21(十六进制)代表DATANibble0 = 1,DATA1Nibble1 = 2

43(十六进制)代表DATANibble2 = 3,DATANibble3 = 4

65(十六进制)代表DATANibble4 = 5,DATANibble5 = 6

即21 43 65为SENT的数据,正确读取顺序为0~5 ==> 1 2 3 4 5 6(从左到右数据字节升高)

当勾选,即Swap fast data nibbles = 1时

SENT网关转发数据读取(串口)_MACH_05

60代表status=0,DataNibbleCount=6

22为CRC=2,CRCCalculated=2


注意:Swap fast data nibbles = 1,

21(十六进制)代表DATANibble0 = 2,DATA1Nibble1 = 1

43(十六进制)代表DATANibble2 = 4,DATANibble3 = 3

65(十六进制)代表DATANibble4 = 6,DATANibble5 = 5

即21 43 65为SENT的数据,正确读取顺序为0~5 ==> 2 1 4 3 6 5(从左到右数据字节升高)

2、数据解析与计算

2.1、数据编码解析

以发送下列数据为例,(红色框内为SENT数据):

SENT网关转发数据读取(串口)_十六进制_06

①当Swap fast data nibbles = 0时,SENT的数据0~5 ==> 1 2 3 4 5 6(从左到右数据字节升高)

②当Swap fast data nibbles = 1时,SENT的数据0~5 ==> 2 1 4 3 6 5(从左到右数据字节升高)

Ps:为避免重复输入上述内容,用序号①和②代表上述两种情况。

SENT网关转发数据读取(串口)_串口_07

Ps:以SENT的数据0~5 ==> 1 2 3 4 5 6为例,得上图


解析过程中需要考虑传感器厂家对SENT数据的编码类型,一般有两种:

Intel(小端模式):数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

当Start bit = 0(起始位),Bit Length = 12(数据长度)时

①0x321 ==> 0011 0010 0001

②0x412 ==> 0100 0001 0010

当Start bit = 0(起始位),Bit Length = 9(数据长度)时

①0x121 ==> 1 0010 0001

②0x012 ==> 0 0001 0010

当Start bit = 12(起始位)Bit Length = 12(数据长度)时

①0x654 ==> 0110 0101 0100

②0x563 ==> 0101 0110 0011


motorola(大端模式):数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。

当Start bit = 0(起始位),Bit Length = 12(数据长度)时

①0x456 ==> 0100 0101 0110

②0x365 ==> 0011 0110 0101

当Start bit = 0(起始位),Bit Length = 9(数据长度)时

①0x056 ==> 0 0101 0110

②0x156 ==> 1 0110 0101

当Start bit = 12(起始位)Bit Length = 12(数据长度)时

①0x123 ==> 0001 0010 0011

②0x214 ==> 0010 0001 0100

Ps:同一个十六进制数据中的高半字节(高四位)与低半字节(低四位)类似十进制数据中的十位和个位。

2.2、实际数据计算

SENT网关转发数据读取(串口)_串口_08

计算公式:

当Start bit = 0(起始位),Bit Length = 12(数据长度),Encoding=Intel时

①实际数据=0x321*Multiplier+Offset=801*Multiplier+Offset

②实际数据=0x412*Multiplier+Offset=1042*Multiplier+Offset

※SENT网关解析小技巧:

如果无法理解本篇中的"读取顺序"与"编码模式"两个概念,如何解析数据?

假设传感器输出的SENT数据为1 2 3 4 5 6,Swap fast data nibbles = 0时串口中读取得数据为21 43 65。

Intel模式,将21与65对调位置,数据变成65 43 21,此时6为最高半字节,1为最低半字节(读取时对调,自行用代码实现)。

motorola模式,让Swap fast data nibbles = 1,此时数据发送交换,串口中读取得数据为12 34 56,此时1为最高半字节,6为最低半字节。

Ps:Intel模式与motorola模式的分辨需参考对应传感器的SENT信号文档。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月08日 0

暂无评论

推荐阅读
  gBkHYLY8jvYd   2023年12月09日   12   0   0 cii++数据