没有合适的资源?快使用搜索试试~ 我知道了~
首页NXP单片机HC9S12系列单片机bootloader的设计
资源详情
资源评论
资源推荐

HC9S12X 系列 CAN bootloader 设计总结
这段时间针对飞思卡尔的 MC9S12XEP100MEG 这款芯片开发了 CAN Bootloader 的上
位机和下位机软件,上位机用的是 VC 平台,C++语言, 下位机用的 CW5.1,下载工具
用的是 USBCAN2II。开发过程中克服了一些困难,也积累了一些知识,所以总结备忘一
下,以便于以后查阅。其中下位机最难的部分还是对这款芯片内存的理解。由于我的设
计思路是:每次上电启动是根据 EEPROM 的控制字判断是否进入 Bootloader 部分还是
Application 部分,而不像网上大多数例子说的那样是根据 PIN 脚一个开关量信号,或者
每次上电都进入 Bootloader 程序,然后是在 Bootloader 程序中根据 CAN 通讯延时判断
跳转进入 Application,所以必须对内存十分清晰了解,大致包括:EEPROM(这款芯片没有
EEPROM,是通过 buffer RAM 模拟 EEE 实现的),D-Flash,P-Flash,RAM, buffer RAM, EEE.内
存映射 Local Memory Map 和 Global Memory Map 之间的换算;内存分页,非分页分配;
三大分页寄存器 EPAGE,RPAGE,PPAGE;还有对 PRM 文件的熟悉,会内存划分,三个复
位向量,中断向量的定义;S19 格式文件的理解;上位机部分主要是现成的 dll 文件,
多线程的调用,基于对话框编程的界面设计。
下位机 Bootloader 部分是根据官网提供的 AN4258SW,AN4258.pdf 这两个文件修改
的(原文件是串口形式的 Bootloader),上位机是根据 USBCAN2II 提供的样例修改的。
基础的东西就不记录了(可以在 AN4258SW 文件里面找到),只记录一些关键的东西。
一,内存大小
如上图所示,这个芯片的内存资源有:
1.P-Flash 部分:64*16K=1024K。说明:P-Flash 一个页窗就是 16K,总共划分了 64 页,所 以
有 64*16K 内存空间大小,对应的全局地址就是 0x70-0000 -- 0x7F-FFFF;
2.RAM 部分:16*4K=64K。说明:RAM 一个页窗就是 4K,总共划分了 16 页,所以有 16*4K
内存空间大小,对应的全局地址就是 0x0F-0000 -- 0x0F-FFFF;
3.D-Flash 部分和 buffer RAM 部分:D-Flash 空间=32*1K=32K,buffer RAM=4*1K=4K.说明:D-Flash
一个页窗就是 1K,总共划分了 32 页,所 以有 32*1K 内存空间大小,对应的全局地址就是
0x10-0000 -- 0x10-7FFF;buffer RAM 一个页窗就是 1K,总共划分了 4 页,所 以有 4*1K 内存空
间大小,对应的全局地址就是 0x13-F000 -- 0x13-FFFF;这里 buffer RAM 和 D-Flash 总共 32 + 4K

的空间模拟用作 EEPROM,因为这个芯片没有 EEPROM,所以用 buffer RAM 和 D-Flash 模拟
用作 EEPROM,简称 EEE, 同时 buffer RAM 也简称 EEE-RAM。
二,内存结构图
如图所示,这个就是 ROM 内存大小的结构图,这个图只是 ROM 空间的结构图,另外的
64KRAM 应该是其他的片上芯片,不在这个图里面。
三,内存块对应的硬件 PARTID

如上图所以,所以的 ROM 空间划分了 5 个块,分别是 B3,B2,B1S,B1N,B0.对应的 PARTID
分别是 MASK_0M48H 0xCC90 到 MASK_4M48H_5M48H 0xCC94。这个值可以从 PARTID 对应
的寄存器 PARTIDH and PARTIDL (addresses 0x001A and 0x001B)读出来,这个在
P-Flash 擦除和编程的时候要用到。
四,内存映射 Local Memory ,Global Memory 的关系:

如图所示,Local Memory Map 对应 64K 的本地绝对物理地址寻址空间。Global Memory Map
对应 8M 的实际 ROM,RAM 内存块全局物理地址寻址空间。由于这款芯片是 16 位的地址寻
址空间,所以只能寻址 64K 的物理地址,但是实际的 ROM,RAM 空间远远超过这个空间,所
以通过内存映射的方法来寻址全局地址内存空间。实现的方法就是通过 EPAGE,RPAGE,PPAGE
来实现。让 EEPROM 来举例说明。先划分 0x0c00 - 0x0bff 这 1K 的空间来作为活动分页页窗,
然后在 PRM 文件中把全局 EEPROM 内存空间 256K 的地址划分成 256 页,比如:EEPROM_00
= READ_ONLY DATA_FAR IBCC_FAR 0x000800 TO 0x000BFF; 第一页对应的全局地址就是
0x10_0000 - 0x10_BFF, 此时 EPAGE = 0X00.
五,PRM 文件理解:
1 .prm 文件组成结构
按所含的信息的不同
.
prm 文件有六个组成部分构成,这里仅讨论和内存空间映射关系
紧密的三个部分,其他的不做讨论。

SEGMENTS … END
定义和划分芯片所有可用的内存资源,包括程序空间和数据空间。一般我们将程序空间
定义成 ROM,把数据空间定义成 RAM,但这些名字都不是系统保留的关键词,可以由用户
随意修改。用户也可以把内存空间按地址和属性随意分割成大小不同的块,每块可以自由命
名。例如同样是 RAM,可以使用不同的属性,使其有复位后变量清零和不清零之分。
关于内存划分的具体方法在后面详解。
PLACEMENT … END
将指派源程序中所定义的各种段,如数据段 DATA_SEG、CONST_SEG 和代码段
CODE_SEG 被具体放置到哪一个内存块中。它是将源程序中的定义描述和实际物理内存挂钩
的桥梁。
STACKSIZE
定义系统堆栈长度,其后给出的长度字节数可以根据实际应用需要进行修改。堆栈的实
际定位取决于 RAM 内存的划分和使用情况。默认的情况下,堆栈放在 RAM 区域的起始部分。
当然,堆栈的定义不只有这种方式,还可以使用 STACKTOP 关键字。后面将详细讨论。
2 内存划分的具体方式
由 SEGMENTS 开始到 END 为止,中间可以添加任意多行内存划分的定义,每一行用分
号结尾。定义行的语法型式为:
[块名] = [属性 1] [属性 2] ,… ,[属性 n] [起始地址] TO [结束地址];
其中,
“块名”的定义和 C 语言变量定义相同,是以英文字母开头的一个字符串,用户可以自己
任意定义块名。
“属性”用户是不能自己定义的,因为属性名指定了上面所说的“块名”所对应的不同的
内存类型和访问方式,而不同物理内存的类型和访问方式是一定的。
对于“属性 1”,Codewarrior 5.0 中可以有三种不同的类型,对于只读的 Flash-ROM 区
属性一定是 READ_ONLY,对于可读写的 RAM 区属性可以是 READ_WRITE,也可以是 NO_INIT。
它们两者的关键区别是 ANSI-C 的初始化代码会把定位在 READ_WRITE 块中的所有全局和静
态变量自动清零,而 NO_INIT 块中的变量将不会被自动清零。当然只是复位时不清零,掉电
时还是清零的,但是对于单片机系统,变量在复位时不被自动清零这一特性有时是很关键的,
在某些应用中有特殊的用途。
对于“属性 2
…
属性 n”,根据上面给出的.prm 的范例文件可以看出来,可能的形式
有“DATA_FAR”、“DATA_NEAR”、“IBCC_FAR”、“IBCC_NEAR”四种类型。其中,“DATA_FAR”
和“DATA_NEAR”相对应,当内存区域包含变量或者是常量时(通常是 RAM、Flash 和
EEPROM),必须指明上面两种属性中的一种,由于涉及到内存的分页,可以这样理解:
“DATA_FAR”属性指定的内存块为可以保存数据的非固定页,而“DATA_NEAR”属性指定
的内存块为可以保存数据的固定页;同理“IBCC_FAR”和“IBCC_NEAR”相对应,当内存区
域包含代码时(Flash 和 EEPROM),必须指明上面两种属性中的一种,“IBCC_FAR”属性指
剩余25页未读,继续阅读













nishuiping
- 粉丝: 2
- 资源: 7
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- ARM Cortex-A(armV7)编程手册V4.0.pdf
- ABB机器人保养总结解析.ppt
- 【超详细图解】菜鸡如何理解双向链表的python代码实现
- 常用网络命令的使用 ipconfig ping ARP FTP Netstat Route Tftp Tracert Telnet nslookup
- 基于单片机控制的DC-DC变换电路
- RS-232接口电路的ESD保护.pdf
- linux下用time(NULL)函数和localtime()获取当前时间的方法
- Openstack用户使用手册.docx
- KUKA KR 30 hA,KR 60 hA机器人产品手册.pdf
- Java programming with JNI
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论0