打印
[Cortex-M0技术交流]

Nano 130 dataflash 遇到的问题

[复制链接]
4289|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
M0的菜鸟,在研究FMC  dataflash,目的想把0x55放到0x1f000的位置,把0xaa放到0x1f100的位置。问题是执行
FMC_Write(0x1f000, 0x55);再执行FMC_Write(0x1f100, 0xAA);然后FMC_Read(0x1f000, &u32Data);此时是u32Data=0xAA.
按道理说0x55才对。不知道问题到底出现在哪里请大师指点迷冿。

到代码如下:
******************************************************************************/
#include <stdio.h>
#include "nano1xx.h"
#include "nano1xx_fmc.h"
void delay_ms(uint32_t count);
/*---------------------------------------------------------------------------------------------------------*/
/*  Main Function                                                          */
/*---------------------------------------------------------------------------------------------------------*/
int32_t main (void)
{
int32_t   i32Err=0;
uint32_t   u32Data;
uint32_t    u32Data0;
   // uint32_t  apBase, apLimit;
   /// uint32_t  config0Bak, config1Bak;
   
    printf("+------------------------------------------------------+\n");
    printf("|       NANO1xx FMC Driver Sample Code for LDROM       |\n");
    printf("+------------------------------------------------------+\n");
UNLOCKREG();
/* Enable FMC ISP function */
FMC_Init();
    /* Read BS */
    printf("  Boot Mode .......................... ");
    if (FMC_GetBootSelect() == E_FMC_APROM)
    {
        printf("[APROM]\n");     
        printf("  WARNING: This code should be in LD mode but it is in AP mode now.\n");
        while(1);
    }
    else
        printf("[LDROM]\n");

/* Read Data Flash base address */
u32Data = FMC_ReadDataFlashBaseAddr();
printf("  Data Flash Base Address ............ [0x%08x]\n", u32Data);
   
       FMC_Erase(0x1f000);
      delay_ms(10);
     FMC_Read(0x1f000, &u32Data);
        FMC_Write(0x1f000, 0x55);
      delay_ms(10);
      FMC_Read(0x1f100, &u32Data0);
     FMC_Write(0x1f100, 0xAA);
      delay_ms(10);
     FMC_Read(0x1f000, &u32Data);
    if(u32Data == 0x55)
    {
     printf("  Data Flash Base Address ............ [0x%08x]\n", u32Data);
     i32Err=FMC_Read(0x1f100, &u32Data0);
     if(i32Err==0)
       printf("  Data Flash Base Address ............ [0x%08x]\n", u32Data0);
     while(1);
    }
   
}

/*************************************************************************************
** Function name:       delay_ms
** Descriptions:        1ms(晶振为12MHZ)延时子程序
** input parameters:    count
** output parameters:   无
** Returned value:      无
*************************************************************************************/
void delay_ms(uint32_t count)
{
    uint32_t i,j;
for(i=count;i>0;i--)
    for(j=2395;j>0;j--);
}

QQ图片20130601000350.jpg (48.85 KB )

QQ图片20130601000350.jpg

相关帖子

沙发
wangch_sh| | 2013-6-1 22:40 | 只看该作者
ISPCON需要设置LDUEN位。

使用特权

评论回复
板凳
缥缈九哥| | 2013-6-2 11:16 | 只看该作者
ISP模块的时钟和ISP机制功能没有打开吧?

使用特权

评论回复
地板
yytpy2008|  楼主 | 2013-6-2 15:29 | 只看该作者
原因找到了,APROM如果dataflash的基地址设为0x1F000就越界了,APROM的上限地址是:0x1EBFF。谢谢各位。

使用特权

评论回复
5
缥缈九哥| | 2013-6-2 23:00 | 只看该作者
你的NANO130那一个?能配置DATAFLASH首地址?

使用特权

评论回复
6
yytpy2008|  楼主 | 2013-6-3 23:09 | 只看该作者
九哥,我用的是NANO130KE3BN,就是用的你的做的Nutiny-EVB-Nano130板子,新唐送的.ke yi peizhi

使用特权

评论回复
7
缥缈九哥| | 2013-6-5 10:09 | 只看该作者
不知道 你说什么。

使用特权

评论回复
8
sarahyoo| | 2014-3-4 15:01 | 只看该作者
缥缈九哥 发表于 2013-6-2 23:00
你的NANO130那一个?能配置DATAFLASH首地址?

同问,一直改不过来,不知道是什么问题

使用特权

评论回复
9
sarahyoo| | 2014-3-4 15:18 | 只看该作者
lz,你不会是没有配置起始地址,直接使能FMC_ISPCON_APUEN,然后就直接写数据了吧?
我的起始地址不知道怎么改,请指点啊,寄存器读出的起始地址一直是0xffffffff

使用特权

评论回复
10
sarahyoo| | 2014-3-4 15:32 | 只看该作者
我的dataflash可以了,设置成功了,原来自己写config0的时候数据弄错了,重新检查后可以了;
在配置config0时如果最低2bit分别为10b,即使不用把dataflash enable勾上也是可以滴,或者直接把dataflash enable勾上,代码都省了

使用特权

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

本版积分规则

16

主题

75

帖子

1

粉丝