LIN数据格式

一、数据帧说明

  1. 间隔场低电平最少13个bit

  1. 同步场1个字节 0x55

  1. 标识场1个字节 PID (bit0-5:是实际PID,bit6-7是校验位)

  1. 数据场n+1个字节D0-Dn,LIN一帧数据最大可以传8个字节(n<=7)

  1. 校验场1个字节 Sum

二、PID与Sum计算

PID计算
/*
bit7 = ~(bit1 ^ bit3 ^ bit4 ^ bit5);
bit6 = (bit0 ^ bit1 ^ bit2 ^ bit4);
*/
//1.直接计算
union LIN_PID
{
    unsigned char PID;
    struct
    {
        unsigned char  bit0 : 1;
        unsigned char  bit1 : 1;
        unsigned char  bit2 : 1;
        unsigned char  bit3 : 1;
        unsigned char  bit4 : 1;
        unsigned char  bit5 : 1;
        unsigned char  bit6 : 1;
        unsigned char  bit7 : 1;
    }bit;
};

unsigned char GetPID(unsigned char PID)
{
    union LIN_PID Pid_data;
    Pid_data.PID = PID;
    Pid_data.bit.bit7 = ~(Pid_data.bit.bit1 ^ Pid_data.bit.bit3 ^ Pid_data.bit.bit4 ^ Pid_data.bit.bit5);
    Pid_data.bit.bit6 = (Pid_data.bit.bit0 ^ Pid_data.bit.bit1 ^ Pid_data.bit.bit2 ^ Pid_data.bit.bit4);
    return Pid_data.PID;
}

//2.PID数组表
/*******************************************
下面表是上面代码计算从0x00-0xFF对应的PID
for (i = 0; i < 256; i++)
{
    printf("0x%02x,", GetPID(i));
}
PID实际只有6位,即0x00-0x3F,多计算到0xFF,
是因为有的文档是给6bit PID,有的给8bit PID。
例如0x3D(6bit)=0x7D(8bit)即bPID[0x3D]=bPID[0x7D]
*******************************************/
const unsigned char bPID[] = {
0x80,0xc1,0x42,0x03,0xc4,0x85,0x06,0x47,0x08,0x49,0xca,0x8b,0x4c,0x0d,0x8e,0xcf,
0x50,0x11,0x92,0xd3,0x14,0x55,0xd6,0x97,0xd8,0x99,0x1a,0x5b,0x9c,0xdd,0x5e,0x1f,
0x20,0x61,0xe2,0xa3,0x64,0x25,0xa6,0xe7,0xa8,0xe9,0x6a,0x2b,0xec,0xad,0x2e,0x6f,
0xf0,0xb1,0x32,0x73,0xb4,0xf5,0x76,0x37,0x78,0x39,0xba,0xfb,0x3c,0x7d,0xfe,0xbf,
0x80,0xc1,0x42,0x03,0xc4,0x85,0x06,0x47,0x08,0x49,0xca,0x8b,0x4c,0x0d,0x8e,0xcf,
0x50,0x11,0x92,0xd3,0x14,0x55,0xd6,0x97,0xd8,0x99,0x1a,0x5b,0x9c,0xdd,0x5e,0x1f,
0x20,0x61,0xe2,0xa3,0x64,0x25,0xa6,0xe7,0xa8,0xe9,0x6a,0x2b,0xec,0xad,0x2e,0x6f,
0xf0,0xb1,0x32,0x73,0xb4,0xf5,0x76,0x37,0x78,0x39,0xba,0xfb,0x3c,0x7d,0xfe,0xbf,
0x80,0xc1,0x42,0x03,0xc4,0x85,0x06,0x47,0x08,0x49,0xca,0x8b,0x4c,0x0d,0x8e,0xcf,
0x50,0x11,0x92,0xd3,0x14,0x55,0xd6,0x97,0xd8,0x99,0x1a,0x5b,0x9c,0xdd,0x5e,0x1f,
0x20,0x61,0xe2,0xa3,0x64,0x25,0xa6,0xe7,0xa8,0xe9,0x6a,0x2b,0xec,0xad,0x2e,0x6f,
0xf0,0xb1,0x32,0x73,0xb4,0xf5,0x76,0x37,0x78,0x39,0xba,0xfb,0x3c,0x7d,0xfe,0xbf,
0x80,0xc1,0x42,0x03,0xc4,0x85,0x06,0x47,0x08,0x49,0xca,0x8b,0x4c,0x0d,0x8e,0xcf,
0x50,0x11,0x92,0xd3,0x14,0x55,0xd6,0x97,0xd8,0x99,0x1a,0x5b,0x9c,0xdd,0x5e,0x1f,
0x20,0x61,0xe2,0xa3,0x64,0x25,0xa6,0xe7,0xa8,0xe9,0x6a,0x2b,0xec,0xad,0x2e,0x6f,
0xf0,0xb1,0x32,0x73,0xb4,0xf5,0x76,0x37,0x78,0x39,0xba,0xfb,0x3c,0x7d,0xfe,0xbf
};
Sum计算

经典校验(Lin1.x、Lin2.x):pData只包含D0……Dn

增强校验(Lin2.x):pData包含PID、D0……Dn

注意:PID 0x3C、0x3D只用经典校验

unsigned char LIN_GetCheckSum(unsigned char* pData, int nSize)
{
    int i = 0;
    unsigned short wSum = 0;
    unsigned char bSum = 0;

    for (i = 0; i < nSize; i++)
    {
        wSum += pData[i];
        if (wSum > 255)
        {
            wSum -= 255;
        }
    }
    bSum = wSum & 0xff;    
    return (~bSum);
}

//测试D0=1,D1=2,D2=3,D3=4
int main()
{
    unsigned char bData[]={0x1,0x2,0x3,0x4};
    printf("0x%02x",LIN_GetCheckSum(bData, sizeof(bData)));
}

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在CANOE中抓取LIN数据的方法是通过在网络上添加一个LIN节点来实现的。在CAN和LIN总线上增加节点相对容易,但对于车载以太网,需要采取一些特殊的措施来确保不丢包并且不对原有连接产生时延等影响。 在CANOE中,可以使用CAPL脚本来实现抓取LIN数据。CAPL是CANOE的一种脚本语言,用于控制和扩展CANOE的功能。通过编写CAPL脚本,可以定义LIN节点并实现对LIN数据的抓取。 首先,需要在CANOE中创建一个LIN节点,并为其配置正确的通信参数。然后,可以使用CAPL脚本来定义LIN节点的行为,包括接收和发送LIN数据。通过在脚本中添加相应的事件处理程序,可以实现对LIN数据的抓取和处理。 具体的CAPL脚本可以根据具体的需求和LIN网络的配置进行编写。可以在脚本中定义LIN消息的过滤条件,并将符合条件的消息保存到文件或进行进一步的处理。通过使用CANOE的调试功能,可以监视LIN节点的数据流,并对数据进行分析和调试。 总之,在CANOE中抓取LIN数据可以通过创建LIN节点并使用CAPL脚本来实现。通过编写适当的脚本,可以实现对LIN数据的抓取、过滤和处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [车载以太网报文如何抓包?包括100BASE-T1/1000BASE-T1](https://blog.csdn.net/weixin_42734794/article/details/112606585)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【CANoe】第二章CANoe概述](https://blog.csdn.net/qq_45302638/article/details/126242689)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值