LIN 使用了 1 根线来进行通讯,可是,它必需要参考 VBat 和 GND。离开这两个参考电平,并无办法来判断线上的 bit 状态。node
另外,根据经典的 LIN 驱动电路(一个 OC 门),RX 接收到的高电平,就是由 Vbat 经过上拉电阻提供;当 TX 为 1 时,下面的三极管打开,RX 电平被拉低。接收到的高电平就是下面提到的隐性位,总线上电平被拉低接收到的就是所谓显性位。网络
实际的要比这个复杂,可是,这个很好的说明了 LIN 的通讯原理。右侧图中,就是 LIN BUS 链接的一个示例。这个网络中,Master 的上拉电阻一般选 1 KOhm, Slave 的上拉电阻一般 30 KOhms.app
为了解决传输的冲突问题,这个网络中定义了,必须由 Master 来调度通讯;Master 管理网络中的 时间片,Master 把时间片给谁,谁就能往 BUS 上发送数据。工具
因此,这个通讯过程,Master 保持有一个 Schedule_tables ,来指定每个 node 的传输动做。编码
Framespa
LIN 通讯的最小单元是 Frame。 LIN 是基于 UART/SCI 实现的,因此它每一个 Byte 的传输基本是和 UART 同样;网上有人使用有限状态机+UART 来完成 LIN 通讯,有兴趣能够了解下。设计
如图下面是 LIN 的帧结构,能够回忆 UART 帧结构来理解。3d
LIN 的一个 Frame 由 5个部分组成,分别是:间隔段、同步段、ID段、数据段、校验字。blog
1) 间隔段至关于 UART 发送数据 0x00。这是一个 Frame 的第1个 Byte。图片
2) 同步段至关于 UART 发送数据 0x55。这是一个 Frame 的第2个 Byte。
3) ID 段一样也是 8bit,可是,前两个 bit 用做 paritybit,实际上只有 6bit 做为 ID 段。便可用的帧 ID 只有 64 个。事先设计时,一般会根据 ID 的不一样,来定义帧的类型,常见帧类型有如下几种(ID分配不必定是和下面表格一致,看具体设计)
4) 数据部分的长度,并无在帧里面携带,而是在设计网络时事先定义好的。可是必须是 1-8 个 Bytes。数据段内容,根据帧类型的不一样,有可能携带 singal 或者 statistic messages。
5) 校验和也没有特殊约定,具体的设计可能有不一样方案。
另外,由于帧的 ID 部分必须是由 Master 发送的,而 Data 根据设计不一样,由不一样的 Publisher(Slave Node) 来发送。因此,BUS 上的情形多是下面这种的:
LDF 文件
LDF 是 LIN Description File 的缩写。根据咱们上面的描述,这个网络里面的诸多特性,都是能够灵活配置的,因此,便有了 LDF 这样一个统一的对网络的描述方式(LIN Spe. 指定了 LDF 的格式,因此是通用的)。
基本上,LDF 文件,描述了下面这几个方面的内容:
1. 总线上都有哪些节点?
2. 总线上都有哪些数据帧会被传输(帧ID、数据长度、数据由谁发布)?
3. 某一帧上面携带了哪些 Signals(Mapping)?
4. BUS 上的帧以怎样一个顺序发布(schedule table) ?
5. 帧数据的解析方式,用的什么编码 ?
下面对 LDF 文件的几个重要内容做一一解释(图片来自microchip)。
最后,再上传一个好用的 LDF 编辑工具:LDFTool