HC12微控制器上的闪存内核编程
作者 Sven Deckardt
限制 草案文件
摘要 本应用笔记的目的是解释如何为HC12实现CCP闪存内核以及如何为闪存编程配置CANape Graph。
目录
1.0概述
本文档介绍了如何为HC12D60微控制器编写闪存内核以及如何配置CANape Graph中的设置以启用闪存编程。闪存内核的目的是将CANape Graph中的hex文件下载到电子控制单元(ECU)的闪存中。
每当闪存必须重新编程时,CAN内核通过CCP自动将闪存内核加载到微控制器的RAM中。闪存内核包含一个最小的CCP和CAN驱动程序以及执行闪存编程所需的所有闪存程序。
该文档应该用作骨架,这使您可以为ECU编写自己的闪存内核。
注意:本应用笔记的源代码仅在Vector的客户请求中提供。
闪存内核的一般用法
ECU的目的是利用RAM中的传感器数据或其他信号进行计算。主应用程序存储在ECU的ROM或闪存中。在运行操作中,用户可以通过更改来改变ECU的行为 一些参数借助于测量和校准工具,如CANape Graph(见图1)。一般的缺点是只能更改RAM数据。存储在闪存中的数据只能通过特殊的闪存程序进行编程。
图1:ECU的正常运行,使用CANape进行测量
为了解决这个问题,可以将闪存例程集成到主ECU应用程序的代码中。这个解决方案的缺点是闪存必须要浪费,因为这些闪存例程不经常使用,出于安全考虑,它们不应该是在已发布的产品中可用。另一种解决方案是使用闪存内核。 每当闪存必须重新编程时,CAN内核通过CCP将闪存内核加载到微控制器的RAM中。闪存内核包含所需的闪存例程,它自己的CAN和CCP驱动程序通过CAN接口与CANape Graph进行通信。
图2:用户在CANape的帮助下将带有集成CCP和CAN驱动器的闪存内核加载到ECU的RAM中
下载闪存内核后,它将在ECU的RAM中执行。最小的CCP驱动程序与CANape Graph通信并等待数据,该数据必须由闪存程序编程。
图3:CANape通过使用内核的CAN接口将一个hex文件(例如主应用程序)闪存到ECU的闪存中,旧的主应用程序存储在闪存中将被擦除然后重新编程
注意:
如果在闪存编程期间出现任何问题,请检查以下几点:
RAM区域是空的(闪存内核是否使用)?
来自主应用程序的中断函数是否覆盖闪存内核,例如 “定时器中断”
2.0 Flash内核
2.1结构
Flash内核包含三部分代码:
CAN驱动程序,用于CAN通信
用于ECU和CANape Graph之间通信的CCP驱动程序
闪存编程程序,用于编程ECU的闪存
图4:闪存内核的内容
由于ECU中使用了不同的微控制器,因此用户必须使CAN驱动程序和闪存编程程序适应ECU.VECTOR提供的CCP驱动程序不需要任何更改。
在第4章(带有Flash内核的CCP_TEST示例)中,将讨论如何调整这些文件的示例。
flash内核文件(例如D60ccp.fkl)由两部分组成:ASCII-header部分和Intel-Hex文件部分。内核头文件必须由用户调整。必须编译flash内核并且必须转换为Intel-Hex格式。
图5:闪存内核的详细信息
2.1.1 flash内核头文件
Flash内核头文件包含有关内核文件名,RAM位置的地址以及闪存内核中主函数的起始地址的一些信息。
注意:
flash内核的主要应用必须以函数:ccpBootLoaderStartup()开头,确保FLASH_KERNEL_RAM_START具有正确的函数地址。 有时,闪存内核位置与向量中断表位于同一地址。 要检查这一点,开发人员必须将内核的大小添加到FLASH_KERNEL_RAM_START地址。 例如,FLASH_KERNEL_RAM_START + FLASH_KERNEL_SIZE = 1533.这意味着0x1000 - 0x1533的RAM位置必须为空。
图6:闪存内核的示例头文件
2.1.2Intel®-Hex文件
通常,用户在使用HC12微控制器时会获得Motorola-S文件。但是,闪存内核需要Intel-Hex文件。可以使用程序HEXTOOL.EXE创建转换,该程序将Motorola-S文件转换为Intel Hex文件.HEXTOOL程序由VECTOR提供。
要生成Intel-Hex文件,您需要以下命令:
- HEXTOOL.EXE D60xcp.s D60ccp.hex
- 复制kernelhead.txt + D60ccp.hex D:\ CAN \ CANape32 \ Exec \ D60ccp.fkl
图7:Intel-Hex文件的示例
2.2 Flash例程
用户必须编写四个闪存例程,由CCP驱动程序调用:
int flashEraseBlock(unsigned char * ptr)
擦除闪存部分
int flashByteWrite(unsigned char * dest,unsigned char data)
在给定目的地写一个字节(闪存地址)
void flashInit()
准备ECU进行编程
void flashExit()
调用用户特定的后续例程
这些功能的代码对于每个微控制器都是不同的。本应用笔记介绍了如何为Motorola HC12微控制器编写这些功能。有关详细信息,请参阅第4节中我们实现的源代码flash.c。
2.3一般准备
要通过闪存内核使用闪存编程功能,必须激活ECU主应用程序的ccppar.h文件中的“闪存编程内核下载”定义。
注意:
此选项启用通过CANape Graph下载的闪存内核,但ECU内的常驻CCP驱动程序不包含任何闪存例程!
3.0 D60 Flash内核示例
3.1 CAN / CCP驱动程序
在此示例中,VECTOR提供的CAN驱动程序仅包含三个基本功能.VECTOR提供的闪存内核的CCP驱动程序无需任何更改即可使用。
图8:boot_can.c和boot_ccp.c文件
CAN驱动程序
ccpBootInit()
初始化CAN驱动程序并配置总线时序
ccpBootTransmitCrm()
功能用于发送最大八个字节的单个CAN消息。,消息存储在发送缓冲区0中,然后发送
ccpBootReceiveCro()
如果正确接收到消息,则检查接收缓冲区中是否有新消息可用,然后返回值1
3.2 Flash例程
如前所述,用户必须在flash.c文件中编写四个主要功能。
called by the CCP driver
int flashEraseBlock (unsigned char *ptr)
该函数包含一个例程,它分析地址* ptr并选择正确的闪存阵列和D60 HC12的字节长度:
图9:闪存阵列选择,D60 HC12闪存内核的代码示例
通过应用擦除电压,将完全擦除所选的闪存阵列。如果闪存阵列成功擦除,将返回值1.有关详细信息,请参阅flash.c.
注意:
D60 HC12包含两个闪存阵列$ 1000 ... $ 7FFF和$ 8000 ...&FFFF。我们示例中使用的演示板包含一个内部监控程序,它保留$ C000 ... $ FFFF,因此第二个闪存阵列无法完全擦除(字节长度= 4000h)。
int flashByteWrite(unsigned char * dest,unsigned char data)
此函数包含一个例程,该例程分析地址* dest并选择正确的闪存阵列,并对存储在该地址的数据中的单字节进行编程。
void flashInit()
通过设置I位禁用所有中断
voidflashExit()
是空的
flash_empty()
此函数检查,如果地址startflash中的flash数组的长度长度仅包含值
0xFFFF(=空)并在这种情况下返回值1。
fpApplyEraseVoltage()
以特殊时序施加擦除电压
fpApplyProgrammingVoltag()
应用具有特殊时序的编程电压
fpDelayms()
延迟毫秒
fpDelayus()
延迟us
重要笔记
为避免编程过程中的错误,请确保:
闪存内核的大小尽可能小,不要浪费RAM!主要的CAN / CCP驱动程序还需要RAM空间,直到闪存内核运行。
不要覆盖您的堆栈指针或其内容
必须正确选择闪存阵列
flash内核头必须包含正确的RAM地址和文件大小
3.3 XCPPAR.H
ccppar.h文件包含闪存内核中XCP驱动程序的重要配置和选项。要创建正确的闪存内核,设置以下选项非常重要:
#define CCP_PROGRAM
#define CCP_BOOTLOADER_DOWNLOAD
#define CCP_BOOTLOADER_SIMPLE
CCP_PROGRAM
告诉我,闪存例程包含在这个应用程序中(闪存内核)
CCP_BOOTLOADER_DOWNLOAD
允许下载闪存内核
CCP_BOOTLOADER_SIMPLE
在定义时,只实现了一些主要功能来保持文件大小
图10:ccppar.h,D60 HC12闪存内核的代码示例
3.4 CANape图的配置
要通过闪存内核在CANape Graph中启用闪存编程,必须实现以下几点:
将扩展名为* .fkl的所需flash内核文件复制到CANape \ Exec - 或工作文件夹中
打开CANape项目,单击菜单中的“设备/设备配置”
点击“驱动程序配置”按钮
切换到“FLASH”选项卡并插入ECU的每个闪存阵列的起始地址和字节长度
启用以下复选框:
- 0xFF优化
- 重新连接
并在组合框中选择以前复制的闪存内核(D60ccp.fkl)。
点击“渌k”然后“丢失”检查,如果闪存内核运行正常,请将ECU ROM内容上传到CANape:
选择“校准/从Flash上传文件”
选择要保存的文件名现在选择菜单条目“下载文件到闪存”,然后选择以前保存的上传文件,并单击“按钮”。
如果一切配置正确,则会闪烁hex文件。在状态栏中,进度条显示闪存编程过程。
4.0联系
Vector Informatik GmbH
Ingersheimer Straße 24
70499 Stuttgart
Germany
Tel.: +49 711-80670-0
Fax: +49 711-80670-111
Email: info@vector-informatik.de
Vector CANtech, Inc.
39500 Orchard Hill Pl., Ste 550
Novi, MI 48375
Tel: (248) 449-9290
Fax: (248) 449-9704
Email: info@vector-cantech.com
VecScan AB
Fabriksgatan 7
412 50 Göteborg
Sweden
Tel: +46 (0)31 83 40 80
Fax: +46 (0)31 83 40 99
Email: info@vecscan.com
Vector France SAS
168 Boulevard Camélinat
92240 Malakoff
France
Tel: +33 (0)1 42 31 40 00
Fax: +33 (0)1 42 31 40 09
Email: information@vector-france.fr
Vector Japan Co. Ltd.
Nishikawa Bld. 2F, 3-3-9 Nihonbashi
Chuo-ku Tokyo 103-0027
Japan
Tel: +81(0)3-3516-7850
Fax: +81-(0)3-3516-7855
Email: info@vector-japan.co.jp