实用LIN协议驱动程序的设计

发布于:2024-07-17 编辑:匿名 来源:网络

简介:  LIN总线是CAN总线的有效补充,在低端车身电子领域取代CAN总线。

既能满足功能要求,又能节省成本。

对成本更加敏感的国产汽车已被广泛使用。

与CAN总线不同,CAN总线有专用的协议驱动程序,用户无需管理底层通信,而是直接编写应用程序。

1、LIN总线没有专用的协议驱动程序。

一般需要基于SCI模块使用软件来实现其底层通信。

笔者为某国产汽车设计了一款LIN主节点产品。

基于LIN 2.0规范,首先介绍了LIN协议驱动程序的功能,然后从数据链路层和应用层介绍了协议驱动程序的关键设计技术。

  1 驱动功能:  LIN规范定义了数据格式、消息格式和基于时间片的调度通信机制。

作为LIN主节点,需要实现的功能包括:  1。

消息封装并根据消息格式发送、接收和解析、填充/提取ID和数据;   2。

通信管理,以调度的形式控制时间片的轮换和相应帧的发送;   3。

网络管理、睡眠和唤醒;   LIN总线采用8N1 SCI数据格式,协议驱动程序基于SCI以软件形式实现。

软件是“数据+操作” 2、作为一个可重用、可移植性强的软件模块,其数据结构和API函数的设计是软件模块设计的两个重要组成部分。

下面从数据链路层和应用协议驱动程序的数据结构设计和API函数设计两个方面进行介绍。

  2 数据链路层:   数据链路层主要实现LIN报文的发送和接收。

报文格式如图1所示:   图1 LIN报文格式   LIN报文 由报文头+响应组成。

消息头包括三部分:同步间隔、同步字段和标识符。

实用LIN协议驱动程序的设计

同步间隔为10bit 0,同步字段为0x55,标识符唯一标识该消息;响应包括数据和验证。

和两部分。

消息数据长度是由应用层设计指定的,也可以认为是由标识符唯一指定的。

校验和包括经典校验和和增强校验和两种方法,均采用带进位的加法计算。

,不同之处在于经典校验和只检查数据,而增强校验和的校验和包含标识符。

诊断消息使用经典校验和,其他消息使用增强校验和。

  由于LIN物理层是单线通信,采用多从机时间片轮换的方式,不存在CAN总线3的总线竞争问题,因此LIN节点发送的数据可以读回相同的数据,以及消息的发送和接收 可以统一在SCI的接收中断中,以状态机4的形式实现。

状态对应于消息的各个组成部分。

状态机的跳转条件是数据接收中断。

根据LIN消息结构,设计如下形式的结构体:   typedef struct  {  uchar pid;  uchar datalen;  uchar data[8];  uchar checksum ;  l_bool done;  l_state state;  l_bool error;  }l_frame;  其中pid是标识符,data是消息数据,datalen是数据长度,checksum是校验和,state为状态机状态,其类型定义如下:  typedef enum  {  l_IDLE,  l_BREAK,  l_SYNC,  l_PID,  l_DATA,  l_CHECKSUM  }l_state;  状态机设计在SCI接收中断处理函数中实现。

部分实现如下:   void l_ifc_rx_BcmIfc(void)  {  uchar ch,tmp,i;  ch= Lin_periph[SCIDRL];  switch(Cur_frame.state){   情况l_IDLE:  if(0x00==ch){  Cur_frame.state=l_BREAK;  l_SendChar(0x55);  }else{  Cur_frame.state=l_IDLE;  }  break;  case l_BREAK:  if(0x55==ch){  Cur_frame.state=l_SYNC;  l_SendChar(Cur_sch_item->pid);  }else {  Cur_frame.state=l_IDLE;  }  break;  case l_SYNC:  if(Cur_sch_item->pid!=ch){  Cur_frame.state=l_IDLE;  }否则{  Cur_frame.state=l_PID;  Cur_frame.pid=Cur_sch_item->pid;  Cur_frame.datalen=Cur_sch_item->datalen;  if(l_SEND==Cur_sch_item->mode){  tmp=Cur_sch_item ->data[0];  l_SendChar(tmp);  Cur_frame.data[0]=tmp;  Cur_frame.datalen--;  }  }  break;  情况l_PID:  Cur_frame.state=l_DATA;  if(l_SEND==Cur_sch_item->mode){  if(Cur_frame.datalen==0){  Cur_frame.check=l_CalcChksum( );  l_SendChar(Cur_frame.checksum);  Cur_frame.done=1;  }else{  tmp=Cur_sch_item->data[Cur_sch_item->datalen-Cur_frame.datalen];   l_SendChar(tmp);  Cur_frame.data[Cur_sch_item->datalen-Cur_frame.datalen]=tmp;  Cur_frame.datalen--;  }  }else{  Cur_frame.data[ 0]=ch;  Cur_frame.datalen--;  }  break;  case l_DATA:  ...  break;  case l_CHECKSUM:  default :  break;  }  }  在声明变量和函数时,均以“l_”开头,这样可以避免跟其他模块在变量和函数命名空间上的冲突,从而增强了可移植性。

  3应用层:  应用层主要实现报文信号访问及通信管理。

  3.1信号访问  首先根据信号在消息数据域中的位置和长度,为每个消息的数据域设计相应的结构体,然后以结构体成员变量的形式访问信号。

以阳光传感器与该节点通信发送的消息为例。

消息数据字段长度为l_SunSensLen=4。

其信号包括阳光采样值、大灯操作请求、小灯操作请求等。

消息数据字段结构如下所示:   typedef struct  {  l_bool l_ss_sshealth:1;  l_u8 l_ss_headlampreq: 2;  l_bool l_ss_poslampreq:2;  l_u8:3;  l_u8 l_ss_ssvalue:8;  l_u8 l_ss_headlampswth:8;  l_bool l_ss_sserror:1;  l_u8 :3;  l_u8 l_ss_ssmsgcounter:4;  }l_ss_msgType;   为了方便使用,定义一个 union 如下:   typedef union  {  l_u8 data[l_SunSensLen];  l_ss_msgType sun感觉;   }l_ss_msgBuf;  为此消息数据字段l_SunSens定义全局变量l_ss_msgBuf;采取“无”带复制的访问方式5,直接对LIN信号赋值并获取值,如读写l_SunSens.sunsens.l_ss_headlampreq来实现对大灯操作请求信号的访问。

采用这种方式的原因是采用调度方式的LIN消息周期是固定的,信号变化速度是调度长度的整数倍,对于LIN应用来说,基本上在几百毫秒的数量级。

应用程序对LIN非常敏感。

信号数据的访问速度远大于这个变化速度,即数据在变化之前就已经被访问了,并且节省了变量空间  3.2 通信管理  LIN通信使用时间。

调度管理是调度通信的核心,调度条目的数据结构如下:   typedef struct  {  uchar handle;  uchar pid;   l_Resp_mode 模式;  uchar datalen;  uchar *data;  uchar 刻度;  }l_sch_table_item;  调度表是一个l_sch_table_item结构体数组,pid表示该条目对应的是哪条消息,mode表示节点是发送还是接收数据字段,*data是消息数据字段结构体的地址,ticks是时间长度slot,在初始化调度数组时,将消息数据字段结构体变量的地址赋给调度表项中的*data,从而实现访问方法部分的“无需复制的访问方法”。

调度表是一个循环序列。

当时间表到达表尾时,切换到表头并继续旋转。

调度表的轮转函数如下:   void l_sch_tick(void)  {  if(1==TM [LIN_TIMESLOT_MS].overflow_flag){  TM[LIN_TIMESLOT_MS].overflow_flag=0 ;  if(Cur_sch_item==&l_sch_table_main[l_MAIN_SLOTS-1]){  Cur_sch_item=l_sch_table_main;  }否则{  Cur_sch_item++;  }  Cur_ frame.state=l_IDLE;  Cur_frame.done=0;  Cur_frame.error=0;  if(Cur_sch_item->pid!=l_Freepid){  l_SendBreak();  }else{  ;   }  TimerStart(LIN_TIMESLOT_MS,Cur_sch_item->ticks,0,1);  }  }   应用层函数还包括睡眠和唤醒函数,这里不再详细介绍。

  结论  本文实现的LIN协议驱动模块可以轻松集成到应用程序中,并且独立于所使用的特定处理器和操作系统。

具有良好的可移植性,具有良好的实用价值和参考价值。

意义。

实用LIN协议驱动程序的设计

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • “容百科技”为LP:投资6.4亿进军电池领域

    “容百科技”为LP:投资6.4亿进军电池领域

    投资圈(ID:pedaily)据4月2日消息,容百科技发布公告称拟与关联方容百新能源投资合作合伙人管理层与其他人,共同设立产业投资基金,基金名称为容百电池三角一号股权投资基金合伙企业(有限合伙)(暂定名称,以市场监管机构最终核准登记的名称为准)。 该基金一期至一期目标

    06-18

  • 工信部:截至2020年底,我国移动宽带用户渗透率达108%

    工信部:截至2020年底,我国移动宽带用户渗透率达108%

    今天,工信部发布的数据显示,截至2020年底,我国固定宽带用户渗透率达108%。 宽带家庭普及率达到96%,移动宽带用户普及率达到96%。 %。 听,中小企业反馈平台。 倾听用户需求,倾听创业者声音,解决中小企业痛点。 点击立即参与调查并获得礼物。

    06-18

  • 日本新日本石油将以18亿美元收购日本可再生能源公司

    日本新日本石油将以18亿美元收购日本可再生能源公司

    据碳氢加工新闻10月8日报道,日本最大炼油商新日本石油计划以约18亿美元收购新加坡主权财富基金GIC。 收购日本可再生能源公司。 这笔交易将标志着日本顶级石油公司对可再生能源公司的首次重大收购,日经新闻称新日本石油正在寻求摆脱化石燃料的转型。 日本可再生能源公司成立

    06-08

  • 2023车企收官,内卷进入2.0时代

    2023车企收官,内卷进入2.0时代

    2023年,车企走向终结,进入2.0时代。 岁末年初,又到了算“总账”的时候了。 过去一年,汽车行业陷入困境。 内卷化已经不足以描述它了。 车企不得不以亏损为代价来降价占领市场,因为生存或死亡从来不是一个选择题,而是一个必须回答的问题。 理想汽车成为笑到最后的生力品牌

    06-18

  • 新闻 -长虹科技拟参与投资设立总规模1亿元的医疗产业并购基金

    新闻 -长虹科技拟参与投资设立总规模1亿元的医疗产业并购基金

    投资圈(微信ID:pedaily)据8月28日消息,长虹科技拟与深圳合江合作公司、江西省发展升级引导基金(有限合伙)、江西省金融投资集团有限公司、珠海合江文文股权投资基金(有限合伙)、共青城鑫瑞恒投资有限公司.有限公司在吉安市经开区共同投资设立医疗产业并购基金——合正

    06-17

  • 扩大非存储业务三星等正在大力投资系统半导体

    扩大非存储业务三星等正在大力投资系统半导体

    据说三星电子和SK集团将进行大规模投资以扩大其系统半导体业务。 据BusinessKorea报道,三星电子平泽P3工厂于今年4月开工,计划于今年下半年竣工。 它将拥有相当于25个足球场大小的洁净室,使其成为世界上最大的半导体工厂。 与2016年开始运营的平泽P2工厂一样,它将被建成内

    06-08

  • 字节大模型产品首次出海,推出ChitChop

    字节大模型产品首次出海,推出ChitChop

    科技星球*获悉,字节在海外推出了一款名为“ChitChop”的大模型产品。 开发运营公司为POLIGON,字节的海外社交产品Helo也同样由该公司运营,目前有独立APP和网页版在线。 图例:ChitChop 的产品徽标。 据悉,ChitChop是一款人工智能助理工具,可为用户提供高达+的智能机器人服

    06-18

  • 【AI24小时】2023年12月19日

    【AI24小时】2023年12月19日

    1。 「真实智能」完成近2亿元C轮融资,推出基于自主研发大模型的Agent智能>>点击查看 36氪获悉,真实智能近日宣布完成近2亿元C轮融资。 本轮由金泰富资本和安吉智慧谷联合领投,安吉凉山国创参投。 睿智成立于今年8月,从AI+RPA(机器人流程自动化)领域起步,迄今已为数字政

    06-17

  • “Aibee艾比智能”获新一轮战略投资

    “Aibee艾比智能”获新一轮战略投资

    3月18日,线下空间数字化、智能化企业“Aibee艾比智能”正式宣布获得新一轮战略投资,由小米集团领投。 招商资本跟投。 本轮融资后,AibeeiBi智能正式加入“独角兽”行列。

    06-18

  • 科友半导体6英寸SiC晶体厚度突破32mm

    科友半导体6英寸SiC晶体厚度突破32mm

    科友半导体科友半导体产学研集聚区一期启动前夕,科友半导体实验线传出好消息,凭借科友半导体自主设备和技术研发的6英寸SiC晶体,厚度实现突破,达到32.mm,领先行业。 科友半导体成立于2006年,专注于第三代半导体材料与设备的研究。 在4英寸、6英寸SiC衬底及装备技术相继突

    06-06

  • 阿里最新业绩揭晓:4589亿!赚钱还不如字节

    阿里最新业绩揭晓:4589亿!赚钱还不如字节

    与字节竞争,阿里逐渐陷入劣势。 近日,阿里发布了最新的财报,证实了一个结论:在互联网公司阵营中,字节已经成为该国最赚钱的公司,并且很快将成为收入最大的公司。 就业绩而言,字节最近经历了两次PK,一次与腾讯,一次与阿里。 在与腾讯的PK中,字节在营收和净利润上均获

    06-17

  • 30亿,上饶经济技术开发区基金中的基金发布

    30亿,上饶经济技术开发区基金中的基金发布

    投资界(ID:pedaily)消息,4月6日,上饶经济技术开发区产业与资本对接会在江西上饶成功举办。 此次推出的上饶经济开发区新优质产业基金,基金规模30亿元,主要定位形成中小型子基金,助力产业项目发展。 与同步推出的上饶现代产业引导基金、上饶高新技术基金一起,构建新型

    06-18