HC12微控制器上的闪存内核编程

article/2025/9/24 6:01:15

HC12微控制器上的闪存内核编程

作者       Sven Deckardt

限制       草案文件

摘要       本应用笔记的目的是解释如何为HC12实现CCP闪存内核以及如何为闪存编程配置CANape Graph。

目录

1.0概述... 1

闪存内核的一般用法... 1

2.0 Flash内核... 3

2.1结构... 3

2.2 Flash例程... 5

2.3一般准备... 5

3.0 D60 Flash内核示例... 5

3.1 CAN / CCP驱动程序... 5

3.2 Flash例程... 6

3.3 XCPPAR.H.. 7

3.4 CANape图的配置... 8

4.0联系... 10

 

 

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


http://chatgpt.dhexx.cn/article/4HD7W4UL.shtml

相关文章

Linux内核模块编程入门( 最简单的内核模块编程)

第1章简介 什么是内核模块? 所以,你想编写一个内核模块。 你知道C,你已经编写了一些正常的程序作为进程运行,现在你想要到达实际操作的位置,一个狂野指针可以消灭你的文件系统,核心转储意味着重启。 什么…

Linux内核模块编程

Linux内核模块编程 (作者:Baron_wu 禁止转载) 首先,创建一个内核模块并插入Linux内核中。这是实验第一部分 首先查看当前内核模块使用情概况:lsmod Module:模块名 Size:模块大小 Used by:这些模块在哪被使…

Linux内核网络编程

netfilter 内核网络编程 网络协议数据结构inet_protosw 在Linux-2.6.26.3/net/ipv4/af_inet.c文件中有一个名为inet_init()的函数对协议进行了初始化。inet_init()函数使用proto_register()函数来注册每个内嵌协议。 软中断CPU报文队列及其处理 Linux内核网络协议层的层间…

Linux学习之内核模块编程

前言 之前成功编译了内核,这次学习如何修改增加删除内核模块,为了保证内核的纯净,我特意重新编译安装了一个新的5.11.8的内核,其他内核同理。 本文原创,创作不易,转载请注明!!&…

MATLAB脚本调用simulink仿真文件及simulink模块参数修改-load_system函数-sim函数-set_param函数

文章目录 1. load_system2. sim3. set_param4. get_param5. 应用 1. load_system 加载系统,添加所需要加载的simulink仿真模型所在的路径和名称。 load_system(pathname\filename);必须加载系统之后才可以完成后续的运行simulink仿真模型和获取仿真模型参数和设置…

Matlab学习笔记3——str2num

Matlab学习笔记3——str2num Convert character array or string to numeric array 将字符数组或字符串转换为数字数组 语法 X str2num(chr) [X,tf] str2num(chr) 输出 X — 输出数组 数字矩阵 输出数组,以数字矩阵形式返回。 tf — 真或假 1 |0 真或假结果…

strlen,strcpy,strcat,strcmp函数

1.strlen函数 strlen函数的作用是计算给定字符串的长度,从内存的某个位置开始,遇到第一个\0结束。 使用样例: int main() {const char *ar "abcdef";printf("%d\n", strlen(ar)); } 返回字符串"abcdef"的…

MATLAB str char cell num格式互相转换

简介 关于如何str char cell num格式互相转换的例子很多,但是都很单一,有时候使用的时候需要查找很久才可以解决问题。这里就对这几种方法进行一个汇总。 之所以会涉及使用cell,是因为涉及字符串、数字在同一个“矩阵”中,这时候…

C++ std::string::substr()

substr()函数返回一个新建的 初始化为string对象的子串的拷贝string对象。 子串是,在字符位置_Off开始,跨越_Count个字符(或直到字符串的结尾)对象的部分 void main() {//std::string::substr(_Off 0, _Count 4294967295U)&am…

matlab中 str2num 函数与 str2double 函数的区别

str2num 函数与 str2double 函数的相同点与不同点 1. 相同点: 当str为一个含数字的字符串时, str2num 函数与 str2double 函数一样。 如: 2. 不同点:当str为多个字符串构成的数组时, str2num 函数与 str2double 函数有…

可逆计算:下一代软件构造理论

可逆计算:下一代软件构造理论 众所周知,计算机科学得以存在的基石是两个基本理论:图灵于1936年提出的图灵机理论和丘奇同年早期发表的Lambda演算理论。这两个理论奠定了所谓通用计算(Universal Computation)的概念基础…

android 微积分计算器,不到1M的良心之作 连微积分都能算的计算器APP

计算器可谓是被手机取代的一大电子产品了,不过手机上的APP是否真的有传统的计算器好用?也并不一定。 一来,手机上的计算器APP功能普遍偏弱,特别是手机ROM自带的计算器;二来,计算器APP也算得上是流氓软件的重…

matlab对信号积分,对信号求积分 - Simulink - MathWorks 中国

说明 Integrator 模块输出其输入信号相对于时间的积分值。 Simulink 将 Integrator 模块作为具有一种状态的动态系统进行处理。模块动态由以下方程指定: {x˙(t)=u(t)y(t)=x(t)x(t0)=x0 ,其中: u 是模块输入。 y 是模块输出。 x 是模块状态。 x0 是 x 的初始条件。 虽然这些…

清华大学计算机学复变函数吗,清华大学计算机系课程 - osc_vq6lx46c的个人空间 - OSCHINA - 中文开源技术交流社区...

这么NB的大学,这么NB的课程,我们还有何理由不努力,同是大学生,人家在学校学的本身就比我们多,还需要更加努力才能跟上步伐,加油。 补充: 清华大学计算机系的课程分为六类课程: (一)公…

Chapter2.4:复数和复变函数运算

该系列博客主要讲述Matlab软件在自动控制方面的应用,如无自动控制理论基础,请先学习自动控制系列博文,该系列博客不再详细讲解自动控制理论知识。 自动控制理论基础相关链接:https://blog.csdn.net/qq_39032096/category_10287468…

信号与系统分析中的复变函数

动态图片来自于: ShutterStock 网站 . 01 教程规划 1.1 背景介绍 针对于信号与系统分析 课程学习的同学,由于之前没有先修过课程复变函数 ,则会在后面信号与系统理论学习中缺少复变函数相关理论支持。为了帮助这部分同学及时补充上复变函数相…

matlab复变函数应用,matlab在复变函数中的一些应用修改后的.doc

matlab在复变函数中的一些应用修改后的.doc MATLAB语言课程论文MATLAB在复变函数中的一些应用姓名刘乐学号12013241953专业通信工程班级2013级通信2班指导老师朱瑜红学院物理电气性息学院完成日期2013年11月9日MATLAB在复变函数中的一些应用刘乐120132419532013级通信2班【摘要…

复变函数与积分变换matlab,matlab在复变函数与积分变换的应用

matlab在复变函数与积分变换的应用 本科毕业论文题目: MATLAB在复变函数与积分变换的应用 学院: 数学与计算机科学学院 班级: 数学与应用数学2009级班 姓名: 指导教师: 职称: 副教授 完成日期:…

复变函数与积分变换

复变函数与积分变换 一、拉普拉斯变换1.拉氏变换的性质a.线性性质b.相似性质c.微分性质例子例子 拉式变换 象函数的微分性质例子例子 积分性质象函数的积分性质例子例子 延迟性质位移性质拉氏变换的应用 一、拉普拉斯变换 1.拉氏变换的性质 a.线性性质 b.相似性质 pygame ursi…

unigui美化界面源码框架

对于delphier来说,顺应互联网时代,用delphi开发web程序,一直是一个很头痛的问题,以往开发delphi程序往往不需要前端和美工参与。但在ui界面上要想漂亮,需要配合和学习css、JS和美工知识,所以很多人会放弃。…