利用LIN—协议6进行Flash/EE存储器编程要注意什么

描述

简介

ADuC703x系列器件的一个主要特性是能够将代码在线下载至片内Flash/EE存储器,这种在线代码下载通过LIN通信总线执行。

本应用笔记描述ADuC703x器件使用协议6实现的下载协议,以便用户能够开发自己的LIN编程工具来进行串行生产编程或应用更新。

在本应用笔记中,主机指的是用来下载数据至ADuC703x的主机(微控制器、DSP或其他机器),加载程序特指ADuC703x中固化的串行下载固件。

注意,本应用笔记仅描述协议6.协议6遵从UDS(ISO/DIS 14229-1.2,道路车辆统一诊断服务)规定的一般程序。然而,由于可用代码空间有限,仅限于实际最低需求的服务。

应用笔记AN-881("通过LIN-协议4进行Flash/EE存储器编程")描述协议4。

器件标识的第3行显示所用协议。A60表示协议6的发行版本,A40则表示协议4.

表1. 标识实例

存储器

编程序列可以通过诊断测试仪启动和控制,诊断测试仪一般通过控制器区域网络(CAN)连接到LIN主机。LIN主机充当一个网关,将诊断消息从CAN总线路由到LIN总线。为了方便诊断消息从CAN路由到LIN,模块编程所用的LIN命令应符合"LIN诊断和配置规范"(2.0版,2003年9月23日)。

运行ADuC703x加载程序

为了实现LIN下载,只有当NTRST在复位期间为低电平,并且Flash/EE存储器地址0x80014的内容不是0x27011970及页0校验和时,ADuC703x才会进入加载程序模式,如图1所示。

存储器

图1. 进入下载模式

一般情况下,NTRST保持低电平,进入下载模式与否由Flash地址0x80014的内容决定。通常而言,Flash地址0x80014的值不是0xFFFFFFFF,因此,用户代码必须具有一个内置机制来毁坏位置0x80014或擦除页0(Flash地址0x0至Flash地址0x200),并且复位器件。这种机制支持进入下载模式,以便对器件重新编程。理想情况下,Flash地址0x80014的值应最后编程,以便在电源发生故障时,或者在对程序主体进行编程期间发生错误时,能够重新进入下载模式。

页0的校验和指页0中的所有半字之和,不包括地址0x80014的两个半字。该校验和必须存储在地址0x80014.

分组结构

LIN与加载程序的通信必须遵守"LIN诊断和配置规范"(2.0版,2003年9月23日)的下列一般要求:

● 内核必须为每个LIN诊断帧(主机请求帧和从机响应帧)实现一个时隙。

● LIN主机的请求必须遵从表2所示的分组数据单元(PDU)格式。

表2. 帧标识符0x3C

● 响应必须遵从表3所示的PDU格式。

表3. 帧标识符0x3D

存储器

● 只能使用PCI型单帧(SF)。不支持首帧(FF)和连续帧(CF)。

● 所有帧均使用传统校验和。

● 忽略无法识别的命令。

● 忽略任何有错误(如通信错误等)的帧,因此,错误的擦除例程帧会被忽略。忽略错误的请求下载帧,因此,不会识别后续的传输数据帧,也不会进行编程。任何错误的传输数据帧都会终止识别传输数据帧。事实上,任何具有正确NAD且PCI ≠ 0x05或SID ≠ 0x36的帧,或者任何具有错误校验和的帧,都会终止识别传输数据帧。

● 在"片内加载程序中实现的命令"部分,表5至表7和表9至表15的"值"栏所示的地址是硬编码值,不是示例。

片内加载程序中实现的命令

本部分描述协议6实现的7个命令。

●指定NAD

● 按标识符读取

● 擦除例程

● 下载请求

●传输数据

● 校验例程

● ECU复位

指定NAD

该命令是必需的,用于给从机指定一个新NAD,因为不同的网络系统需要将不同的NAD用于其相应的逻辑从机节点。

请求

LIN协会将供应商ID 0x003A分配给ADI公司。协议6的功能ID如表4所列。

表4. 功能ID

存储器

注意,为了防止从机因为网络损坏而丢失,从机总是通过广播NAD 0x7F识别"指定NAD"命令。当发送"指定NAD"命令时,无论从机的实际NAD是什么,从机都会识别该命令。然后,内核检查供应商ID和功能ID,判断该命令是否是针对该从机而发出的。本文以功能ID 0x32为例进行说明。

表5. 指定NAD请求

存储器

响应

从机不响应该请求。

按标识符读取

编程序列中止后,在启动尝试第二次编程之前,诊断测试仪利用"按标识符读取"请求要求LIN从机表明身份。

请求

支持4个标识符(标识符0x0、标识符0x32、标识符0x33和标识符0x34)。

表6. 按标识符读取请求

存储器

标识符0x0.

带标识符0x0的按标识符读取请求返回LIN产品识别信息。对于ADuC703x LIN产品,此信息由8字节数据帧响应组成,如表7所示。

表7. 标识符0x0数据帧响应

存储器

标识符0x32、标识符0x33和标识符0x34

对这些标识符的响应会返回器件存储器中的用户配置数据。加载程序预期数据字节的内容位于Flash/EE存储器的最后一页,如表8所示。

表8. 分配给其他标识符的Flash位置

存储器

注意,Flash/EE存储器最后一页的最后四个字节保留用于校验和。

响应

LIN从机的肯定响应如表9所示。

表9. LIN从机响应

存储器

从机不提供否定响应。

擦除例程

概述

可以一次擦除多页,以及请求下载和传输连续多页的更新数据。选择哪一种更新策略,完全由诊断测试仪决定。然而,1000 LIN帧中预计有1帧会发生传输错误,因此建议针对各页独立重复擦除、编程、验证周期。必须考虑以下三条限制:

● 无法对小于从机的一个Flash页面,即小于512字节的存储器区域进行编程。

● 页0的编程必须给予特别考虑,必须对其进行初始编程,使得位置0x80014 = 0xFFFFFFFF.

● 除了对Flash/EE存储器的单个页面进行验证以外,执行ECU复位之前,建议对Flash/EE存储器的整个用户区域的校验和进行验证。

●验证最后一页后,必须对0x80014以外的页0区域进行重新编程(不擦除),0x80014用于存储校验和或所需的另一个值。

请求

擦除例程擦除从第P页开始的N个Flash页面的内容。每个Flash页面包含512个字节。值N = 0保留供将来使用。

表10. 擦除例程请求

存储器

字节5和字节6中的索引指的是页起始地址右移9位后的值。例如,Flash/EE存储器中第2页的起始地址是0x80400,右移9位后是0x0402,该索引表示为:字节5 = 0x02,字节6 = 0x04.

响应

从机不响应该请求。

下载请求

参见擦除例程概述部分。

请求

表11. 下载请求

存储器

请求下载命令定义要编程的存储器区域。随后的数据通过传输数据命令传输,写入从第P页开始的N个页面。

响应

从机不响应该请求。

传输数据

这些请求必须跟随在下载请求之后。

请求

传输数据命令传输Flash数据。从机期待N × 512字节的数据,其中N为请求下载命令定义的页数。仅支持完整的4字节字。当LIN波特率为19.2 kbps时,刷新一页需要大约512/4 × 10 ms = 1.28秒。

表12. 数据传输请求

存储器

响应

从机不响应该请求。

校验例程

请求

校验例程命令计算从第P页到第P + N -1页的存储器区域的校验和。N = 0的响应未定义。此命令不仅应对每一页执行,而且应在所有编程完成后执行,因为擦除或下载命令中的错误可能影响目标页面之外的其他页面。诊断测试仪比较从LIN从机接收到的校验和与Flash数据容器中提供的参考校验和。如果二者不符,则重复执行编程程序。校验和等于从第P页的第一个16位字到第P + N -1页的最后一个16位字的所有16位值之和,校验和 = (Σ 16位字)模32.对于单个页面,从机接收到校验例程请求之后,计算校验和需要500 μs.这里不使用循环冗余校验(CRC)算法,原因如下:

●CRC校验和计算所需的时间大约是这里的简单校验和计算所需时间的8倍。

●ADI公司采用误差模型假设,认为校验区域中的所有半字或位并不是全部按照要求进行编程。这样的页面总是会显示较少的0,使得校验和较高。另一方面,对未擦除的页面进行编程总是会显示较多的0,使得校验和较低。第三种可能性是单个半字或位错误。无论使用CRC校验和还是简单校验和,检测到此类错误的概率均相同。

表13. 校验例程请求

存储器

响应

表14. 校验例程响应

存储器

ECU复位

请求

表15. ECU复位请求

存储器

ECU复位命令对从机执行复位。ADuC703x器件的重新启动程序如图1所示。如果地址0x80014的值与第0页的校验和一致或者等于0x27011970,则将执行应用程序软件。

响应

从机不响应该请求。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分