L IN 协议适用于汽车内进行低成本、短距离、低速网络通信,其用途是传输开关设置状态以及对开关变化响应。本文详细分析了 LIN 总线协议的特性、消息协议的组成、检错机制等,并介绍如何基于 PICmicro 器件来实现 LIN 总线从节点。
(资料图片)
LIN 协议是由欧洲车辆制造商协会开发用来进行低成本、短距离、低速网络通信,其用途是传输开关设置状态以及对开关变化响应,因此通信事件是在百毫秒以上时间内发生,而不像引擎管理等其它速度快得多的汽车应用。此协议支持在单根线上进行双向通信,使用由 RC 振荡器驱动的低成本微控制器,这样可以省去晶振或陶瓷振荡器的成本。另外,此协议实际上是以时间和软件上的代价换取硬件上成本的节约。 LIN 协议的每一条消息都包含自动波特率步进的数据,最高可以支持波特率为 20k ,同时低功耗睡眠模式可以关断总线,以避免产生不必要的功耗。总线可以由任意一个节点提供电源。 LIN 总线特性
图 1 :典型的 LIN 协议配置。
LIN 总线融合了 I2C 和 RS232 的特性:像 I2C 总线那样, LIN 总线通过一个电阻上拉到高电平,而每一个节点又都可以通过集电极开路驱动器将总线拉低;像 RS232 那样通过起始位和停止位标识出每一个字节,每一位在时钟上异步传输。 图 1 给出了典型的 LIN 协议配置。当任意一个节点将总线拉低时,总线处于低电平,标识着总线进入占用状态;而当所有节点都使总线浮空时总线处于电池的电压 (9-18V) ,则意味着总线处于非占用状态 (Recessive state) ;在空闲状态下浮空的总线通过电阻被上拉到高电平。 总线工作在 9 到 18 伏的电压下,但所有连接到总线上的器件必须能承受 40V 的电压。一般情况下,微控制器通过线路驱动器或接收器与总线隔离。总线在每一个节点上被端接到 Vbat ,主节点通过一个 1kΩ 的电阻端接而从节点则通过一个 20kΩ 到 47kΩ 的电阻端接。总线最大长度为 40 米。 总线上传输的每一个字节都是与起始位和停止位一起组成帧。起始位的状态与空闲状态相反 ( 即为 0) ,而停止位则与空闲状态同为 1 。在每个字节中,首先传输的是最低有效位。 消息协议 主节点控制总线的方式是轮询各个从节点并与总线上其余部分共享从节点的数据。从节点仅在接到主节点的命令时才进行数据传输,这样就可以进行双向传输并且无需进一步的仲裁。消息传输是以主节点发出一次同步中断开始,紧接着是消息的同步字段和消息字段。通过在每条消息的起始处传送的同步字段还设定了整个总线的时钟,每个从节点用该字节来调整其波特率。 同步中断使总线进入占用状态,该状态保持时间为 13 位数据的传输时间,紧接着是一个停止位 ( 非占用状态 ) ,这告知从节点即将有消息传输。主节点与从节点的时钟漂移最大允许在 15% ,因此从节点接收的同步中断可能只有 11 位或长达 15 位数据位的传输时间。 每一条消息的第二个字节是标示字节,用来告知总线在该字节后面传输的是什么数据和哪一个节点应该应答,以及应答的长度 ( 标示字段如图 2 所示 ) 。一条命令仅会有一个从节点对其进行响应,从节点仅在主节点的指示下才发送数据。数据只要出现在总线上,每一个节点都可以接收到。因此,无须主节点专门控制从节点之间的通信。
图 2 :标示字段组成。 由于设计中采用廉价的 RC 振荡器,从节点必须在每一次传输时检测主节点的波特率并调整其自身当前的波特率。因此,每一次通信都由一个由交替的 “0” 和 “1” 组成的同步字节开始。标识字段紧跟在同步字段的后面,它告知总线后面传输的内容是什么。标识字段又分为三个子字段,最低 4 位 (0-3 位 ) 是寻址总线上的器件,中间两位 (4-5 位 ) 是后面传输的消息的长度,最高两位 (6-7) 用作奇偶校验位。 除了睡眠命令, LIN 协议并没有定义每一条消息的内容。其它命令是由具体应用来定义的。 检错机制 下面描述的错误必须被检测出,并且在每个节点内进行计数。 位错误 - 传输节点必须将它认为应该传输的数据位与总线上实际出现的数据位进行比较。由于总线需要响应时间,控制器必须在检测数据位之前等待足够长的时间。假设最小的电压翻转速率为 1V/μs ,而总线最高电压为 18V ,则发送器必须等待 18μs 才能检测总线上的数据位是否正确。 校验和错误 - 每一条消息的内容都是由校验和字节进行保护。 奇偶校验错 - 命令字节的 6 个数据位由两个奇偶校验位进行保护,需要重新进行计算这些位并比较。如果错误出现,应当忽略当前命令并且记录下错误。 LIN 协议中没有直接的错误报告机制,但每一个从节点应当跟踪其自身的错误,主节点可以要求从节点将错误状态作为正常消息协议的一部分来传输。 LIN 总线与 CAN 总线 LIN 协议并不直接与 CAN 总线兼容,但人们期望两者进行相互操作。 CAN 总线可能用在整个汽车内来实现通信,而 LIN 总线仅用在汽车的局部电路内,如车门。为了连接两种总线,需要采用 CAN-LIN 协议接口节点,该节点从 LIN 总线节点收集信息然后传送到 CAN 总线上。 低功耗睡眠模式 主节点通过发送标识码 0x80 指示所有节点进入睡眠模式,睡眠命令后面跟随的数据字节的内容没有定义。收到睡眠命令的从节点应当对本身进行设置,以便当总线发生改变时能唤醒,并关闭自身的电压以使电流消耗最低。当处于睡眠模式时总线将处于高电平并且不消耗电流。 任意一个节点都可以通过发送唤醒信号来唤醒总线。当收到唤醒信号后,一般情况下所有的节点应当激活并等待主节点开始总线轮询。 硬件示例
图 3 :采用 LIN 协议的示例硬件。 图 3 给出了有两个按钮和三个 LED 组成的硬件示例。每按动十下按钮 1 LED1 改变一次状态。同样,每按动十下按钮 2 , LED2 改变一次状态。作为标识为 ID1 的响应,按钮的按动次数被传送到总线上。作为标识为 ID4 的响应,按钮的按动次数的刷新被传送到总线上。 软件操作 LIN 协议程序工作在由 RB0 触发的中断下以实现总线的睡眠 / 唤醒。在触发中断时,程序对低电平数据位的长度进行计数,然后读同步字节并确定数据位时间,最后再将其与最初的数据位时间进行比较,以确定最初的低电平时间是否大于 10 个数据位的时间,大于 10 为同步中断,小于 10 为唤醒信号。如果是唤醒信号,程序退出并继续等待同步中断;如果是同步中断,程序就读取命令字节,检查奇偶位并检查动作表 (action table) 来确定接下来的动作。动作表定义了总线上数据的来源或目的地。 为了初始化 LIN 协议的从节点句柄 (Slavehandler) ,用户必须调用 InitLinSlave 程序,这个程序初始化 RB0 中断引脚和 TMR0 寄存器。 TMR0 寄存器用来测量数据位的长度并生成波特率。初始化完成之后,用户可以执行自己的程序。一旦检测到 RB0 引脚上的下降沿,用户程序就将被中断。当检测到下降沿时,程序就跳转到中断服务程序。必须禁止除了 TMR0 和 RB0 中断之外所有的中断源,以便对同步字段进行精确测量。计算出波特率之后,中断服务程序就退出执行。 在下一次 RB0 中断发生时, LIN 协议 Slavehandler 自动进入接收模式,以接收标识字段或数据字节。如果检测到标识字段的起始位,就对标识字段进行接收和解码。然后,根据收到的标识执行相应的代码,例如存储数据或点亮 LED 。总线上一个帧传输完成之后,标志 FCOMPLETE 被置位。这个标志指示所有的数据都已正确接收完毕并可以进行后续的处理。此标志由用户固件清除。 LIN 协议从节点句柄 Slavehandler 最高可以工作在 20K 的波特率下,需要 420 字的程序存储空间以及 23 字节的数据存储空间。 由于其低成本, LIN 协议具有在汽车应用中广泛采用的潜力。可以使用内置的 RC 振荡器并且运行在 4MHz 的时钟频率下的诸如 Microchip 的各种器件的微处理器,使得设计师们能以最低的可能成本设计应用系统。
旅程电脑应用─ ON BOARD COMPUTER(BCV)
◎功能键说明 :
1. 数字键 :1000,100,10,1, 提供键入数字功能 .
例如要键入 2315 的数字时 , 应如下操作键入 :
按 1000 键 2 次。
按 100 键 3 次。
按 10 键 1 次。
按 1 键 5 次。
数字键可提供 0 ~ 9 或 00 ~ 90 ,或 000 ~ 90 ,或 0000 ~ 9000 的键入,因此数字
键可从 0000 到 9999 范围。
如果按住任何一个数字键,时间超过 0.75 秒以上时 , 数字会自动从 0 到 9, 以
每 0.5 秒进一位。
该四个数字键在此功能设定时 1000 这个键功能不存在。
2. 设定 重设定键 :SETRES 提供设 全入完结后 , 按此键确认功能 , 或重新设定。
3. 检查键 :CHECK 提供系统自我诊断 , 该功能键具有如仪表板「资讯区」以文字模式显
示一般故障指示或具有 CHECK CONTROL 功能,如果系统正常,按下 CHECK 键后,
会显示“ CHECK CONTROL OK ”。
4. 报时键 :MEM 提供设定报时声响 , 平时未设定时 , 会在每个小时前 15 秒的声响 , 告知驾
驶人一个小时又到了。设定程序如下 : W710[G$B+l
①按下 MEM 键三少后,大显示幕会出现 MEMO 字幕,在小显示幕会出现: 00 ,
可利用 10 与 1 键去设发钟报时,如你要每个小时 45 分钟前 15 秒即报时,
可按 10 键 4 下,按 1 键 5 下,再按 SETRES 键确认即可。
②如此每到 45 分钟前 15 秒即会有报时声响。
5. 外部温度指示键 :A-TEMP 可指示车外温度在 3 ℃以下温度时 , 会有专程警示。
6. 平均耗油量值键 :CONSUM 或 VERBR, 当按此键可显示该车辆平均耗油量指示 , 可利用
SETRES 键去归零。 ^r__#_O& c
7. 平均车速键“ SPEED 或 GESCHW 可计算从甲地到乙地目前所行驶之平均车速。
8. 范围键 :RANG 或 REICHW 可显示目前油箱中之油量还可行驶多远距离之公里数。
9. 预定到达键 IST 在出发前先键入甲地到乙地时间或还有多少距离。
10. 限速键 IMIT 当车速超过速线时即会有警告 , 提高速即警告之程序 :
将车辆行驶到所要警告的车速 , 再按一下 LIMIT 键即可。
只要车速超过此速度即会有警告声响。
11. 计时器键 :TIMER 只要按下此键即进入跑马表计时器功能 , 再按一下即停止计时。
12. 密码功能键 :CODE 防盗码键入设定作用时 , 引擎无法发动。
◎防盗程序:①点火开关 KEY - ON 。
②按 CODE 键一下。
③利用数字键键入一组你记得住的防盗码。
④按 SETRES 键一下。
⑤点火开关 KEY - OFF 。
⑥即进入防盗功能。
◎解除防盗程序:
*方法一:①点火开关 KEY - ON 。
②键入你原键入之防盗码。
③发动引擎即完成。
*方法二:①拆开电瓶线 5 分钟以上。
②装回电瓶线,将点火开关 KEY - ON 。
③防盗会叫约 15 秒钟后停止。 。
④等待 15 分钟后,即可发动引擎完成解除
13. 公 英制切换键 :KMMLS 按下此键切换公里 英里单位。
14. 日期键 DAT 按此键显示目前日期 , 可利用 SETRES 键及数字健去重新键入日期。
15. 时钟键 :UHR 按此键显示目前时间 , 可利用 SETRES 键及数字键去重新键入时间。
◎旅程电脑功能测试程序 :
同时按 1000 及 10 键 , 直到大显示幕出现 : “ TEST NO :--”字幕。 _
可键入 1 到 21 数字,以 SETRES 键确认。
※测试项目 1 到 21 项功能:
键入 1 :显示幕测试。(大、小显示幕所有字全显示 )
键入 2 :显示目前耗油量以公制显示公升 100 公里。
键入 3: 显示目前耗油量以公制显示公升 小时。
键入 4: 显示平均耗油量可再行驶之里程数。
键入 5: 显示目前油箱油量可再行驶之里程数。
键入 6: 蜇无功能 ( 没有使用 )
键入 7: 显示目前油箱油量
键入 8: 显示目前车速。 ( 公里 小时 )
键入 9: 显示 IGN 电源电压。 ( 伏特 )
键入 10: 读出该车之国别码及设定。
键入 11: 读出及设 AMPM 。 ( 上午 下午 )
键入 12: 计算平均车速及到达目的地时间。
键入 13: 计算预计到达目的地时间。
键入 14: 设定软体时间。 (BC IV 才有 )
键入 15: 制造单位测试用。
键入 16: 制造单位测试用。
键入 17: 显示该车特殊资料。 ( 全车 )
键入 18: 改声响持续或间歇。
键入 19: 此测试功能锁住或开放
键入 20: 耗油量修正值。
键入 21: 软体重新设定 ( 利用 SETRES) 键操作。
关键词: 点火开关