资料介绍
随着汽车电子技术的高速发展和广泛应用,实现智能化和网络化是汽车发展的必然趋势。为简化日益增加的汽车电控设备的线路连接,提升系统的可靠性和故障诊断水平,实现各电控设备之间的数据资源共享,并建成开发的标准化、模块化结构,汽车网络总线技术得到了很大发展。目前,已经开发出多种总线,如控制器局域网总线CAN、车内网络总线LIN、高速容错网络总线FlexRay、面向媒体的系统传输总线MOST、更高带宽和传输速率的车载以太网Ethernet等,这里给大家介绍在MM32F013x上实现LIN通信的功能应用。
Part.1 什么是LIN
LIN 是 Local Interconnect Network 的缩写,是基于 UART/SCI(Universal Asynchronous Receiver-Transmitter /Serial Communication Interface,通用异步收发器/串行通信接口)的低成本串行通信协议,可用于汽车、家电、办公设备等多种领域。本文主要针对在MM32F013x上实现LIN在分布式的汽车电子网络系统中的应用。
LIN总线特点
- 极少的信号线即可实现国际标准ISO9141 规定
- 传输速率最高可达20Kbit/s
- 单主控器/多从设备模式无需仲裁机制
- 从节点不需晶振或陶瓷震荡器就能实现自同步,节省了从设备的硬件成本
- 保证信号传输的延迟时间
- 不需要改变LIN 从节点的硬件和软件就可以在网络上增加节点
- 通常一个LIN 网络上节点数目小于12 个共有64 个标志符
Part.2 LIN总线 帧结构
帧(Frame)包含帧头(Header)和应答(Response)两部分。
帧头包括同步间隔段、同步段以及PID(Protected Identifier,受保护ID)段,应答包括数据段和校验和段。
如图所示,其中值“0”为显性电平(Dominant),值“1”为隐性电平(Recessive),总线上实行“线-与”:当总线上有大于等于一个节点发送显性电平时,总线呈显性电平;所有的节点都发送隐性电平或不发送信息(不发送任何信息时总线默认呈隐性电平)时,总线才呈现隐性电平,即显性电平起主导作用。
Part.3 程序配置
01、初始化MM32F013x UART1串口
从官网下载MM32F013x例程,参考MM32F0133C7P的UART例程的初始化以及中断服务函数,这里不在赘述。
02、LIN的发送
2.1 同步间隔段的发送
UART内部有Break信号的发送,通过使能LIN,即可实现LIN的间隔段,代码如下:
bool LINSendbreak(void)
{
uint16_t Tempcnt = 0;
UART2->CCR |= UART_CCR_LIN; //LIN Enable
UART2->CCR |= UART_CCR_BRK; //Send Break
while ((UART2->ISR & 0x00000080) == 0) //TXBRK_INTF
{
Tempcnt++;
if (Tempcnt > 5000)
return (false);
}
return (true);
}
2.2 数据的发送
数据的发送沿用原有的UART接口数据发送即可:
bool LINSendChar(uint8_t ch)
{
uint16_t Tempcnt = 0;
while ((UART2->CSR & UART_IT_TXIEN) == 0)//The loop is sent until it is finished
{
Tempcnt++;
if (Tempcnt > 5000)
return (false);
}
UART2->TDR = (ch & (uint16_t)0x00FF);
return (true);
}
2.3 数据包的发送
有了上面2个基础函数进行发送,现在来看下数据包的具体发送,从下图中可以看出数据包是根据保护段的定义来进行区分是发送信号帧还是诊断帧。
信号帧的数据就可以做成以下的方式:
bool LINSendMsg(void)
{
uint8_t check_sum, i;
frame_send.error = 0;
if (!LINSendbreak()) //Send Break
return (false);
if (!LINSendChar(0x55)) //Send Sync Byte
return (false);
msg_send.Data[0] = LINCalcParity(msg_send.Data[0]);
for (i = 0; i < 9; i++)
{
if (!LINSendChar(msg_send.Data[i])) //Send Data
return (false);
}
check_sum = LINCalcChecksum(msg_send.Data, 1);
if (!LINSendChar(check_sum)) //Send Checksum
return (false);
frame_send.state = IDLE;
return (true);
}
而诊断帧的就是:
bool LINSendID(void)
{
if (!LINSendbreak())
return (false);
if (!LINSendChar(0x55))
return (false);
msg_send.Data[0] = LINCalcParity(msg_send.Data[0]);
if (!LINSendChar(msg_send.Data[i]))
return (false);
return (true);
}
这样就可以在等待UART中断函数里收到从机返回的数据。
2.4 从机的接受与发送
从机收数据与正常的串口一样,只需要做BRK信号的处理即可,从机收到数据以后按正常的返回数据,返回数据就不需要发送BRK信号。
if (LIN_RxBuff[1] == LIN_PID_60_0x3C)
{
msg_send1.Data[0] = 0x3C;
msg_send1.Data[0] = LINCalcParity(msg_send1.Data[0]);
UART2->ICR |= UART_ICR_RXIDLE; //clear idle int bit
UART2->IER |= UART_IER_RXIDLE; //enable uart rx idle int
for (i = 1; i < 9; i++)
{
if (!LINSendChar(msg_send1.Data[i]))
return (false);
}
check_sum = LINCalcChecksum(msg_send1.Data, 1);
if (!LINSendChar(check_sum))
return (false);
}
Part.4 MM32F013x LIN通信功能演示
通过逻辑分析仪可以看到信号帧的数据:
而诊断帧数据就有从机回应的数据:
有这个演示作为基础就可以开发LIN的通讯产品了。
- MM32F013x——I2C从机多地址应用 3次下载
- MM32F013x——ADC任意通道工作模式 10次下载
- MM32F013x——RTC闹钟定时唤醒 17次下载
- MM32F013x——LIN 通信 3次下载
- MM32F013x——UART 多处理器通信 4次下载
- MM32F013x——UART 极性取反通信 2次下载
- MM32F013x——UART 单线半双工通信 19次下载
- MM32F013x——ADC任意通道工作模式 4次下载
- MM32F013x——万年历 3次下载
- MM32F013x——移植EasyFlash组件 2次下载
- MM32F013x——移植EasyLogger组件 5次下载
- MM32F013x——Event Recorder使用方法 2次下载
- 基于ARM Cortex M0的微控制器MM32F013x 20次下载
- MM32F013x——UART 单线半双工通信 33次下载
- MM32F013x——UART 极性取反通信 17次下载
- LIN总线的基础知识 1017次阅读
- LIN总线系统的解析和应用 1133次阅读
- Lin总线介绍与静电浪涌保护专用器件 848次阅读
- 怎样去使用CANalyzer搭建LIN通信网络呢 1582次阅读
- LIN协议简介及数据帧结构解析 1.3w次阅读
- 汽车智能电池传感器MM912J637的主要特性及应用电路 2913次阅读
- 基于AT91SAM7A3芯片和CAN收发器实现CAN/LIN网关的设计 3711次阅读
- LIN总线通信技术在汽车通信控制网络中的应用 6117次阅读
- 什么是LIN总线? CAN和LIN的区别 11.4w次阅读
- 基于LIN总线控制系统实现LIN开发平台的搭建 6006次阅读
- LIN总线技术的特点及实现从节点的应用设计 9362次阅读
- 基于车门控制系统LIN总线通信系统的设计 2476次阅读
- 如何实现LIN自动寻址来解决这些问题呢? 1.8w次阅读
- 汽车网络LIN总线协议解析 1.7w次阅读
- 局域互联网(LIN)总线简介 2.3w次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多