• LIN - 基础


    参考

    https://blog.csdn.net/qq_41908302/article/details/129967309

    概念

    原理

    基于UART数据格式、主从结构
    串行通讯

    拓扑

    LIN网络中有且只有一个主节点,其他都是从节点

    优缺点

    功能简单
    实时性低
    成本低
    单主多从,不存在冲突,无需仲裁

    特点

    从节点无需高精度晶振
    采用调度表控制,网络通讯可预期
    无需更改其他节点的硬件即可增加或减少从节点
    支持多包报文传输,支持诊断服务

    主任务/从任务

    主任务:负责决定总线上的报文,在主节点上运行的,用于控制总线上所有的通信,负责报文的进度表、发送报文头的任务称为主任务;常见主任务:如定义传输速率,发送同步时间间隔、同步场、标识符ID场,监控并通过检查校验和(check sum)验证数据的有效性;接收从机节点发出的总线唤醒命令
    从任务:提供每一帧的数据;从机任务不能直接向总线发送数据,需要接受到主节点发送的帧头后,根据帧头所包含的信息来判断:发送应答,接收应答,既不接收也不应答(从机任务接收帧头并对帧头所包含信息进行解析,然后决定是发送应答,还是接收应答,还是不作任何反应

    主节点:包括主任务+从任务
    从节点:只包括从任务

    主节点负责调度通讯,从节点1和从结点2是按照主节点的调度表来按时发送信息的,因此从节点不会同时发送信息(主节点起老师的作用)
    从节点不能发送命令控制其他的从节点(学生不能发送命令)
    主节点决定总线上进行哪项通讯,从节点响应主机的任务(填哪些数据)

    主节点控制整个网络的通信,控制不同节点的传输时间
    每个报文帧的长度是预知的
    采用调度表,可保证信号的周期传输,保证总线不会出现超负载的现象

    CAN/LIN

    LIN的主节点本身具有CAN的接口
    LIN主节点相当于网关,可以将LIN网中的报文与CAN网进行交互

    在这里插入图片描述

    在这里插入图片描述

    物理层

    数据链路层

    主任务发送报头,从任务响应,形成完成的报文,实现总线通信

    帧格式

    主节点发送报头(帧头),从节点应答后形成完整的一帧
    从机任务接收帧头并对帧头所包含信息进行解析,然后决定是发送应答,还是接收应答,还是不作任何反应
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    字节间隔 位于每个字节之间
    应答间隔或者响应间隔 位于报头和响应之间(为了留给MCU足够处理事件,如果MCU性能够高最小值可以是0)
    在这里插入图片描述

    在这里插入图片描述

    同步间隔+同步间隔段 间隔符 组成
    总是由主节点发出,代表新的一帧开始
    同步间隔段最少13位显性电平(显性位),间隔符1位隐性
    从节点只需检测到11位显性电平即可
    在这里插入图片描述

    (和串口数据类似) (串口:起始位(低电平)+8位数据位+ 停止位(高电平))
    同步段:(显性位+ 8位数据位 + 隐性电平)
    数据传输先发最低有效位,最后发最高有效位
    如 0x55: 01010101 (7 6 5 4 3 2 1 0 二进制:最高有效位->最低有效位),而实际LIN发送的时候是先发低有效位再发高有效位

    0x55 与同步段的作用:确保所有从节点使用与节点相同的波特率发送和接收数据
    LIN通讯的同步段原理主要用于调整从机节点与主节点之间的时钟偏差。在LIN总线上,所有的通讯都是以主机节点的时钟为基准。
    具体来说,当主机节点发出一个字节0x55 (01010101b)的同步段后,从机节点开始接收这个信号。由于LIN通讯以下降沿作为判断标志,所以从机节点能够准确地捕捉到这个信号,并根据此计算出主机节点的位速率。
    接下来,从机节点会根据接收到的主机节点位速率和自身的位速率进行比较,如果两者之间存在偏差,那么从机节点就会根据这个偏差值对自身的位速率进行调整,以达到与主机节点的时钟同步。
    总的来说,通过同步段的设计,LIN通讯能够在不要求从机节点使用高精度时钟的情况下,实现从机节点与主节点之间的时钟同步,降低了通讯成本和复杂性。

    在这里插入图片描述

    PID=报文ID(6位)+2位校验位 同样是(显性+8位+隐性)
    6位:0x00-0x63;
    其中0x00-0x59 信号携带帧
    60(0x3C)和61(0x3D)用于诊断和节点配置
    62和63为预留
    同样,下面发送的时候也是先发低有效位,再发高有效位(图中都是按时序表示的发送顺序,0 1 2 3…)

    在这里插入图片描述
    在这里插入图片描述

    数据场长度1~8个字节
    低字节先发,低位先发
    如果某一个信号长度超过1个字节,采用低位在前的方式发送(小端发送)
    在这里插入图片描述
    在这里插入图片描述

    对于3C和3D的校验应该只用标准型校验,仅校验数据场
    对于其他信号携带帧应该用增强型校验,校验标识符场与数据场内容
    注意接收方和发送方的校验方式,以及256±的运算方法
    在这里插入图片描述
    在这里插入图片描述

    帧类型

    • 无条件帧

    具有单一发布节点,无论信号是否发生变化,帧头均会被无条件应答的帧
    无条件帧在主机任务分配给它的固定的帧时隙中传输。总线上一旦有帧头发送出去,必须有从机任务作应答(即无条件发送应答)
    帧 ID = 0x30 应答部分的发布节点为从机节点 1,收听节点为主机节点。典型应用如从机节点 1 向主机节点报告自身某信号的状态。
    帧 ID = 0x31 应答部分的发布节点为主机节点,收听节点为从机节点 1 和从机节点 2。典型应用如主机节点向从机节点发布信息。
    帧 ID = 0x32 应答部分的发布节点为从机节点 2,收听节点为从机节点 1。典型应用如从机节点之间彼此通信
    在这里插入图片描述

    • 事件触发帧

    处理偶发的事件:主机节点在一个帧时隙中查询各从机节点的信号是否发生变化时使用的帧,当存在多个发布节点时,通过冲突解决进度表来解决冲突
    https://blog.csdn.net/qq_41908302/article/details/129969332 例子很重要!!!
    在这里插入图片描述

    • 偶发帧

    偶发帧是主机节点在同一帧时隙中当自身信号发生变化时向总线启动发送的帧。当存在多个关联的应答信号变化时,通过事先设定的优先级来仲裁

    在这里插入图片描述

    • 零星帧
    • 诊断帧

    诊断帧包括主机请求帧和从机应答帧,主要用于配置、识别和诊断用
    主机请求帧(Master Request Frame,MRF),帧 ID = 0x3C,应答部分的发布节点为主机节点;
    从机应答帧(Slave Response Frame,SRF),帧 ID = 0x3D,应答部分的发布节点为从机节点。数据段规定为 8 个字节,一律采用标准型校验和

    在这里插入图片描述

    调度表

    调度表位于主节点中
    负责调度网络各报文发送的顺序
    为每帧报文分配不同的发送时间,分配发送的时间隙slot
    发送时隙:报文可以被发送的时间
    不同报文的发送时隙可能不同
    调度表使得LIN通信具有可预测性
    主任务可以有多个调度表
    根据决策可以在不同的调度表之间切换

    调度表规定了总线上帧的传输次序(调度Header)以及各帧在总线上的传输时间
    主机任务根据应用层需要进行调度。调度表可以有多个,一般情况下,轮到某个调度表执行的时候,从该调度表规定的入口处开始顺序执行,到调度表的最后一个帧时,如果没有新的调度表启动,则返回到当前的调度表第一个帧循环执行;也有可能在执行某个调度表当中发生中断,执行另一个调度表后再返回,如事件触发帧的冲突解决过程就是一个典型的例子
    切换到另外一个调度表时,一定要等到当前时隙的结束

    在这里插入图片描述

    帧时隙

    调度表除规定了帧 ID 的传输次序外,还规定了帧时隙(Frame Slot)的大小
    帧时隙是调度表规定的一个帧的帧头起始到下一个的帧的帧头起始的时间
    每个帧的帧时隙都可以不同,帧时隙必须为时基的整数倍
    时基(Time Base)为LIN子网的最小计时单位,通常设定为 5ms或 10ms

    一个帧时隙对应了调度表的一个入口???
    并且起始于时基的开始时刻(称为时基的节拍(Tick)),切换到另外一个调度表时一定要等到当前帧时隙的结束???
    其中TFrame_Maximum 为帧在总线上传输的最大时间 。
    抖动(Jitter)为帧的同步间隔段的下降沿与帧时隙起始时刻相差的时间

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    LIN报文

    • 信号报文

    诊断报文

    在这里插入图片描述

    ID+PDU(8个字节)

    一个PDU可以是一个完整的报文也可以是保温的一部分
    请求:从客户端发出的报文
    响应:从服务端发出的报文

    PDU的第一个地址为NAD节点地址(相当于学生的学号)

    SF: 单帧,只用一个PDU传递报文
    FF:首帧,多帧传输时,被发送的首个报文
    CF:连续帧,多PDU传输时,发送完首帧后紧接着发连续帧

    NAD

    7E:功能地址,
    7F:广播地址

    PCI

    PCI=PCI type(4 bit)+Addition information(4 bit)
    针对SF单帧:PCI type(0 0 0 0) + length(SID???)
    针对FF多报文首帧:PCI type( 0 0 0 1)+Addition information(4 bit)+LEN(8bit) [4+8 一共12位表示长度]
    针对CF多报文连续帧:PCI type(0 0 1 0)+Addition information(4 bit)[表示第几个续帧]

    LEN

    只在多报文中使用
    只在多报文的首帧使用

    SID / RSID

    对于LIN协议,与uds服务是有区别的
    SID: B0-B7

    调度表

  • 相关阅读:
    【二八法则】精品和爆款的力量
    Linux如何设置SUDO_ASKPASS
    芯科科技与Arduino携手推动Matter普及化
    Arch挂载错误
    IAP程序升级 与 电脑BIOS 的关系
    朋友电脑密码忘了,我当场拔了她的电源,结果。。。
    6.5黄金行情分析
    【C++上层应用】7. Web编程*
    搬到新办公室,开始新征程
    python教程:selenium WebDriver 中的几种等待
  • 原文地址:https://blog.csdn.net/L_fengzifei/article/details/133104798