YTM32的LIN通信协议引擎LinFlexD外设模块详解
文章目录
LINFlexD外设简介
YTM32微控制器的LINFlexD外设模块,实现了LIN协议控制器的功能,可以支持LIN总线协议的主机和从机功能。如图x所示。

LINFlexD 可以实现使用较少 CPU 介入的情况下,高效管理大量的 LIN 通信帧:
- 在主机 Master 模式下,当软件触发了通信过程(发送帧头),LINFlexD 硬件可以自行继续发送或者捕获数据流(应答数据),直至软件重新启动下一个通信过程(主机启动),或者收到一个校验和(接收模式)。
- 在从机 Slave 模式下,LINFlexD 中设计了一组帧头过滤器(ID Filter),可以配置由硬件自动匹配从总线上捕获到的帧头,仅当识别到本机预设处理的帧头,才启动数据通信过程(从机任务)。
- LINFlexD 内部还集成了一个8字节的缓冲区,用于存放硬件自动发送或者接收的数据段内容。
- LINFlexD 硬件外设支持LIN v1.3、v2.0、v2.1、v2.2协议。可以在配置帧头信息的
LINFlexD_BIDR[CCS]寄存器位中指定将要发送或者接收的帧使用扩展性校验和还是经典款校验和。
LINFlexD 还支持 UART 模式,用于实现常规的 UART 通信。本文主要面向 LIN 通信引擎介绍,关于 UART 介绍,可见后续文章。
LINFlexD工作机制
初始化
手册中对 LINFlexD 的工作模式划分为:初始化模式(Initialization)、常规工作模式(Normal)和休眠模式(Sleep)。在硬件复位后,LINFlexD 处于休眠模式以节约用电。若要配置 LINFlexD 开始工作,需要先通过软件配置,切换至初始化模式,在初始化模式下进行一些专属的配置后,再切换至常规工作模式,才能顺利启动 LINFlexD 外设。这个初始化模式,相当于为配置 LINFlexD 外设设计了一个同步锁,或者说关键区,使得在初始化阶段配置 LINFlexD 外设的各项功能时都不会立刻生效,以避免产生不确定的不安全状态,最后退出初始化模式,硬件同步一并打开所有的配置功能,稳当。
- 初始化模式(Initializaiton,INIT)
软件配置寄存器LINFlexD_LINCR1[INIT]=1,切换至初始化模式。当然,还可以通过配置LINFlexD_LINCR1[INIT]=0,退出初始化模式(至Normal模式?)。
进入初始化模式后,LINFlexD 引擎同 LIN 总线的传输将全部停掉(木头人不许动),并且推送总线上位高电平(隐形信号)。如果在某个总线传输的过程中进入初始化模式,则该传输将被打断并退出。所以说,在切入初始化状态之前,软件一定要先查一下 LINFlexD 的状态标志位,确保不会打断正在进行的传输,再进入初始化模式。
在初始化模式下,可以对 LINFlexD 外设进行初始化配置:
- 配置通信波特率
- 启用 LINFlexD 模式(停用UART模式)
- 选择主机模式或者从机模式
- 配置校验和控制位
- 若是从机模式,还需要预先填写好可以捕获的ID的列表
- 常规工作模式(Normal Mode,NM)
在初始化模式中,配置寄存器LINFlexD_LINCR1[INIT]=0,切换至常规工作模式。
在常规工作模式下,LINFlexD 可以执行正常的收发通信。
- 休眠模式(Sleep Mode,SM)
配置软件寄存器LINFlexD_LINCR1[SLEEP]=1,切换至休眠模式。当然,也可以通过配置LINFlexD_LINCR1[SLEEP]=0,退出休眠模式(至Normal模式)。
进入休眠模式后,LINFlexD引擎就暂停工作,等待唤醒事件到来后,自动切回正常模式响应外部的通信请求。
如果软件在 LIN 总线上检测到一个 150us 的唤醒脉冲,可以请求 LINFlexD 从休眠模式唤醒。
- 回环工作模式(Loop Back Mode)
通过配置寄存器LINFlexD_LINCR1[LPKM]=1启用回环模式。回环工作模式可用于自测试通信协议,当启动回环模式后,芯片内部的Tx和Rx引脚相连,通过Tx发送的信号会直接被反馈会接收通道(忽略Rx引脚的输入)。如图x所示。

主机模式
通过配置寄存器LINFlexD_LINCR1[MME]=1,设定本设备为主机模式工作。
- 发送帧头
根据LIN协议的描述,LIN总线的上通信,都是由主机(具体是主机节点的主机任务)发送帧头开始的。当发送帧头时,由软件先写入LINFlexD_BIDR寄存器中的字段,包括:ID(6位的帧ID,硬件自动补完校验位)、DFL(数据段长度)、DIR(帧通信的方向)及CCS(启用经典校验的控制位,后续硬件自动生成校验字节)。然后,设置寄存器LINFlexD_LINCR2[HTRQ]=1,请求发送帧头。在启动发送帧头之后,在发送完成本帧之前,不要人为修改LINFlexD_BIDR寄存器中的内容,LINFlexD 从总线上捕获到已经发送帧的ID会被自动复制到LINFlexD_BIDR寄存器中。
- 发送数据
当主机节点执行发布任务时(发送数据到总线),主机节点上运行的从任务(主机节点上的主任务仅发送帧头)会继续发送数据部分。因此,软件需要在发起发送帧头的请求之前,就将需要发送的数据准备好,将数据存放至消息缓冲区LINFlexD_DATA[]中,同时,需要在LINFlexD_BIDR[DFL]寄存器中指定将要发送字节数据的数量,硬件根据软件在LINFlex_BIDR[CCS]控制位的配置(这个数据位可能是总线上捕获到的帧头中的信息),自动计算经典校验和或是增强校验和。
当应答的数据发送成功后,会置位硬件标志位LINFlexD_LINSR[DTF],但如果发送过程中出现错误,标志位LINFlexD_LINSR[DTF]不会置位,

本文详细介绍了YTM32微控制器的LINFlexD外设模块,该模块实现了LIN协议控制器功能,支持主机和从机模式。文中阐述了其工作机制,包括初始化、主机和从机模式的工作流程,还介绍了错误状态标志位、超时错误、ID过滤机制等内容,最后提及了相关软件和参考文献。
最低0.47元/天 解锁文章
1272

被折叠的 条评论
为什么被折叠?



