AT45DB161读写请教
各位DX请帮小弟看看,我用AT45DB161B做flash的时候,发现读状态的时候读出来的是0XAC是队的,但是在读写页的时候,发现我读的数据是我写进去的数据循环移了一位后的数,比如说我写进去的是0x33读出来的却是0x66,读flash我用的是直接读主存页函数,写的时候是先写到缓冲区一再到页的方法,那位能帮忙看看啊
读写程序如下
void readFlash(u16 page_addr, u16 page_offset, u8 *ram_add, u16 len)
{
u8 i;
Disable45db161();
// gsb_CS = 0 ; writeByte_SPI(0xD2) ;
writeByte_SPI((u8)(page_addr> > 6)) ;// 页地址PA11-PA6
writeByte_SPI((u8)((page_addr < <2)|(page_offset> > 8))) ;
// 页内偏移BA9-BA8
writeByte_SPI((u8)(page_offset)) ;// 页内偏移BA7-BA0
writeByte_SPI(0x00) ;
writeByte_SPI(0x00) ;
writeByte_SPI(0x00) ;
writeByte_SPI(0x00) ;
for(i = 0; i < len; i++)
{
*(ram_add+i) = readByte_SPI() ;// 读取接收到的
}
// Disable45db161();
Enable45db161();
// gsb_CS = 1 ;
}
void writeFlash(u8 *ram_add,u16 page_add,u16 page_offset,u16 len)
{
u16 i;
u8 dat;
// gsb_CS = 0;
Disable45db161();
writeByte_SPI(0x84);//读缓冲器1
writeByte_SPI(0x00);
writeByte_SPI((u8)(page_offset> > 8));// 页内偏移BA9-BA8
writeByte_SPI((u8)(page_offset)) ; // 页内偏移BA7-BA0
for(i=0;i <len;i++)
{
dat = ram_add[i];
writeByte_SPI(dat);
}
// gsb_CS = 1;
Enable45db161();
Disable45db161();
// gsb_CS = 0;
writeByte_SPI(0x83);//察除缓冲器1
writeByte_SPI((u8)(page_add> > 6));
writeByte_SPI((u8)((page_add < <2)+(page_offset> > 8)));
writeByte_SPI(0x00) ;
// gsb_CS = 1;
Enable45db161();
delay_DelayMs(400);
}
发表时间:2007年5月9日16:14:58