Flash擦写的内容,个人做HC9S12系列单片机时觉得应该是各模块内容中最难而且是最麻烦的一步了。只有能够对Flash进行擦写以后,所做的Bootloader才有真正手段将串口或者其他通讯手段接收到的数据或者程序写入Flash中进行程序或者数据的更新。当初做Flash的擦写也遇到了很多问题,网上搜罗下来也没有合适的帖子能够详细的将整个过程或者学习的思路以及最后实现的程序详细的加以解析,而本博文就是基于这个出发点来写的。技术本身应当是共享的才能真正让社会进步,不是么?

  关于单片机Flash的基本内容,我在此前Bootloader相关的博文中也已经提及。Flash本身是非易失性存储,可以通过编程的方式擦写其中的内容,掉电后其内容不会丢失,一般是单片机的程序存储位置。单片机运行时先将Flash中下一条运行的程序读出,然后执行其内容,再读出下一条指令,再执行循环往复。但是我们希望,能够使我们开发的单片机应用程序能够有自动更新程序的功能。比方说我现在开发的一款共享单车智能车锁,在共享单车在大马路上只能通过网络交互的时候,我希望能够更新该车锁中单片机的程序以提供新的功能。这种时候,我们就需要擦写Flash来完成这一目的。

  Flash擦写操作最应该看的就是单片机的或者Flash的手册,认真的看,通篇阅读后再尝试用C语言去加以实现其功能。我们的讲解也是在这个过程中逐渐展开的,当然,还是针对HC9S12G128系列的单片机内置Flash而言。本次篇博文仅考虑了比较简单的Flash擦除与Flash写入操作,当然,在理解了Flash操作的基础上,Flash的其他操作如写保护,解保护其实是一样的道理。好了,下面我们就开始吧。

G128系列单片机的Flash存储大小有128KB, 其全局地址范围为: 0x2_0000 - 0x3_FFFF。这篇文章中已经假设各位读者已经对分页地址,非分页地址,逻辑地址,全局地址已经有所理解,如果尚不明确其意义的,我在freescale飞思卡尔 HCS12 系列单片机bootloader详解(二)这篇博文中做了解释,理解了这些概念间的相互关系再来看本博文会比较有帮助。了解Flash擦写前,根据我们手册中的内容,Flash的控制体系是这样的:

  在S12系列单片机中,编程人员对Flash的操作并不是实际意义上对每个Flash存储区直接进行操作的,而是通过这个Flash Interface进行的。通过对这个Flash Interface的寄存器进行配置,再由它对Flash进行直接的操作。这里,我们称Flash Interface为Flash操作控制器或者Flash控制器。那么如何控制Flash控制器呢?手册中已经给出了Flash操作控制相关的所有寄存器,如下图所示,这些寄存器就是我们单片机的寄存器,它们的操作与普通的寄存器没有什么两样,在单片机寄存器定义头文件中均可以找到。还有一点就是通过总线时钟按照对应单片机Flash控制器的要求设置时钟分频器,给你使用的Flash控制器设置合适的时钟频率使其能够正常工作。

HCS12G128单片机部分Flash控制器相关的操作寄存器(不同型号单片机会有所不同)

  首要的任务当然是设置Flash控制器的时钟了,它以总线时钟为时钟源,通过设置FCLKDIV(Flash时钟分频寄存器)来对其进行设置。G128的FCLKDIV寄存器定义在手册中的内容如下:

  在这页手册中可以看到,有三个寄存器需要处理FDIVLD,FDIVLCK,FDIV。先说FDIV寄存器,这个寄存器有六位,通过分频将总线时钟频率分频至1MHz以下从而使Flash控制器可以正常工作。FDIV的值与总线时钟频率有关,根据总线频率的大小确定FDIV的值,其取值在手册中也给出了下表:

  对于这个表,用法也非常简单,假如当前我的总线频率为15MHz,查表中15MHz在14.6与15.6之间,那么FDIV的值就是0x0E了。当确定好Flash控制器的频率后需要将其写保护以防误操作修改了分频寄存器,那么对FDIVLCK写1就好了,当FDIVLCK写入1后,除非重启,否则FDIV的值不能被修改,重启后FDIVLCK的值将重新归零。

  由此总结我们Flash控制器的时钟设置步骤如下:

  1. 根据总线频率设置分频FDIV

  2. 对分频进行保护,将FDIVLCK置为1

  这里需要注意,当需要写入FCLKDIV这个寄存器(也就是完成上面两个操作时),一定要确保此时Flash控制器不在执行指令,那么Flash控制器如何执行指令的呢?怎么查看它是在执行指令的呢?

  请看下节,Flash控制器的指令寄存器

注: 本系列文章均为原创,如有转载引用请标明来源

转载于:https://www.cnblogs.com/15821216114sw/p/9509680.html

freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(一)之时钟设置相关推荐

  1. freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(三)之Flash控制器指令执行

    前面我们介绍了Flash主要的几个寄存器,如果还有其他的疑问可以再返回去看看或者直接查阅S12系列单片机的手册中相关的内容.这一节我将介绍Flash控制器指令执行的过程,并举出相关的例子,希望能够起到 ...

  2. STM32系列内部Flash擦写程序

    stm32内部Flash擦写流程,对于FLash必须按页擦写,不同型号的flash页大小不同,需要根据实际修改 #define FLASH_PAGE_SIZE 2048 //定义Flash页大小,RC ...

  3. 飞思卡尔MKL系列单片机用jlink烧写程序出现的Kinetis (connect): Timeout while halting CPU. CPU does not stop.问题

    最近用Jlink烧写飞思卡尔MKL16Z128单片机时发现经常出现不能连接成功的情况,用的是SWD接口,排查了好久后来发现问题在单片机的RESET脚上,因为之前用SWD接口的时候只接4线(SWD.SC ...

  4. 飞思卡尔Kinetis系列单片机被锁住后,怎么解锁

    Kinetis提供了相当可靠地知识产权保护机制:人为的给芯片上锁,这个对量产后的产品是必须的.但是,用户误擦写了芯片内部security的内存部分(0x400~0x40F),从而锁住了芯片:难道芯片就 ...

  5. 飞思卡尔MC9S12系列单片机地址影射以及分页问题

    对于用MCU的人来说,不一定要明白HCS12(x) memory map的机制和联系.因为如果没有系统地学习操作系统和编译原理之类的课程,确实有些难度.并且,对于DG128 XS128这样的MCU,默 ...

  6. 关于飞思卡尔S12系列单片机SPI通信MODRR配置

    MODRR为模块路径选择寄存器,作为CAN0/4与SPI0/1/2映射引脚. 例如选择CAN0为PM0/1引脚,则配置MODRR_MODRR0&1=0.当MODRR_MODRR4=0时,SPI ...

  7. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(1)- KBOOT架构

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT架构. Bootloader是嵌入式MCU开发里很常见的一种专用的应用程序,在一个没有Boo ...

  8. 【飞思卡尔 MC9S12】内部Flash读写

    上一篇:[飞思卡尔 MC9S12]PRM文件与内存映射(Flash.RAM.EEE) 上一篇讲到PRM文件与内存映射,其中有个重要寄存器叫做GPAGE,可以全局访问所有地址范围,Flash操作也是基于 ...

  9. ftm模块linux驱动,飞思卡尔k系列_ftm模块详解.doc

    飞思卡尔k系列_ftm模块详解 1.5FTM模块1.5.1 FTM模块简介FTM模块是一个多功能定时器模块,主要功能有,PWM输出.输入捕捉.输出比较.定时中断.脉冲加减计数.脉冲周期脉宽测量.在K1 ...

最新文章

  1. java svn插件_Eclipse安装SVN插件
  2. 【深度学习】深入浅出nnUnet的数据处理方法
  3. (三)如何成为优秀的数据分析师
  4. 漫画 | 如何凭实力炒老板鱿鱼,并喜提N+1~
  5. 计算机集成制造 pdf,计算机集成制造系统方法论9412536127640μ.pdf
  6. java面试题——java基础(四),java初级面试笔试题
  7. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·007【简单查询】
  8. 凤凰号首次传回未加工的火星照片,人类加紧施展征服火星计划
  9. Nginx PageSpeed模块配置和使用
  10. MSFConsole 学习记录
  11. 《数学建模与数学实验》第5版 插值与拟合 习题7.6
  12. 【桃园恋歌】mmd镜头+动作打包下载.zip
  13. 声音存储空间计算公式_声音图像视频容量计算公式
  14. Unity-创建一个小地图
  15. 二值化网络的发展——从原始BNN到MeliusNet
  16. 我的感悟:一切都是最好的安排
  17. python爬取微博热搜显示到折线图_Python爬取新浪微博热搜榜-Go语言中文社区
  18. 吴恩达亲述:如何高效阅读论文,开启一个新的领域!
  19. 腾讯云-即时通讯 IM
  20. Mac电脑怎么读写不了移动硬盘?解决苹果电脑不能读写移动硬盘问题

热门文章

  1. 【java】输出不换行
  2. [python] Pelican+Mermaid无插件实现
  3. 白嫖长焦!清晰影像缩放功能
  4. 【火狐浏览器】获取微信uin
  5. ftp获取远程服务器的文件,ftp查看远程服务器文件
  6. 解决kali安装搜狗输入法,apt-get install -f之后图形界面丢失问题
  7. JAVA学习笔记(二十)
  8. 腾讯T3亲自教你!2021年Android网络编程总结篇,最强技术实现
  9. 【生活】订火车票的策略
  10. java抓取网页代码_java 抓取网页内容实现代码