云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于飞思卡尔的Bootloader程序下载更新

基于飞思卡尔的Bootloader程序下载更新

  • 62 次阅读
  • 3 次下载
  • 2025/5/26 2:20:40

三、Flash的擦除和写入

关于Flash的擦除和写入,真的是让我最费力的一部分,网上的相关资料很少,好不容易找到了一点相关代码,却发现程序不能正常的运行,而且更令人无解的是程序本身怎么检查都检查不出错误。好啦,一点一点的说说我的辛酸史。

首先,如果你在寻找飞思卡尔的flash擦除写入操作,很遗憾的告诉你,如果你用的不

是MC9S12XS系列,那么很有可能,你所需要的flash擦除写入操作和我接下来将要说明的擦除写入操作基本上不沾边(除了原理上),因为飞思卡尔不同系列的单片机对flash的擦除写入操作的定义差别很大,不注意型号的话反而会被误导。

至于擦除和写入的原理是什么,这个不是我们关心的,我也不去赘述,我主要说明一下

相关的具体操作。

我们主要是对飞思卡尔Flash中的PFlash即存放程序段的Flash进行操作。如图,

步骤大概分为:

1、设置Flash分频寄存器:

Flash的操作对频率有一定的要求,过低擦除不成功,过高会损毁Flash如图为

MC9S12XS128的FCLKDIV寄存器,所有位都是可读的但是只有7位可写入。至于应该如何设置分频数,有一张表格可以参考:

如表格说明,分频数是根据外部时钟来定的,MC9S12XS128的外部时钟是16MHz,所以我选择了0x10作为分频数。给出一一些具体的代码:

/*********************************************************** ** 名称:void PFlash_Init(void) ** 功能:PFlash初始化 ** 入口参数:无 ** 出口参数:无 ** 使用说明:无

************************************************************/ void PFlash_Init(void) {

while(FSTAT_CCIF==0);//等待正在处理的Flash操作,即CCIF=1时,操作完成 FCLKDIV=0x10;//外部晶振为16MHz,Flash时钟设置为1MHz FCNFG=0x00; //禁止中断

while(FCLKDIV_FDIVLD==0); //等待时钟设置成功,即FDIVLD为1时设置成功 }

这里补充一下对FCLKDIV_FDIVLD的说明:

说明很简单,一看就看懂。

2、FSTAT状态寄存器

在上面的代码中出现了一行,这就涉及到一个很重要的寄存器,就是Flash操作的状态寄存器,就像是Flash操作步骤中的“红绿灯”一样,告诉程序什么时候可以执行什么操作,什么时候必须要等待一下。如图:

其中我们比较关心的是CCIF位、ACCERR位和FPVIOL位,这三位也都是可读可写的。

CCIF:指令完成标志位,当CCIF位为1时,表示上一个Flash操作完成了。注意图中的高亮部分,如果想要使当前操作的指令完成,需要手动将CCIF清零(标志位置位就是令标志位为0,但具体操作是令标志位等于1),才能触发指令,令指令完成,也就是前面流程图中说明的,才能launch指令。

ACCERR和FPVIOL:这两位主要标志是否有错误操作发生,当为1时,说明检测到错误。那检测到作物怎么办呢?解决方法也比较奇葩,将两个标志位清零(清零操作如上)就行,,,,,至于什么原理,我也不太明白。

数据手册如图,强烈建议还是自己读一下原文,很有好处。 再给出一些具体的代码: CCIF的操作代码:

FSTAT_CCIF=1;//启动执行命令,即launch指令 while(FSTAT_CCIF==0);//等待执行完成 ACCERR和FPVIOL的操作代码:

if(FSTAT_ACCERR) //判断并清除标志位; FSTAT_ACCERR=1; //将标志位清零

if(FSTAT_FPVIOL) //判断并清除标志位; FSTAT_FPVIOL=1;//将标志位清零

注意点:说实话,当时我自己写程序的时候,就对标志位清零操作感到非常的疑惑,说好的清零操作呢,为什么是令标志位为等于1?后来才想明白,对于标志位,写0等效于没有操作,写1代表清零。原因主要有两点:

1) 标志位为1一般表示有什么事情发生啦,对于标志位什么时候为1,应该是单片机根据

具体的情况作出自己的判断,是根据实际情况来置1的,而不应该是人为的置1。 2) 如果某次操作我们只想对状态寄存器中的某一位或某几位进行操作,那么对其余位就必

须没有任何的影响,如果规定写0时等效于无操作。

3、执行具体的指令

将分频和状态寄存器弄好后,就可以开开心心的执行具体的指令啦。指令具体的指令主要涉及到FCCOBIX寄存器和FCCOB寄存器:

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

三、Flash的擦除和写入 关于Flash的擦除和写入,真的是让我最费力的一部分,网上的相关资料很少,好不容易找到了一点相关代码,却发现程序不能正常的运行,而且更令人无解的是程序本身怎么检查都检查不出错误。好啦,一点一点的说说我的辛酸史。 首先,如果你在寻找飞思卡尔的flash擦除写入操作,很遗憾的告诉你,如果你用的不是MC9S12XS系列,那么很有可能,你所需要的flash擦除写入操作和我接下来将要说明的擦除写入操作基本上不沾边(除了原理上),因为飞思卡尔不同系列的单片机对flash的擦除写入操作的定义差别很大,不注意型号的话反而会被误导。 至于擦除和写入的原理是什么,这个不是我们关心的,我也不去赘述,我主要说明一下相关的具体操作。 我们主要是对飞思卡尔Flash中的PFlas

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com