打印
[电路设计]

关于读写DATAFLASH的问题

[复制链接]
4188|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
crestxa|  楼主 | 2011-5-13 23:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在例程中,使用
void DataFlashTest(void)
{
  /* Read Data Flash base address 0x0001F000*/
     uint16_t u16Temp;
  u32DataFlashBase = DrvFMC_ReadDataFlashBaseAddr();
     printf("  Data Flash Base Address .................... [0x%08x]\n", u32DataFlashBase);
        printf("  Erase Data Flash ........................... ");
  EraseDataFlash();     
        printf("  Program Data Flash ......................... \n\n");
   i=257;
   SetTempOffset(i);
   u16Temp=GetTempOffset();
   printf(" into addr [0x%08x],Read out Data is .. [0x%08x]\n", FlashTempOffsetAddr,u16Temp);
   i=258;
   SetTempOffset(i);
   u16Temp=GetTempOffset();
   printf(" into addr [0x%08x],Read out Data is .. [0x%08x]\n", FlashTempOffsetAddr,u16Temp);
   i=0x1101;
   SetTempOffset(i);
   u16Temp=GetTempOffset();
   printf(" into addr [0x%08x],Read out Data is .. [0x%08x]\n", FlashTempOffsetAddr,u16Temp);
   i=0xFF;
   SetTempOffset(i);
   u16Temp=GetTempOffset();
   printf(" into addr [0x%08x],Read out Data is .. [0x%08x]\n", FlashTempOffsetAddr,u16Temp);
}
其中
void SetTempOffset(uint16_t TempOffset)
{
uint32_t u32TempOffset;
        u32TempOffset=(uint32_t)TempOffset;
        UNLOCKREG();
        DrvFMC_EnableISP();
        DrvFMC_Write(FlashTempOffsetAddr,u32TempOffset);
        printf("Write Data [0x%08x]",u32TempOffset);
        LOCKREG();
        DrvFMC_DisableISP();
}
uint16_t GetTempOffset(void)
{

uint32_t u32TempOffset;
        UNLOCKREG();
        DrvFMC_EnableISP();
        DrvFMC_Read(FlashTempOffsetAddr, &u32TempOffset);
        LOCKREG();
        DrvFMC_DisableISP();
        return (uint16_t)u32TempOffset;
}
发现一个问题,就是在格式化后同一个FLASH的地址的数据好像只能被改写一次,好像是写成0的再不可能被写成1了,第二次格式化后有好了,请教下大家遇到这个问题没

相关帖子

沙发
crestxa|  楼主 | 2011-5-13 23:20 | 只看该作者
[img][/img]

DATAflash.JPG (33.01 KB )

DATAflash.JPG

使用特权

评论回复
板凳
crestxa|  楼主 | 2011-5-13 23:26 | 只看该作者

这张图看的清楚点,一旦哪个位被写成0,再不能把它写成1了,如果我想再同一个地址里面存储一个变量的话,只能在格式化后改写一次?那使用起来很不方便呀

使用特权

评论回复
地板
hotpower| | 2011-5-14 00:59 | 只看该作者
烧断的熔丝是不会再接上的~~~

使用特权

评论回复
5
Swallow_0322| | 2011-5-14 07:49 | 只看该作者
本帖最后由 Swallow_0322 于 2011-5-15 07:46 编辑

但愿下面Datasheet的摘录是否对你有用!

使用特权

评论回复
6
crestxa|  楼主 | 2011-5-14 22:19 | 只看该作者
4楼的严重了,又没有加密,熔丝是安全的,后来找到了,这个是FLASH的特性,只能写0,不能写1,全部擦除后是FF,所以基本上同一个地址只能改变一次,(但是如果前面一个变量含0的位是后面一个变量含0位的一个子集,这个是可以),看来用这个存储变量,在改变变量的时候都需要把整个PAGE都擦除下,然后由RAM写入到FLASH中。
谢谢Swallow_0322,感性CCTC,MTV。。。。。。。。。。

使用特权

评论回复
7
hotpower| | 2011-5-15 01:26 | 只看该作者
哈哈,我说的熔丝不是加密熔丝,就是说的flash特性。
擦除为1编程为0。flash只能编程为0,即写0,但不能将0写为1。
这就是熔丝的特性。即可以烧断为0,但不能再接上为1。
这个特性是可以做flash二次写入的。
所谓二次写入不是两次的意思,而是某位为1时就可以再次flash写入0,反之不行。

使用特权

评论回复
8
Swallow_0322| | 2011-5-15 07:49 | 只看该作者
6# crestxa

呵呵!客气!:P
大叔讲的是革命道理,俺只能给你提供点手册的资料!(*^__^*) 嘻嘻

使用特权

评论回复
9
hotpower| | 2011-5-15 16:05 | 只看该作者
有天我和酒鬼聊过此问题,可以用此进行flash二次写入技术加密。
即先不写入程序的地址,其值为0xffffffff,再次通讯确认后还原为程序的入口地址。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

69

帖子

0

粉丝