当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]随着汽车智能化程度的提高和迅速升级换代的需要,汽车电子网络正在由集中式控制向分布式控制发展。LIN总线作为CAN总线的有效补充,以低速率和低成本的实现有效解决了分布式

随着汽车智能化程度的提高和迅速升级换代的需要,汽车电子网络正在由集中式控制向分布式控制发展。LIN总线作为CAN总线的有效补充,以低速率和低成本的实现有效解决了分布式控制带来的成本增加问题。车身分布式控制系统中,采用CAN总线和LIN总线连接各个控制单元,完成单元之间的数据交换,系统结构如图1所示。

 

UART以状态机的形式实现LIN通信 " />

图1 车身控制系统结构图

该车身控制系统包括车灯模块、车门模块、车内模块、控制面板模块和仪表盘模块,分别完成对相应负载的控制和监测,同时通过CAN总线完成数据交换。其中车灯模块和车门模块基于CAN/LIN总线以分布式的形式实现。本文重点论述的是LIN协议的实现。

LIN协议分析和状态机的设计

有限状态机是由一组状态、一个起始状态、输入以及将输入与当前状态转换为下一个状态的转换函数所组成,它是一个特殊的有向图,包括一些状态节点和连接这些状态的有向弧。对特定的状态机而言,首先要建立一些有效的状态,然后设计相应的算法完成状态的转换。

一个完整的LIN帧由间隔场、同步场、PID、数据场以及校验和场组成,LIN协议驱动器要实现的便是依序完成间隔场和同步场的检测、ID的发送和接收、数据场字节的发送和接收,最后完成校验。状态机形式与LIN协议数据链路层规范的定义相吻合,可以通过建立相应的状态来描述相应的场从而描述整个 LIN帧,且可以通过监控当前状态,按照当前接收到的字节切换其状态,从而以状态转换的方式依序完成各个场的发送和接收。设计以下几个状态:IDLE、 BREAK、SYNBYTE、IDENTIFY、TRANCEIVE和 CHECKS UM,设置标志位state反映LINdriver的状态,idle,pendin g,succe ss,当处于LIN正确通讯的中间状态时,state=pending,当LIN通讯失败,state=idle,当完成一次完整的LIN通讯,state=success。

状态的监控和转换是在UART接收中断服务程序中实现的。因为LIN总线采用单根线通信,UART外接LIN物理层收发器,所以当UART发送的总线数据和接收到的总线数据一样时,UART接收到的数据便是UART发送的数据,在接收中断服务程序中完成状态转换算法,如图2。通过判断当前状态和接收到的数据切换LINdriver的状态,同时更新标志位。

 

图2 LIN协议状态机

软件设计

软件设计流程如图3所示。首先进行初始化,主要包括UART模块的初始化和I/O脚初始化,设置波特率,使能接收中断,设置LIN物理层收发器相应 I/O脚方向及电平,然后在UART接收中断服务程序中以状态机的形式完成LIN通讯。下面结合LIN帧结构和LINdriver的状态转换对该状态机算法进行阐述。

 

LIN通信 " />

图3 软件流程图

LIN帧以间隔场起始的,LIN- driver的起始状态为IDLE,此时state=idle。间隔场是一个13位0的场,引起接收中断同时置位UART模块的frameerror位,在UART接收中断服务程序中,判断接收到的数据为0x00且frameerror标志位为1时,便认为接收到了间隔场,这时LINdriver从 IDLE切换到BREAK,state=pending。

同步场是一个0x55的字节,当前状态为BREAK时,如果接收到的数据为0x55,LINdriver切换为SYNBYTE,state=pending保持不变,否则切换为IDLE,state=idle;

PID是带奇偶校验的ID,它以低6 位 ID0-ID5表示ID,高两位P0、P1是对 该ID的奇偶校验,当前状态为SY NBYTE时,收到的数据便为PID。首先按照奇偶校验算法对PID进行校验,校验通过再按照应用层协议对该PID进行过滤,过滤成功则 LINdriver切换为TRANCEIVE,校验失败或者过滤失败则LINdriver返回IDLE,state=idle;

当前状态为TRANCEIVE时,接收到的数据便是数据场中字节,当数据接收完毕,LINdriver切换为CHECKSUM。当前状态为 CHECKSUM时,接收到的数据便为校验和场,校验成功,便置state=success,表示成功地完成了一次LIN通讯,这时数据场中的数据是有效的,可以用于应用程序;校验失败表示LIN通讯失败,数据场中数据无效。

结语

本文针对普通单片机,借助于其片上UART,以状态机的形式实现了LIN协议驱动,降低了LIN的实现成本,运行可靠稳定,符合LIN总线以低成本作为CAN总线有效补充的初衷。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式系统与底层软件开发中,C语言的枚举类型(enum)因其强大的语义表达能力,成为状态机设计和位域操作的核心工具。本文将从底层原理出发,解析枚举类型在状态机实现中的优化策略,并探讨其与位域(bit-field)的协同...

关键字: C语言 嵌入式系统 状态机

在SIP终端在同一个函数中同时作为主叫方和被叫方的情况。即在RequestINVITE函数中,这个SIP终端需要能够构造INVITE请求(作为主叫方),同时还需要处理作为被叫方时的各种响应,比如发送100 Trying、...

关键字: INVITE 状态机

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)通信协议是嵌入式系统中广泛应用的通信协议之一。它以其简单、可靠和灵活的特性,成为连接微控制器、传感器、...

关键字: 嵌入式系统 UART 通信协议

在嵌入式开发领域,UART、I2C、SPI等接口技术被广泛使用,它们为微控制器与外部设备之间的通信提供了高效、可靠的途径。本文将详细介绍这三种常用的外设接口。

关键字: UART I2C

在现代嵌入式系统开发中,串行通信协议扮演着至关重要的角色。其中,UART(通用异步收发传输器)、I2C(Inter-Integrated Circuit)和SPI(Serial Peripheral Interface)...

关键字: UART I2C SPI 串行总线

串口全称是串行接口(Serial Interface),串口通讯指仅用一对传输线就能将数据以比特位进行传输的一种通讯方式。尽管串口通讯必按字节传输的并行通信慢,但是串口可以在仅用两根线的情况下完成数据传输,大大降低了成本...

关键字: 串口 UART

在嵌入式系统开发中,有限状态机(FSM)是一种强大的工具,它能够帮助开发者以清晰、结构化的方式管理复杂的状态转换逻辑。FSM通过将系统行为划分为一系列状态和状态之间的转换,简化了系统的设计和调试过程。在第一部分中,我们已...

关键字: 嵌入式系统 状态机 FSM C++

自动饮料售卖机作为一种自助式零售设备,近年来在国内外得到了广泛应用。本文将详细介绍一款功能完善、操作简便的自动饮料售卖机的设计与实现过程,包括有限状态机(FSM)的设计、Verilog编程、以及设计工程中可使用的工具及大...

关键字: Verilog 状态机 FSM

在现代电子系统中,同步信号处理和模式识别是至关重要的。特别是在通信、数据处理和控制系统等领域,对输入信号进行实时分析以检测特定模式或字符串是常见的需求。本文将介绍如何使用Verilog语言设计一个有限状态机(FSM),以...

关键字: Verilog 状态机

在数字电路与系统设计领域,有限状态机(Finite State Machine,FSM)是一种重要的设计工具。FSM能够基于输入信号和当前状态,通过状态转移和输出逻辑,实现复杂的时序控制功能。Moore状态机和Mealy...

关键字: Moore Mealy 状态机
关闭