搜索
bottom↓
回复: 28

【经验分享】flash中一次编程区域操作讲解

[复制链接]

出0入0汤圆

发表于 2014-8-22 17:26:02 | 显示全部楼层 |阅读模式
【经验分享】flash中一次编程区域操作讲解
一,一次编程区域描述
        一次编程区域是芯片提供的一块具有64个字节,可以供用户存储数据的flash。这个区域对应芯片本身来说,终生只能写一次,然后就只可以进行读操作。写进去的数据无法擦除,所以操作的时候一定要三思而后行。这块flash是以8个字节为块的,也就是说64个字节一共有8块,每次操作都是针对8个字节为单位的。下面以我们的K64F120M的芯片为例,具体讲解该区域内容。
        支持这块区域的操作一共有两种命令,分别为:一次读命令(0x41)以及一次写命令(0x43).
1, 一次读命令
     执行一次读命令可以读出一次编程区域的8个字节的数据。控制命令与寄存器对应情况如下:

写完命令(其实只需要写FCCOB0和FCCOB1)之后,需要通过清除FTFE_FSTAT来发起一次区域读命令,然后读出来的值就会刷新到FCCOB4-B的寄存器中,用户只需要读取该寄存器的值即可。这里需要注意,FCCOB1的值范围只有0x00-0x07,因为我们的一次编程区域只有8块,每块8字节。读操作指令没有限制,可以无限次读。
2, 一次编程命令
     执行一次编程命令,可以对一次编程区域的8个字节写入用户想要的数据。
一次编程控制命令与寄存器对应情况如下:

写命令需要在FCCOB0写入0X43,FCCOB1写入要写数据的块号,写完命令之后,需要通过清除FTFE_FSTAT来发起一次区域读命令,然后寄存器FCCOB4-B中的数据就会永久的写入到一次编程区域,再也不能进行第二次编程以及擦除,数据对于芯片来说终身存在。

二,一次编程区域读写实现
         下面讲解如何使用代码实现一次编程区域的读与写操作。
1, 一次读命令操作
          这里以读第一个块为例,即块号为0,不同的块,只需要改变块号就行,代码操作如下:
  FTFE_FCCOB0 = FTFE_FCCOB0_CCOBn(0x41); // Selects the PGMPART command
  FTFE_FCCOB1 = 0x00;//选择读取第0块
  /* All required FCCOBx registers are written, so launch the command */
  FTFE_FSTAT = FTFE_FSTAT_CCIF_MASK;
  /* Wait for the command to complete */
  while(!(FTFE_FSTAT & FTFE_FSTAT_CCIF_MASK));
  //存值
  RecBuf[0]= FTFE_FCCOB4;
  RecBuf[1]= FTFE_FCCOB5;
  RecBuf[2]= FTFE_FCCOB6;
  RecBuf[3]= FTFE_FCCOB7;
  RecBuf[4]= FTFE_FCCOB8;
  RecBuf[5]= FTFE_FCCOB9;
  RecBuf[6]= FTFE_FCCOBA;
  RecBuf[7]= FTFE_FCCOBB;
通过以上的代码,就可以实现第一个块的读操作,最终读的值又放到了RecBuf数组中保存。
2, 一次编程命令操作
         这里同样以第一个块为例,即块号为0,不同的块,只需要改变块号就行,代码操作如下:
  FTFE_FCCOB0 = FTFE_FCCOB0_CCOBn(0x43); // Selects the PGMPART command
  FTFE_FCCOB1 = 0x00;//选择块号

  FTFE_FCCOB4 = 0x00; //write data
  FTFE_FCCOB5 = 0x00;
  FTFE_FCCOB6 = 0x00;
  FTFE_FCCOB7 = 0x00;
  FTFE_FCCOB8 = 0x00;
  FTFE_FCCOB9 = 0x00;
  FTFE_FCCOBA = 0x00;
  FTFE_FCCOBB = 0x00;

  //* All required FCCOBx registers are written, so launch the command
  FTFE_FSTAT = FTFE_FSTAT_CCIF_MASK;
  while(!(FTFE_FSTAT & FTFE_FSTAT_CCIF_MASK));
通过以上操作,就可以实现第一个块数据为0的写操作。

三,一次编程区域读写实例测试
本次测试的硬件平台是TWR-K64F120M, 软件平台是飞思卡尔的CW10.6。这里操作两个块,块号分别为0,1.对于0号的8个字节写入全0,对于1号写入1-8的数据。
1.        0号块写入全0读出的结果

2.        1号块写之前读的结果

3.        1号块写入1-8数据读的结果

        从寄存器中可以看到,读写的结果和预期的操作结果一直,当然本例程还做了用串口中直接发出读取的结果值,可以通过串口助手查看。

四,附件
    附件中提供了本经验分享的测试代码以及文档供大家参考,希望能够对大家带来帮助。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-8-22 17:26:25 | 显示全部楼层
不足之处欢迎指正,同时也欢迎大家分享自己的经验。

出0入0汤圆

发表于 2014-8-22 17:27:50 | 显示全部楼层
顶起,这个可以用来做出厂加密用,呵呵!

出0入0汤圆

发表于 2014-8-22 17:28:08 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-8-22 17:26
不足之处欢迎指正,同时也欢迎大家分享自己的经验。

还没下班?

出0入93汤圆

发表于 2014-8-22 17:41:04 | 显示全部楼层
“终生只能写一次,然后就只可以进行读操作。写进去的数据无法擦除”
---------------------------------------------------------------------------
是不是意味着如果那里有数据,就不是全新的芯片了?

出0入93汤圆

发表于 2014-8-22 17:42:27 | 显示全部楼层
wangpengcheng 发表于 2014-8-22 17:27
顶起,这个可以用来做出厂加密用,呵呵!

如果是一次性永久写入,这个功能应该比那些出厂即有唯一id的更方便加密

出0入0汤圆

发表于 2014-8-22 17:45:36 | 显示全部楼层
tim 发表于 2014-8-22 17:42
如果是一次性永久写入,这个功能应该比那些出厂即有唯一id的更方便加密

是的,但是要注意,因为是可读的,批量的时候要用不同的密钥才行

出0入93汤圆

发表于 2014-8-22 17:49:49 | 显示全部楼层
wangpengcheng 发表于 2014-8-22 17:45
是的,但是要注意,因为是可读的,批量的时候要用不同的密钥才行

还可以用了存一部分版权信息

出0入0汤圆

发表于 2014-8-22 17:52:08 | 显示全部楼层
感谢版主的分享.

出0入0汤圆

发表于 2014-8-22 17:52:25 | 显示全部楼层
tim 发表于 2014-8-22 17:49
还可以用了存一部分版权信息

这个倒是可以,比如将公司信息、硬件版本、软件版本等写到里面,将来维护的时候还是很方便!

出0入0汤圆

 楼主| 发表于 2014-8-23 11:49:06 | 显示全部楼层
tim 发表于 2014-8-22 17:41
“终生只能写一次,然后就只可以进行读操作。写进去的数据无法擦除”
----------------------------------- ...

至少对于你写过的一次编程区域来说,不是新的了。
一共有64个字节,省着点用还是够的。

出0入0汤圆

发表于 2014-8-23 11:52:38 | 显示全部楼层
这个写操作只有一次,只许成功不许失败,

出0入0汤圆

发表于 2014-8-23 11:53:10 来自手机 | 显示全部楼层
这个不错,做加密,版权信息还是很好的

出0入93汤圆

发表于 2014-8-23 11:54:07 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-8-23 11:49
至少对于你写过的一次编程区域来说,不是新的了。
一共有64个字节,省着点用还是够的。 ...

谢谢版主回复,明白了

出0入0汤圆

发表于 2014-8-23 19:06:56 | 显示全部楼层
谢谢版主                                 

出0入0汤圆

发表于 2014-8-23 19:11:52 | 显示全部楼层
OTP,虽然我到现在还没用到过

出0入0汤圆

发表于 2014-8-23 21:01:04 | 显示全部楼层
传说中的OTP

出0入0汤圆

发表于 2014-8-25 12:52:10 | 显示全部楼层
感谢版主分享资料。

出0入0汤圆

 楼主| 发表于 2014-8-25 13:10:08 | 显示全部楼层
qwert1213131 发表于 2014-8-23 11:52
这个写操作只有一次,只许成功不许失败,

是一定要写你最重要的信息,不然就是浪费

出0入0汤圆

发表于 2014-8-25 13:12:15 | 显示全部楼层
OTP,谢谢楼主提供

出0入0汤圆

发表于 2014-8-25 13:18:35 | 显示全部楼层
不错不错

出0入0汤圆

发表于 2014-8-25 15:24:14 | 显示全部楼层
楼主飞币真多,分享了很多好资料啊,赞赞

出0入0汤圆

发表于 2014-8-25 15:35:11 | 显示全部楼层
这个区域能自定义写很好啊,可以放一些芯片ID之类的。

出0入0汤圆

发表于 2014-8-25 15:50:59 | 显示全部楼层
lz飞币都2w了……可以搞塔式开发版了,离ipad也不远了……

出0入0汤圆

 楼主| 发表于 2014-8-25 15:54:16 | 显示全部楼层
javabean 发表于 2014-8-25 15:50
lz飞币都2w了……可以搞塔式开发版了,离ipad也不远了……

放心,那些礼品都是你们的,我不会和你们抢哦。
我的飞币就是标杆,不换礼品。

出0入0汤圆

发表于 2014-8-25 15:58:25 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-8-25 15:54
放心,那些礼品都是你们的,我不会和你们抢哦。
我的飞币就是标杆,不换礼品。 ...

搞个开发版,我也从MOTO用户投身飞思卡尔~

出0入0汤圆

 楼主| 发表于 2014-8-25 15:59:22 | 显示全部楼层
javabean 发表于 2014-8-25 15:58
搞个开发版,我也从MOTO用户投身飞思卡尔~

开发板,FRDM-KE02你够了。

出0入0汤圆

发表于 2014-8-25 19:34:31 | 显示全部楼层
wangpengcheng 发表于 2014-8-22 17:52
这个倒是可以,比如将公司信息、硬件版本、软件版本等写到里面,将来维护的时候还是很方便! ...

维护还好,但是产品升级就不适用了,版本信息都改不了了

出0入0汤圆

发表于 2014-8-25 20:21:19 | 显示全部楼层
chenguanghua 发表于 2014-8-25 19:34
维护还好,但是产品升级就不适用了,版本信息都改不了了

那你可以写些别的东西啊!反正是有用的,呵呵!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-30 10:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表