LIN 使用了 1 根线来进行通信,但是,它必须要参考 VBat 和 GND。离开这两个参考电平,并没有办法来判断线上的 bit 状态。

另外,根据经典的 LIN 驱动电路(一个 OC 门),RX 接收到的高电平,就是由 Vbat 通过上拉电阻提供;当 TX 为 1 时,下面的三极管打开,RX 电平被拉低。接收到的高电平就是下面提到的隐性位,总线上电平被拉低接收到的就是所谓显性位。

     

实际的要比这个复杂,但是,这个很好的说明了 LIN 的通信原理。右侧图中,就是 LIN BUS 连接的一个示例。这个网络中,Master 的上拉电阻通常选 1 KOhm, Slave 的上拉电阻通常 30 KOhms.

为了解决传输的冲突问题,这个网络中定义了,必须由 Master 来调度通信;Master 管理网络中的 时间片,Master 把时间片给谁,谁就能往 BUS 上发送数据。

所以,这个通信过程,Master 保持有一个 Schedule_tables ,来指定每一个 node 的传输动作。

Frame

LIN 通信的最小单元是 Frame。 LIN 是基于 UART/SCI  实现的,所以它每个 Byte 的传输基本是和 UART 一样;网上有人使用有限状态机+UART 来完成 LIN 通信,有兴趣可以了解下。

如图下面是 LIN 的帧结构,可以回忆 UART 帧结构来理解。

LIN 的一个 Frame 由 5个部分组成,分别是:间隔段、同步段、ID段、数据段、校验字。

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

LIN 笔记的更多相关文章

  1. 机器学习实战笔记(Python实现)-05-支持向量机(SVM)

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  2. JCL笔记

    本文转自<http://leowzy.iteye.com/blog/888931> ---------------------------------------------------- ...

  3. Linux学习笔记(二)2015.4.14

    笔记2.1 Q:登陆命令  A:刚开始登陆的是安装Linux时设置的普通用户,如lin,输入su - root后,成为root用户 笔记2.2 Q:切换控制台  A:ctrl+alt+F1-F7可以切 ...

  4. Object C学习笔记17-动态判断和选择器

    当时学习Object C的时被人鄙视了一顿,说使用.NET的思想来学Object C就是狗屎:不过也挺感谢这位仁兄的,这让我学习的时候更加的谨慎.今天的学习笔记主要记录Object C中的动态类型相关 ...

  5. mongoDB 读书笔记(初级命令)

    关于mongoDB的相关知识,读书笔记,便于自己查阅用,不定期更新(纯手打)        <mongoDB权威指南> 一.创建更新和删除 1.创建 //批量插入一个集合可以节省时间,只用 ...

  6. 01.C语言关于结构体的学习笔记

    我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...

  7. shell 学习笔记

    <Linux命令行与shell脚本编程大全>笔记   wkss 其他:http://www.cnblogs.com/pengdonglin137/p/3528303.html 一.基本命令 ...

  8. 01-Java学习笔记

    本系列笔记由常彦博整理,请知悉 目  录 一. Java技术基础.................................................................... ...

  9. cs231n spring 2017 lecture9 CNN Architectures 听课笔记

    参考<deeplearning.ai 卷积神经网络 Week 2 听课笔记>. 1. AlexNet(Krizhevsky et al. 2012),8层网络. 学会计算每一层的输出的sh ...

随机推荐

  1. JavaSE| 数组

    1.数组(array) 数组就是多个相同类型数据的组合,实现对这些数据的统一管理. 数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型.数组属引用类型,数组型数据是对象(object),每 ...

  2. 查找常用字符(给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。)

    给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表. 例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 ...

  3. redis虚拟内存

    对于redis 这样的内存数据库, 内存总是不够用的. 除了可以将数据分割到多个 redis 服务器以外. 另外的能够提高数据库容量的办法就是使用虚拟内存技术把那些不经常访问的数据交换到磁盘上 如果我 ...

  4. Strange Towers of Hanoi POJ - 1958(递推)

    题意:就是让你求出4个塔的汉诺塔的最小移动步数,(1 <= n <= 12) 那么我们知道3个塔的汉诺塔问题的解为:d[n] = 2*d[n-1] + 1 ,可以解释为把n-1个圆盘移动到 ...

  5. 移动端滑屏全应用【四】移动端动画贞动画函数mTween封装

    首先此函数是基于大家都知道的Tween动画算法的,在此基础上使用了三中讲到的兼容版动画贞,可以使动画变得更流畅. 1. 首先要记得引入Tween.js 2. 引入mTween.js 3. 调用 * m ...

  6. Xamarin SQLite教程数据库访问与生成

    Xamarin SQLite教程数据库访问与生成 在本教程中,我们将讲解如何开发SQLite相关的App.在编写程序前,首先需要做一些准备工作,如了解Xamarin数据库访问方式,添加引用,构建使用库 ...

  7. Git 使用问题记录

    问题一:新文件 add 后,提示有 modified 内容 描述:在 master 分支中增加了一个新的文件夹(-/cb4.6-zh),但执行 git add 后再查看状态却提示有 modified ...

  8. WPF DataGrid 每行ComboBox 内容不同的设置方法

    <toolkit:DataGridComboBoxColumn x:Name="DgCbcSignal" Header="信号源" SelectedIte ...

  9. Codeforces.GYM100548G.The Problem to Slow Down You(回文树)

    题目链接 \(Description\) 给定两个串\(S,T\),求两个串有多少对相同回文子串. \(|S|,|T|\leq 2\times 10^5\). \(Solution\) 好菜啊QAQ ...

  10. 2017-10-5-Python

    想学习Python很长时间了,工作中使用Python脚本解决问题真的很爽. 插入一张Python的py文件常见的结构图: if __name__ =="__main__" 这条语句 ...