中级会员
 
- 积分
- 483
- 金钱
- 483
- 注册时间
- 2013-7-27
- 在线时间
- 4 小时
|
5金钱
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; //取消片选
}
疑问1:按照这个函数的设计,本意是,先发送地址后,然后一次读取数据。可是我仔细一想,既然地址都写入了,再往这些地址里写入 0xff , 那么读出的数据 岂不是都是 0xff ?
疑问2:用库函数操作spi确实简单,在初始化部分配置完spi后, 感觉后面的读和写函数 好像与spi的时序没有啥关系?
疑问3: 一页 到底有多大地址范围?
实在想不明白,求大侠指点,不胜感激!!!
|
最佳答案
查看完整内容[请看2#楼]
问题1: 主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输,寄存器通过MOSI信号将字节传送给从机,从机也将字节的的移位寄存器中断内容通过MISO信号返回给主机。这样,两个移位寄存器中的内容就被交换。
外设的写操作,和读操作时同步完成的。如果只进行写操作,主机只需忽略接收到的字节,反之,若主机要读取从机的一个字节,就必须发送一个 空字节来引发从 ...
|