本人新学STM32,想通过SPI对AT45DB161D进行读写,求大神指导...
想要完成最简单的功能,Flash写满第一页,再把第一页的数据读出来,可是读的时候数据全是00,请大神指点,程序如下:
#include"main.h"
intmain(void)
{
u8 Read[256];
u8 Write[256];
int i;
SPI_Flash_Init();
USART_Configuration();
for(i=0;i<256;i++)
{
Write=i;
}
FlashPageWrite(0,&Write[0]);
FlashPageRead(0,&Read[0]);
}
voidFlashPageWrite(u16 page,u8 *Data) //写一整页
{
u16 i;
FlashWaitBusy();
AT_CS_LOW();
SPI2_RWByte(BUFFER_2_WRITE); // 写入第二缓冲区
SPI2_RWByte(0x00);
SPI2_RWByte(0x00);
SPI2_RWByte(0x00);
for(i=0;i<SPI_Flash_PageSize;i++)
{
SPI2_RWByte(Data);
}
AT_CS_HIGH();
if ( page < 2048)
{
AT_CS_LOW();
SPI2_RWByte(B2MM_PAGEERASE); //将第二缓冲区数据写入主储存器,带擦除
SPI2_RWByte((u8)(page>>6));
SPI2_RWByte((u8)(page<<2));
SPI2_RWByte(0x00);
AT_CS_HIGH();
FlashWaitBusy();
}
}
voidFlashPageRead(u16 page,u8 *Data)
{
u16 i;
FlashWaitBusy();
AT_CS_LOW();
SPI2_RWByte(PAGE_READ); //页读
SPI2_RWByte((u8)(page>>6));
SPI2_RWByte((u8)(page<<2));
SPI2_RWByte(0x00);
SPI2_RWByte(0x00);
SPI2_RWByte(0x00);
SPI2_RWByte(0x00);
SPI2_RWByte(0x00);
for(i=0;i<SPI_Flash_PageSize;i++)
{
Data=SPI2_RWByte(Dummy); //读取一个字节
}
AT_CS_HIGH();
}
u8SPI2_RWByte(u8 byte)
{
while((SPI2->SR&SPI_I2S_FLAG_TXE)==RESET);
SPI2->DR = byte;
while((SPI2->SR&SPI_I2S_FLAG_RXNE)==RESET);
return(SPI2->DR);
}
小弟初来论坛,没发现还能回复积分,请问怎么设置?各位大神,求帮忙啊。
入群 157556544一起学习下
回复需要积分么?
不要啊,回复要什么积分