[mw_shl_code=c,true]//读取SPI FLASH
//在指定地址开始读取指定长度的数据
//pBuffer:数据存储区
//ReadAddr:开始读取的地址(24bit)
//NumByteToRead:要读取的字节数(最大65535)
void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)
{
u16 i;
SPI_FLASH_CS=0; //使能器件
SPI1_ReadWriteByte(W25X_ReadData); //发送读取命令
SPI1_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24bit地址
SPI1_ReadWriteByte((u8)((ReadAddr)>>8));
SPI1_ReadWriteByte((u8)ReadAddr);
for(i=0;i<NumByteToRead;i++)
{
pBuffer=SPI1_ReadWriteByte(0XFF); //循环读数 让MOSI维持高, 写入0XFF是根据flash的原理来的: flash 的写,是 只能从1 -> 0 而不能 从0->1所以 在写1的时候,如果原来数据是0,想写入1的话,就需要擦除
}
SPI_FLASH_CS=1; //取消片选
} [/mw_shl_code]
在原子哥的SPI实验教程中,flash读取函数是这样的。
当我把:
SPI1_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24bit地址
SPI1_ReadWriteByte((u8)((ReadAddr)>>8));
这两句改为
SPI1_ReadWriteByte((u8)((ReadAddr)>>24));时,数据就无法读出。
这是因为STM32是32位的芯片,只能进行16位的移位吗?
可是在SD卡实验中,也有SD_SPI_ReadWriteByte(arg >> 24);这样的语句
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
不好意思,还是有点点不怎么清楚
为什么改成
SPI1_ReadWriteByte((u8)((ReadAddr)>>15)); //发送24bit地址
SPI1_ReadWriteByte((u8)((ReadAddr)>>9));
这样也行呢? 或者其他的14 10,也行的啊,但是17,7这样就不行啦。
一周热门 更多>