您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]关于BF537访问NorFlash的问题
本帖共有513个阅读者
发表帖子 发表投票 回复主题
[求助]关于BF537访问NorFlash的问题
superzmytech(论坛新手)
superzmytech
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:146
积分:8
注册时间:2016/6/23
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]关于BF537访问NorFlash的问题
Flash: S29GL064N90FFI01
硬件连接:16位模式,nAMS0和nAMS1经过“与门”选通Flash,同时nAMS0连接至A19,寻址空间为0x2000 0000-0x201F FFFF;另外使用2个GPIO连接A20和A21,用于选通当前访问的2MByte。
初始化:CCLK=500MHz,SCLK=125MHz
    *pEBIU_AMBCTL0 = 0x7BB07BB0;
    *pEBIU_AMBCTL1 = 0x7BB07BB0;
    *pEBIU_AMGCTL = 0x00FF;
底层驱动:使用Spansion官网的lld_S29GLxxxN.c
问题:
1. 读取DeviceID不稳定,大多数情况为0x007e0c01,是正确的,偶尔为0x00ff22ff;
2. 整片擦除过程,ToggleBit的状态定时出现DEV_SUSPEND状态,发现是定时器中断的影响,关掉中断之后起初貌似正常,但是还偶尔遇到过第一次查询就出现DEV_SUSPEND的现象,修改驱动程序,当出现该现象时仍处于循环等待状态,则擦除过程是正确的;
3. 向Flash循环写入数据,当地址偏移量为0x0010 0000时(即nAMS0和nAMS1的边界),提示校验错误(出现DEVICE_NOT_BUSY状态,然后读取数据进行比较)。
本段代码如下, 使用测试方式一时异常,只有Bank0和Bank2的前半部分可以写入;测试方式二时4个Bank都可写入。
for (j=0; j<4; j++)
{
    SelNorFlashBank(j);
    DelayMS(1);
    for (i=0; i<FLASH_BYTE_NUM; i+=2)
    {
      #if (1) // 测试方式一
        mask_int = cli();
        status = lld_ProgramOp(base_addr, i, tdata[j]);
        sti(mask_int);
        if (status != DEV_NOT_BUSY)
        {
            error |= 2;
            printf("Error! Status = %d\n", status);
            break;
        }
      #else  // 测试方式二
        mask_int = cli();
        lld_ProgramCmd(base_addr, i, &tdata[j]);
        sti(mask_int);
        while (1)
        {
            status = lld_StatusGet(base_addr, i);
            if (status == DEV_NOT_BUSY)
            {
                break;
            }
        }
      #endif
        readbuf[j][i/2] = lld_ReadOp(base_addr, i);
    }
}
请帮忙分析,多谢!

如果你一切都是对的,那还需要我多说什么……
等级:论坛新手 参考IP地址:*.*.*.*
2016/6/23 16:00:55
superzmytech(论坛新手)
superzmytech
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:146
积分:8
注册时间:2016/6/23
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
自己顶一下
各路神仙多多指导啊

如果你一切都是对的,那还需要我多说什么……
等级:论坛新手 参考IP地址:*.*.*.*
2016/6/24 10:08:41
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
把时序配慢点,系统时钟降低点,7bb0都改为ffv0,在一些命令操作前后,加一些延时函数。
测量一下一兆时,相关信号线的波形,看对不对。不正常就在你的与门两端加上拉。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2016/6/28 21:48:54
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159986 Call, 1 Queries, Processed in 0.015625 second(s),