您的位置: 首页 > 支持 > 技术答疑
细微之处见功夫, 智芯MCU硬件LIN模块
返回列表 来源 发布日期:2022-01-13

LIN总线的发展趋势和挑战

在很多车厂的网络架构中,带LINECU数量是最多的。随着域控制器的发展,汽车将需要更多的智能传感器和智能执行器,因此LIN节点的数量将会继续增长。某些ECU可能会挂多路LIN总线,每路LIN总线上还会挂很多LIN的子节点。对于LIN的主机而言,主机通常需要采集传感器数据,然后进行逻辑处理,或者利用专用算法进行处理,然后将执行指令发送给执行器,为了保证任务的实时处理,高效处理LIN总线通讯降低CPU负载至关重要。

9a2df0a4b7f280b999822a94afa46087.png


ID.4 Model YMach E三款车的总线对比

 

LIN协议

LIN协议是基于UART/SCI的数据格式。下图是LIN协议的一个完成的报文帧的结构。

image.png


和普通的UART数据相比,LIN协议有几个特殊的部分:

1. 同步间隔段不满足UART的标准数据格式:LIN的报文是以同步间隔段(Break)开始的。同步间隔段由同步间隔(Break Field和同步间隔段间隔符(Break Delimiter构成,同步间隔是至少持续 13(以主机节点的位速率为准)的显性电平。同步间隔段的间隔符是至少持续 位的隐性电平。

2. 需要同步段进行主机和从机的时钟同步:从机节点可以不采用精度高的时钟,而采用片上振荡器等精度和成本相对较低的时钟,由此带来的与主机节点时钟产生的偏差,需要通过同步段(Synchronization Field)进行调整,调整的结果是使从机节点数据的位速率与主机节点一致。同步段用于同步的基准时钟为主机节点的时钟。从机节点通过接收主机节点发出的同步段,计算出主机节点位速率,根据计算结果对自身的位速率重新作调整

3. 受保护IDPID):受保护 ID 段的前 位叫作帧 IDFrame ID),加上两个奇偶校验位后称作受保护 ID。如下图所示。

dcceff42d89a73313c4ceade0ea879ca.png


奇偶校验位的校验公式如下,其中代表异或运算,代表取非运算。

P0 = ID0  ID1  ID2  ID4

P1 = (ID1  ID3  ID4  ID5 )

在主机每次发送PID时,需要根据帧ID计算出P0和P1, 然后再和帧ID组合在一起,形成PID。

在从机接收到PID时,需要根据接收到的帧ID,计算出P0和P1,然后再和收到的P0和P1进行对比。

1. 校验和段(Checksum Field):校验和段是对帧中所传输的内容进行校验。校验方法为将校验对象的各字节作带进位二进制加法(每当结果大于等于 256 时就减去 255),并将所得最终的和逐位取反,以该结果作为要发送的校验和。接收方根据校验和类型,对接收数据作相同的带进位二进制加法,最终的和不取反,并将该和与接收到的校验和作加法,如果结果为 0xFF,则校验和无误,这在一定程度上保证了数据传输的正确性。

de5954e1826ee89668979463508cb6ea.png

传统的UART LIN模块处理LIN的方式

由于上面几个段的特点,我们在使用普通的UART去实现LIN的协议时,需要软件去专门处理:

1. 主机需要用定时器去生成13bit的同步间隔段,或者用改变波特率的办法生成一个13bit的同步间隔段。这个还会涉及到引脚复用的问题。

2. 从机需要用定时器去采集同步间隔段,和同步段。然后利用同步段采集到的波特率,再去更新从机的波特率。这个还会涉及到引脚复用的问题。

3. 发送或接收PID时,需要根据帧ID来计算P0P1,然后再对数据进行打包。

4. 校验和段的校验码的计算和判断。

5. 在每个段的数据发送和接收,可能需要使用UART的发送中断或者接收中断,可能还需要使用DMA

 

现在很多汽车级MCU已经可以支持同步间隔段的发送或者判断了,但是其他的几项功能很多MCU还没有,仍然需要通过软件来实现。除了增加编写代码的工作量,带来潜在的bug,还会影响到CPU的负载。在任务比较多的主机中,CPU的负载可是很重的哦。

 

硬件LIN模块

智芯半导体公司推出的Z20K118系列集成了支持硬件LINUART模块,彻底地解决了以上几个问题。下面介绍一下这个模块是如何完成LIN报文的收发的。

使用Z20K118为主机时:

- 帧头的发送(只有主机才能发送帧头):

1. 软件配置

配置波特率

使能中断

设置帧ID

设置同步间隔段的长度和同步间隔段间隔符的长度

设置LIN模块为主节点

启动帧头发送


1. 硬件自动处理以下任务:

发送同步间隔段,同步间隔段间隔符

发送同步段

计算PID中的P0P1,并和帧ID组合成PID,发送PID

将帧头处理完成标志位置位,发出中断请求。

2. 在中断处理函数中,处理应答任务(发送数据给其他从机,或者从从机接收应答)。

使用Z20K118为从机时:

- 帧头的接收(从机智能接收帧头):

1. 软件配置:

配置波特率

使能中断

设置LIN模块为从节点

启动帧头接收

2. 硬件自动处理以下任务:

接收同步间隔段

接收同步段(如果在给定时间段内没有收到同步段,将超时错误标志位置位)

计算波特率,将波特率校准

接收PID数据,计算PID的校验位,如果校验位不匹配,将PID故障标志位置位

将帧头处理完成标志位置位,然后请求中断;

3. 在中断处理函数中,处理应答任务(从其他节点接收数据,或者向其他节点发送数据)。

 

- 发送应答(主机或者从机都可以发送应答)

1. 软件配置:

应答的数据长度

使能中断

设置校验和类型

将应答数据填充到UART发送的FIFO中(Z20K118FIFO长度为16

设置应答方向为发送

启动应答数据处理;

2. 硬件会自动处理以下任务:

根据应答数据的长度,自动将FIFO中的数据一个字节一个字节轮流发送

PID寄存器中获取PID,根据校验和类型计算校验和,发送校验和

将应答处理完成标志位置位,请求中断;

3. 进入中断处理函数,或者处理其他任务。

 

- 接收应答(主机或者从机都可以接收应答)

1. 软件配置:

应答的数据长度

使能中断

设置校验和类型

设置应答方向为接收

启动应答数据处理;

2. 硬件会自动处理以下任务:

接收数据,并存储在接收的FIFO中,直到收到的数据长度为应答数据长度-1

PID寄存器中获取PID,根据校验和类型计算校验和

接收校验和,并将接收到的检验和和计算的校验和进行比较,如果校验和不匹配,将对校验和错误标志位置位;

将应答处理完成标志位置位,请求中断;

3. 进入中断处理函数,或者处理其他任务。

 

总结

通过上面介绍,可以发现Hardware LIN要比普通的UART LIN灵多了,他就像是为软件工程师们配备的小秘书一样,会兢兢业业地自动完成很多有规律的任务,而且不会犯任何错误。这么好的东西,有谁不会喜欢呢?






下一条 没有了!

新闻资讯

首页 产品 新闻资讯 关于我们 支持
智芯二维码
  • 电话:+86 512 65008818

  • 邮箱:info@zhixin-semi.com

  • 智芯半导体 版权所有

  • 地址:中国.苏州市姑苏区锦堂街8号江苏有线大厦