//读取SPI FLASH
//在指定地址开始读取指定长度的数据
//pBuffer:数据存储区
//ReadAddr:开始读取的地址(24bit)
//NumByteToRead:要读取的字节数(最大65535)
void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)
{
u16 i;
SPI_FLASH_CS=0; //使能器件
SPI2_ReadWriteByte(W25X_ReadData); //发送读取命令
SPI2_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24bit地址
SPI2_ReadWriteByte((u8)((ReadAddr)>>8));
SPI2_ReadWriteByte((u8)ReadAddr);
for(i=0;i<NumByteToRead;i++)
{
pBuffer=SPI2_ReadWriteByte(0XFF); //循环读数
}
SPI_FLASH_CS=1; //取消片选
}
以上是SPI的例程,我想问下为什么要发24bit的地址?
下面是我用SPI读写铁电的程序
//5. 读存储器内容子程序
u8 Read_FM25L_Byte(u16 addre)
{
u8 dat;
FM25L_CS_LOW();
FM25L_SPI_Byte(FM25L_READ_INST);
FM25L_SPI_Byte((addre&0xFF00)>>8);
dat=FM25L_SPI_Byte((addre&0x00FF));
dat=FM25L_SPI_Byte(0);
FM25L_CS_HIGH();
return(dat);
}
//6. 读存储器内容子程序(多字节)
u8 Read_FM25L_nByte(u16 addre,u8* buff,u16 len)
{
u8 dat=0;
u8 i=0;
FM25L_CS_LOW();
FM25L_SPI_Byte(FM25L_READ_INST);
FM25L_SPI_Byte((addre&0xFF00)>>8);
FM25L_SPI_Byte((addre&0x00FF));
for (i=0;i<len;i++)
{
buff=FM25L_SPI_Byte(0);
}
FM25L_CS_HIGH();
return(dat);
}
我想问读地址要多少位是看什么的,就是写入u16 addre?
|