发布
想向你请教一下!
我用的芯片是DSPIC30F6014,片外FLASH为SST39VF400A(4MBIT)要实现单片机读写FLASH的功能。根据FLASH的读写时序编写了读写的程序,我的考虑是先写入一组数据到FLASH中,然后读出FLASH数据,读出后做一个简单的运算(取反),然后通过UART传送到PC上显示出来,从而判断是否读写正确。问题是读写不成功时,怎么判断是写入不成功还是读出不成功???不知道大家有没有好的建议!unsigned int ReadFlash ( long inADDR ){ unsigned int value; DIR_ADDR_16L=0X0000; DIR_DATA=0XFFFF; WE=1; CE=1;
DELAYnop OE=1; ADDR_16L=inADDR&0X0FFFF; CE=0; DELAYnop OE=0; DELAYnop value=DATA; DELAYnop CE=1; OE=1; return value;}写程序:void WriteFlash (long inDATA, long inADDR) /*WE CONTROL WRITE A WORD */{ DIR_ADDR_16L=0X0000; DIR_DATA=0X0000; OE=1; CE=0; ADDR_16L=0x5555; DATA=0x00AA; WE=0; DELAYnop WE=1; ADDR_16L=0x2AAA; DATA=0x0055; WE=0; DELAYnop WE=1; ADDR_16L=0x5555; DATA=0x00A0; WE=0; DELAYnop WE=1; ADDR_16L=(inADDR&0X0FFFF); DATA=inDATA; WE=0; DELAYnop WE=1; delay(); }
不知道是我的写时序不对还是读时序不对???
是不是你自己写的代码用的是与AMD兼容的擦除指令,块大小也与AMD擦除指令相同;而IDE通过读取CFI信息表,获得的是SST原来指令的块大小,与AMD是不同的。
用户305449 2011-3-14 17:49
用户1371621 2009-11-15 17:55
用户1042794 2007-10-16 11:38
想向你请教一下!
我用的芯片是DSPIC30F6014,片外FLASH为SST39VF400A(4MBIT)
要实现单片机读写FLASH的功能。
根据FLASH的读写时序编写了读写的程序,我的考虑是先写入一组数据到FLASH中,然后读出FLASH数据,读出后做一个简单的运算(取反),然后通过UART传送到PC上显示出来,从而判断是否读写正确。
问题是读写不成功时,怎么判断是写入不成功还是读出不成功???不知道大家有没有好的建议!
unsigned int ReadFlash ( long inADDR )
{
unsigned int value;
DIR_ADDR_16L=0X0000;
DIR_DATA=0XFFFF;
WE=1;
CE=1;
DELAYnop
OE=1;
ADDR_16L=inADDR&0X0FFFF;
CE=0;
DELAYnop
OE=0;
DELAYnop
value=DATA;
DELAYnop
CE=1;
OE=1;
return value;
}
写程序:
void WriteFlash (long inDATA, long inADDR) /*WE CONTROL WRITE A WORD */
{
DIR_ADDR_16L=0X0000;
DIR_DATA=0X0000;
OE=1;
CE=0;
ADDR_16L=0x5555;
DATA=0x00AA;
WE=0;
DELAYnop
WE=1;
ADDR_16L=0x2AAA;
DATA=0x0055;
WE=0;
DELAYnop
WE=1;
ADDR_16L=0x5555;
DATA=0x00A0;
WE=0;
DELAYnop
WE=1;
ADDR_16L=(inADDR&0X0FFFF);
DATA=inDATA;
WE=0;
DELAYnop
WE=1;
delay();
}
不知道是我的写时序不对还是读时序不对???
ash_riple_768180695 2007-10-12 15:26
是不是你自己写的代码用的是与AMD兼容的擦除指令,块大小也与AMD擦除指令相同;而IDE通过读取CFI信息表,获得的是SST原来指令的块大小,与AMD是不同的。