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