2481|0

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

大家好。我的问题是一个关于 nor flash 操作的问题。 [复制链接]

我先描述一下我的系统:我的flash是一块128k的nor flash。cpu是51.因为51只能寻址64k所以将这个128k的flash分成两块。低64k用来存放应用程序。高64k作为数据区,存放从上位机通过串口发过来的数据,为以后升级使用。这高、低两个64k的flash通过一个DPX0的寄存器设置不同的值来切换。对这个flash的操作的函数例如:flash_read(),flash_cmd(),flash_write(),flash_program() 这些函数都放在片内的一个高速2k的sram上运行。
我现在的问题是:1、读flash使用的函数flash_read(unsigned int addr)
                                {
                                 unsigned char data temp;
                                 DPX0=0x03;   //访问高64k
                                 temp=XBYTE[addr];
                                 DPX0=0x00;   //返回低64k的程序空间
                                 return temp
                                 }    这个程序有问题吗? 按理说,这个函数在sram上运行,应该可以读取低64k的数据(DPX0=0x00时候是低64k)。可是读出来的数据总是有问题。
                2、我最终的目的是在低64k程序空间运行一段程序,这段程序的目的是接受上位机的数据,将这些上位机传来的数据,写到高64k的数据空间。在这个过程中,我要先擦写高64kflash,再写入数据。我按照flash的datasheet定义的命令序列向flash写命令用来写一个字节的数据,如下,请大家看看对不对。
         EA=0;      //关中断
        DPX0=0x03; //切换到高64k
        XBYTE[0x555]=0xAA; //第一个命令序列
        XBYTE[0x2AA]=0x55;  //第二个命令序列
        XBYTE[0x555]=0xA0;  //第三个命令序列
        XBYTE[0x000]=0x14;  //向0x000写数据0x14
        check_finish();     检测是否完成。DQ6的toggle位
        DPX0=0x00;
        EA=1;   


总而言之。我要写入数据再读出来。目的是检测写的数据对不对。但是现在的结果是不对。所以,写和读肯定有一个环节有问题。但我又没有发现问题在哪里。请高手指导。本人是个新手,请大家多包涵。
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表