查看: 4532|回复: 6

[已解决] MKE06Z128 关于片内FLASH读写问题

[复制链接]

该用户从未签到

14

主题

26

帖子

0

注册会员

Rank: 2

积分
184
最后登录
2017-12-17
发表于 2016-7-13 21:47:41 | 显示全部楼层 |阅读模式
大家好,我在用飞思卡尔官方代码调试MKE06Z128片内FLASH读写的时候,遇到几个问题1.官方的FLASH代码只有FLASH_Program(),没有读函数,所以无法知道写数据是否成功,2.我自己根据库函数的FLASH_ReadOnce(),遇到函数有不理解的地方,// Write index to specify the command code to be loaded        FTMRH->FCCOBIX = 0x0;
        // Write command code and memory address bits[17:16]       
        FTMRH->FCCOBHI = FLASH_CMD_READONCE;// command
        //FTMRH->FCCOBLO = 0;// memory address bits[17:16]
       
        FTMRH->FCCOBLO = 1;// memory address bits[17:16]
        // Write index to specify the lower byte memory address bits[15:0] to be loaded
        FTMRH->FCCOBIX = 0x1;
        // Write the phrase index
        FTMRH->FCCOBLO = 0x0;// u8PhraseIndex;       
        FTMRH->FCCOBHI = 0x0;// u8PhraseIndex >>8;
根据bits[17:16] = 1,bits[15:0] =0,读的地址应该是0x10000,我的程序如下
    FLASH_Init(BUS_CLK_HZ);
    /* Erase 99th sector */
    FLASH_EraseSector(0x10000);
    for(i=0;i<256;i++)
    {
        u8DataBuff[i] = 2;
    }
    /* write data to erased sector */
    FLASH_Program( 0x10000,&u8DataBuff[0],4 );
                for(i=0;i<256;i++)
    {
        u8DataBuff[i] = 0;
    }
u8DataBuff[8] = FLASH_ReadOnce(1,&u8DataBuff[0]);

仿真的结果是 u8DataBuff[0]到u8DataBuff[7]都是0XFF,其他的为0,不知道是写的有问题还是怎么回事,对这个FLASH读 不是很理解。我在keil5的options已经设置ROM起始地址0,size 0x8000,。FLASH读写的是0X10000,希望大神们帮忙看下问题出在哪儿?


最佳答案

时间的流逝 发表于 2016-8-17 21:06 你好!我在写FLASH时,感觉到写几次FLASH之后数据就写不进去了?读写次数怎么这么少,我直接调用FLASH_Pr ... Flash的寿命,最小10K, 典型值是100K。 你操作次数超过了吗? 另外 ...
回复

使用道具 举报

该用户从未签到

6

主题

47

帖子

0

注册会员

Rank: 2

积分
105
最后登录
2018-5-22
发表于 2016-7-14 10:20:55 | 显示全部楼层
有图吗
回复

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24891
最后登录
2025-7-21
发表于 2016-7-14 10:35:36 | 显示全部楼层
楼主你好!
不是用readonce,如果只是想看flash地址的数据,例程中已经有了:
printf("0x%x,",*((uint8_t *)(i*16+ch+VERIFIED_SECTOR*FLASH_SECTOR_SIZE)));
直接读地址*((uint8_t *)(0X1000)) 就可以了。
回复 支持 反对

使用道具 举报

该用户从未签到

14

主题

26

帖子

0

注册会员

Rank: 2

积分
184
最后登录
2017-12-17
 楼主| 发表于 2016-8-17 21:06:26 | 显示全部楼层
小恩GG 发表于 2016-7-14 10:35
楼主你好!
不是用readonce,如果只是想看flash地址的数据,例程中已经有了:
printf("0x%x,",*((uint8_t * ...

你好!我在写FLASH时,感觉到写几次FLASH之后数据就写不进去了?读写次数怎么这么少,我直接调用FLASH_Program(0x8000,&u8DataBuff[0],1);,需不需要加什么保护之类的?
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24891
最后登录
2025-7-21
发表于 2016-8-18 09:12:03 | 显示全部楼层
时间的流逝 发表于 2016-8-17 21:06
你好!我在写FLASH时,感觉到写几次FLASH之后数据就写不进去了?读写次数怎么这么少,我直接调用FLASH_Pr ...

Flash的寿命,最小10K, 典型值是100K。
你操作次数超过了吗?
另外,你写之前,需要先擦除。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2021-12-3 15:40
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    2

    主题

    13

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    418
    最后登录
    2021-12-3
    发表于 2019-1-22 23:22:17 | 显示全部楼层
    小恩GG 发表于 2016-7-14 10:35
    楼主你好!
    不是用readonce,如果只是想看flash地址的数据,例程中已经有了:
    printf("0x%x,",*((uint8_t * ...

    楼主你好!
    用的片子是KEA28,操作Flash前已关闭全局中断,并把操作Falsh的代码都搬到RAM中运行了,单步仿真FLASH_EraseSector()和FLASH_Program()可以把数据正确写入Falsh相应地址中,全速运行时程序跑飞进入default_isr(),请问还有哪些注意事项和解决方法?
    继续加油哦
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24891
    最后登录
    2025-7-21
    发表于 2019-1-23 09:35:48 | 显示全部楼层
    zhy233090130 发表于 2019-1-22 23:22
    楼主你好!
    用的片子是KEA28,操作Flash前已关闭全局中断,并把操作Falsh的代码都搬到RAM中运行了,单步 ...

    建议从新建贴提问吧,进入default_isr()表明中断向量和函数没有匹配,你检查一下代码
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 20:22 , Processed in 0.103284 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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