简介
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,则将执行应用程序软件。
响应
从机不响应该请求。
全部0条评论
快来发表一下你的评论吧 !