如何使用S32DS编写LDF(LIN描述文件)
1.背景介绍
对许多车身电子客户来说,有些项目由于成本原因和车厂总线架构的改变,会放弃CAN通信,采用LIN通信。此时如果采用S32K1xx系列的芯片(可以说是现在最火的通用类车规MCU了,当然也缺的非常厉害),就会有些大材小用,遇到这种情况,我们都会推荐客户使用KEA64系列(包含KEAZN64,KEAZN32和KEAZN16),性价比高。 在选用了KEA系列芯片之后,软件工程师面临的第一个问题就是开发环境的选择,Keil,CodeWarrior10.6,S32DS For Arm等都可以,这几个软件对比情况如下:
开发环境 | 是否免费 | 驱动&例程 | 图形化界面 | LIN Stack |
---|
Keil | 收费 | 较少 | 无 | 不支持 | CodeWarrior10.6 | 代码超过64KB收费 | 一般 | 有 | 支持 | S32DS For ARM | 免费 | 较多 | 无 | 支持 |
如果S32K1xx和KEA两种芯片平常开发都会用到,建议统一到S32DS For ARM的开发环境,否则推荐使用CodeWarrior10.6以及以上的版本。 一般开发带LIN通信的产品时,车厂都会提供LDF文件,此时如果有工具可以根据LDF文件生产相关代码,并符合LIN2.x或者J2602的规范,那无疑会大大减少开发时间。NXP刚好就提供了这样的工具和使用例程,即LIN Stack。
2.LIN Stack
NXP的LIN_Stack_S12 已经更新到4.6.6版本了,支持的芯片有S08,S12(X)和KEA系列。如果是S32K1xx和Power PC系列的单片机需要开发LIN功能,直接使用S32DS自带的LIN Stack图形化组件即可。使用LIN Stack工具进行LIN功能的开发,使用者只要关注应用层的代码实现,无需关注MCU的底层驱动,大大提高了开发效率。
2.1 LIN Stack获取
2.2 LIN Stack简介
NXP官网提供的LIN_stack的分层架构简要描述如下:
- TL层(传输层):给测试者提供发送诊断请求的方法
- Core API层:处理初始化以及LIN协议和应用之间的信息交互。
- Low Level层:提供LIN协议和硬件外设之间的交互,处理break检测,发送字节,接收响应等。
- MCU HW层:提供支持LIN的标准外设接口驱动
注:上面关于LIN的API描述参考的是LIN Stack自带的使用手册,在LIN2.1规范中,对于LIN的API规定了三类,如下所示,有兴趣可以详细阅读LIN2.1规范。
- LIN core API
- LIN node configuration and identification API
- LIN transport layer API (optional)
2.2.1 LIN Stack整体目录
LIN Stack安装之后,在安装目录有如下几个文件夹,Documentation文件夹主要存放了协议栈使用手册,API函数文档以及配置工具使用手册,建议先大概过一下这几个文档。
2.2.2 LIN Stack架构介绍
LIN Stack详细架构如下图所示,各个层级之间的关联一目了然,同时Documentation文件夹内的网页版API文档能够看到内部各个函数之间的调用关系,适合研究源码时使用。
3. S32DS集成NCF Tool
对于使用LIN Stack的用户来说,开发LIN功能并不需要熟悉LIN Stack源码,只需要通过协议栈自带的工具进行配置,生成所需的C文件和H文件即可。具体的流程图如下:
- 通过自带文本或者图形编辑器生产LDF文件和NPF文件;
- 点击工具栏的NC图标,生产相应的配置文件–C文件和H文件,并存放到相应的目录;
- 和LIN Stack源码一起编译,生产所需的烧录文件。
3.1NCF Tool插件安装
NCF Tools的安装步骤如下:
- 复制LIN Stack自带的com.freescale.ncftool_1.5.3.jar文件,目录为…\LIN_stack_S12_4_6_6\NCFTool\Eclipse_Plugin
- 将该文件放到S32DS For ARM 2.2的安装目录下存放eclipse插件的位置,粘贴之后的位置为:…\S32DS_ARM_v2.2\eclipse\plugins\com.freescale.ncftool_1.5.3.jar
- 打开S32DS For ARM 2.2,如果在工具栏能够看到下图所示的灰色图标,说明安装成功(S32DS其他版本和CodeWarrior10.6以上的版本都可以按照这种方式安装)
3.2 NCF Tool工具介绍
安装好NCF Tool之后如果不走一遍代码生成的过程,总感觉缺了点啥。话不多说,开始操作。
3.2.1 LDF配置工具介绍
3.2.1.1 创建LDF文件
-
新建一个KEA128的工程,这里选择S32DS自带的hello_kea128例程,如下图。如果没有打开的工程,创建LDF文件时会因为没有存放的地方而无法创建。 -
依次点击File->New->Other,如下图; -
在弹出的界面选择LDF file,再点击Next,如下图; -
查看LDF文件存放的位置以及LDF文件的名称,修改完成后点击Finish; -
新建的LDF文件如下图所示,可以通过点击下方的GUI Editor切换到图形化工具进行文件编写 -
切换到GUI编辑的整体界面如下图,下面一节将详细介绍如何进行配置。
3.2.1.2 使用图形化界面编辑LDF文件
-
全局定义选项卡,如下图,选择LIN的版本和波特率。 -
节点定义选项卡,如下图,编写主节点的名称、时基、抖动等参数以及从节点的名称和个数。 -
信号定义选项卡,如下图,编写节点发布的信号的属性,如名字,大小等,有两点注意事项:
- 每一个从节点必须有一个错误广播信号,LIN2.1中规定长度为1,J2620中规定长度为3;
- 每个信号的发布者只能是一个,接收者可以有多个;
-
无条件帧定义选项卡,如下图,编写无条件帧相关的属性,如帧名字、ID、发布者、包含的信号等。要注意的是:每一个无条件帧里包含的所有信号都来自于同一个发布者。 -
事件触发帧定义选项卡,如下图,编写帧名字、PID、选择冲突解决进度表(在调度表定义选项卡中实现)以及关联的无条件帧,关联的无条件帧必须在冲突解决进度表中被包含。 -
零星帧定义选项卡,如下图,零星帧也称偶发帧,该选项卡主要编写帧名字和关联的无条件帧(发布节点必须是主节点)。 -
节点属性定义选项卡,如下图,编写从机节点的属性,有关P2_min,ST_min,N_As,N_Cr这四个参数的意义如下:
- P2_min: 从LIN 子网接收到主机请求帧到LIN 的从机节点准备好数据发送应答之间的最小时间间隔。
- ST_min: 从机节点准备接收下一个帧(主机请求帧)或准备发送下一个帧(从机应答帧)的应答部分所需要的最小准备时间。
- N_As_timeout: 从传输层向LIN 子网请求一个帧开始到传输层确认请求的帧传输结束之间的超时间隔,即从发送方看,发送LIN 帧(MRF 或SRF)的超时间隔。
- N_Cr_timeout: 在复合帧(首帧+续帧的形式)的传输中,传输层接收到的首帧和续帧、续帧和续帧之间的超时间隔。
- 调度表定义选项卡,如下图,编写调度表的内容,其中Item type有许多选项没有列出来,如AssignNAD,ConditionalChangeNAD,DataDump等,如果需要详细了解,建议参考LIN2.1规范中的4.2.5章节。
9.修改好LDF的文件点击保存之后,点击下图中的NCF按钮,会检查配置是否有误,如果没有问题,会弹出Message–This LDF form is correct的提示。
3.2.1.3 参考资料
- …\LIN_stack_S12_4_6_6\NCFTool\LDF&NPF_Examples文件夹中的LIN21.ldf
- 瑞萨的《LIN总线入门.pdf》
- LIN Specification Package Revision 2.1 November 24, 2006
3.2.2 NPF配置工具介绍
3.2.1.1 创建NPF文件
3.2.1.2 使用图形化界面编辑NPF文件
-
全局定义选项卡,如下图,主要是选择MCU、总线时钟、诊断级别、空闲超时和时间周期等参数 -
硬件定义选项卡,如下图,选择使用的MCU外设接口。 -
网络定义选项卡,如下图,选择使用的LDF文件,节点名称和设备类型。 -
配置修改之后点击刚才的按钮检查NPF文件格式是否有误。 -
点击下图的按钮,然后选择相应的文件夹(存放生产的C文件和H文件),点击OK即可
6.查看KEA128的工程,在相应的文件夹多了3个文件,就是我们想要的配置文件。
3.2.1.3 参考资料
- …\LIN_stack_S12_4_6_6\NCFTool\LDF&NPF_Examples文件夹中的KEA_Master_LIN21.npf
|