飞思卡尔MC9S12G系列单片机flash擦写

本文介绍了飞思卡尔MC9S12G系列单片机的Flash模块,包括Flash功能框图、关键寄存器如FCLKDIV、FCCOBIX、FCCOB和FSTAT的详细解释,以及Flash擦写操作流程。在实际操作中,需要注意Flash控制器的时钟设置,确保指令执行完毕后再进行新的操作。此外,由于Flash在擦写期间不能读取,因此擦写代码必须放在RAM中执行。文章还提供了prm文件的配置示例,用于将代码从Flash复制到RAM中执行。


最近在学习飞思卡尔MC9S12G系列单片机底层驱动,看了很多,目前理解还不深,处于入门菜鸟级别,仅在此记录下学习心得,后续会在实操中强化底层驱动开发能力,不能老是处于光说不练,搞些假把式。好了,言归正传。本文主要记录笔者基于MC9S12G系列单片机flash擦写,还望各路大神路过时,可指点一番。

Flash本身是非易失性存储,可以通过编程的方式擦写其中的内容,掉电后其内容不会丢失,一般是单片机的程序存储位置。单片机运行时先将Flash中下一条运行的程序读出,然后执行其内容,再读出下一条指令,再执行循环往复。通过擦写flash能够实现单片机应用程序自动更新。

G128系列单片机,查阅芯片手册,获得数据如下:
• 128Kbytes of P-Flash (Program Flash) memory
• 4 Kbytes of EEPROM memory
在这里插入图片描述
可以看出,G128系列单片机的Flash存储大小有128KB, 其全局地址范围为: 0x2_0000 - 0x3_FFFF。在这里可通过以下链接,熟悉并理解MC9S12G128内存映射。
MC9S12G128内存映射(本地地址,逻辑地址,全局地址)

第一张图:Flash模块功能框图

G128 Block Diagram
上图直接告诉我们,对flash操作其实不是直接对每个Flash存储区进行操作,而是通过控制Flash Interface进行的。具体就是操作Flash Interface的寄存器,再进而操作Flash存储区。那么寄存器有哪些?具体怎么操作?看第二张图。

第二张图:寄存器描述

在这里插入图片描述
在这里插入图片描述
Flash模块有20个控制和状态寄存器。上图是从芯片手册截取的一部分。但对于Flash模块而言关键寄存器就是图中圈住的几个。下面依次来介绍一下:

FCLKDIV(Flash时钟分配寄存器)

先上图(截取自芯片手册)
在这里插入图片描述
在这里插入图片描述
上图告诉我们:有三个寄存器需要处理(FDIVLD,FDIVLCK,FDIV):
FDIV寄存器:有六位,通过分频将总线时钟频率分频至1MHz以下从而使Flash控制器可以正常工作。FDIV的值与总线时钟频率有关,根据总线频率的大小确定FDIV的值(见上表),假如当前我的总线频率为16MHz,查表中16MHz在15.6与16.6之间,那么FDIV的值就是0x0F了。当确定好Flash控制器的频率后,需要将其写保护,以防误操作修改了分频寄存器,那么对FDIVLCK写1,当FDIVLCK写入1后,除非重启,否则FDIV的值不能被修改,重启后FDIVLCK的值将重新归零。
由此总结我们Flash控制器的时钟设置步骤如下:

  1. 根据总线频率设置分频FDIV
  2. 对分频进行保护,将FDIVLCK置为1

FCCOBIX(Flash CCOB索引寄存器)

先上图(截取自芯片手册)
在这里插入图片描述
上图告诉我们,这个寄存器是FCCOB的索引寄存器,CCOBIX[2:0] 只有三位,即8种状态。具体如何索引,看下图:
在这里插入图片描述
在这里插入图片描述
The CCOBIX bits are used to select which word of the FCCOB register
array is being read or written to.

FCCOBIX的两位决定当前读取或者写入FCCOB的是哪一个word(一般而言一个word在单片机中指两个字节),也就是说FCCOB是一个多word的寄存器,通过FCCOBIX来确定当前操作或者读取的是哪一位。具体如何操作,我们要来看看FCCOB寄存器。FCCOBIN和FCCOB这两个寄存器得结合起来看。

FCCOB(Flash指令寄存器)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值