打印
[技术问答]

新唐nuc120,flash问题求助

[复制链接]
2448|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
北斗stone|  楼主 | 2014-5-4 13:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题是这样的,我往data flash内写入数据,刚写好,不断电能读出来,但是断电后重新读,就读到的值全是1,开发环境用的是coocox的coxIDE。用的是在线看变量的值。
沙发
北斗stone|  楼主 | 2014-5-4 14:05 | 只看该作者
写了一个:读——写——读的程序。往flash内写入数据的时候,接下来读能读出值,但是断电后,先读却读不到原值,全都是1了,为什么会出现这种情况?

使用特权

评论回复
板凳
niuyaliang| | 2014-5-5 00:06 | 只看该作者
断电读的全是1,你读的时候没有开ISP吧,看看你的程序,或者你没解锁,所以读到的都是1

使用特权

评论回复
地板
1715323619| | 2014-5-5 10:12 | 只看该作者
我的也调不出来。我的代码:
请问一下要怎么写的?
void DataFlashWrite(void)
{
  uint32_t * INT32UP;
  INT32U i;
  
  INT32UP=(INT32U*)&(sDataFlash.Flags);
  SYS_UnlockReg();//解除寄存器写保护
  _FMC_ENABLE_ISP();//使能ISP
  //刷除
  FMC_Erase(DATAFLASH_BEGIN_ADDR);//这会把整个扇区刷掉
  //写入
  for(i=0;i<sizeof(sDataFlash)/4+1;i++)
  {
    FMC_Write(DATAFLASH_BEGIN_ADDR+i*4, *INT32UP);
    INT32UP++;
  }
  _FMC_DISABLE_ISP() ;
  SYS_LockReg();
}

void DataFlashRead(void)
{
  INT32U * INT32UP;
  INT32U i;
  INT32UP=(INT32U*)&(sDataFlash.Flags);

  SYS_UnlockReg();
  _FMC_ENABLE_ISP();
  for(i=0;i<sizeof(sDataFlash)/4;i++)
  {
    (*INT32UP)=FMC_Read(DATAFLASH_BEGIN_ADDR+i*4);
    INT32UP++;
  }
  _FMC_DISABLE_ISP() ;
  SYS_LockReg();
}

使用特权

评论回复
5
niuyaliang| | 2014-5-5 14:36 | 只看该作者
1715323619 发表于 2014-5-5 10:12
我的也调不出来。我的代码:
请问一下要怎么写的?
void DataFlashWrite(void)

对着提供的例子看了看,你好像擦除的函数就不对。。。。

使用特权

评论回复
6
1715323619| | 2014-5-5 16:47 | 只看该作者
niuyaliang 发表于 2014-5-5 14:36
对着提供的例子看了看,你好像擦除的函数就不对。。。。

估计是库不一样,你能成功读写吗?参考一下~

使用特权

评论回复
7
北斗stone|  楼主 | 2014-5-6 14:28 | 只看该作者
niuyaliang 发表于 2014-5-5 00:06
断电读的全是1,你读的时候没有开ISP吧,看看你的程序,或者你没解锁,所以读到的都是1 ...

肯定已经开ISP和解锁了,不然也不可能写入的吧,会不会是开发环境的问题,我用的是COOCOX的COXIDE,还有一个问题,用开发环境的测试例程时,直接调入是能读写的,一旦删了几句GPIO的程序,立马读出全是0。。

使用特权

评论回复
8
北斗stone|  楼主 | 2014-5-7 08:59 | 只看该作者
1715323619 发表于 2014-5-5 16:47
估计是库不一样,你能成功读写吗?参考一下~

问题解决了,每次开ISP标志位的时候都要先关寄存器使能再重新开一下

使用特权

评论回复
9
ichuangj| | 2014-7-29 11:09 | 只看该作者
120的dataflash首地址是0x0001F000吗?

使用特权

评论回复
10
从小木丁丁| | 2014-7-29 22:04 | 只看该作者
北斗stone 发表于 2014-5-7 08:59
问题解决了,每次开ISP标志位的时候都要先关寄存器使能再重新开一下

学习了

使用特权

评论回复
11
北斗stone|  楼主 | 2014-8-8 14:05 | 只看该作者
其实是这样的,我用COOCOX的开发环境,调试的时候不能在读写flash附近设置断点,不然的话再运行,时钟貌似会不工作。。给大家说一声,出现类似问题方便排查原因

使用特权

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

本版积分规则

31

主题

338

帖子

6

粉丝