本章介绍 LIN 的 API 的概念、功能和一般用法,并以例子的形式介绍了调用 API 的一般流程。本章内容对应 LIN 规范的以下部分:
LIN Application Program Interface Specification
-------------- 2007-8-08 -------------------------
Freescale 在 LIN 方面有不少开放的资料, 不愧是 LIN 协议的奠基人! LIN08 和 LIN12 分别是面向 HC08 ( 8 位 MCU )和 HC12 ( 16 位 MCU )的 LIN API 软件包。这两个包各有 2 个版本,分别符合 LIN 1.3 和 LIN 2.0 。两个包我都粗略看过,由于 FS 在 LIN 2.0 版 API 开发时放弃了自己的 API ,采用了 “ 第三方 ” 的 API 库(怀疑是 Mentor 的),使 API 部分成了黑盒子,无法深入研究。所以,符合 LIN 1.3 版的更适合学习。
?
以下是我学习 FS 的 1.3 版源代码的心得:
?
例程简介:
??? 从节点;
??? 功能符合 LIN1.3 规范 , 支持 Unconditional frame 和 Sporadic frame ;
??? 使用了 FS 自定义的 FS API ,同时提供符合 LIN 规范的 API 供参考;
??? 硬件资源使用 ESCI 模块及中断, TIM 定时器模块及中断。
?????
流程图:
?
-------------- 2007-8-29 -------------------------
偶然发现瑞萨也免费提供 LIN 2.0 的 API 代码,十分感叹,自己身在瑞萨都不能{dy}时间获得这个消息!叹归叹,立刻看了看,发现瑞萨这个程序的可读性挺好,包含大量详细的代码注释,是学习 API 实现方法的好教材!
?
和先前看过的 FS LIN 相比,感受如下:
- 优点 1 :透明度更高:瑞萨的代码都是 .c 格式,注释多。而 FS 的 API 封在 .lib 里(可能来自 Mentor Graphic 的 LCT 工具),只在外层留着各种映射,无法深究;
- 优点 2 :标准化, API 的定义xx符合 LIN 协议。
- 缺点 1 :对 RAM 的利用不如 FS 节省,甚至可以说是 “ xx ” 。
- 缺点 2 :硬件资源占用比较多,实现一个主节点需要四个硬件: HW LIN 、 2 个 Timer 、 UART ,对应 4 个中断要处理
- 缺点 3 :公开的部分不支持偶发帧、诊断帧和事件触发帧。
流程图:
-------------- 2007-11-28 -------------------------
-------------- 2008-05-13 -------------------------
-------------- 2008-07-09 -------------------------
最近看了看瑞萨的“代码自动生成和组合工具”SANGO所包含的LIN驱动,发现一处设计错误,提醒正在使用该驱动的朋友注意一下。另外也提出一些我觉得可以改进的点,与朋友们讨论。
这个驱动是用于带有Hardware LIN Module的MCU的,通用性强是一个特色。目前可以用于R8C/Tiny系列中的22/23/24/25/26/27/2C/2D等型号,稍加改动,新出的34/36/38等型号的MCU也能用。
设计错误:
??????? LIN帧校验和算法不符合LIN规范。
可以提高的部分:
??????? 处理好驱动部分的软件状态机,使其在处理完一次通信后能够恢复到就绪状态,继续处理下一个帧。
??????? 处理好通信错误/异常,使其在发生通信错误之后,能够在帧结束前恢复到就绪状态,继续处理下一个帧。
??????? 在接收ID后,节点应该有2种可能的行为,一个是发送应答,一个是继续接收。在目前的代码里,除了0x3c这个诊断ID,从节点对其余ID都只做接收。那么从机什么时候才能给主机发信息?
??????? 去掉ID与数据段长度的关联,使其支持LIN 2.x版;
??????? 如果要用在汽车电子产品上,需要进行MISRA规则检查。目前的代码还不符合汽车行业的要求。
- (2010年04月13日)
- (2010年05月18日)
- (2010年05月11日)
- (2010年04月11日)
- (2010年04月09日)
- (2010年05月03日)
- (2010年05月14日)
- (2010年07月07日)
- (2010年04月13日)
- (2010年04月13日)
- (2010年04月07日)
- (2010年04月23日)
- (2010年05月03日)
- (2010年04月06日)
- (2010年05月02日)
- (2010年05月18日)
- (2010年04月22日)
- (2010年04月13日)
- (2010年05月23日)
- (2010年05月18日)