[应用相关]

为什么往w25q128里面读取数据就写入0xff?

[复制链接]
1208|3
手机看帖
扫描二维码
随时随地手机跟帖
stormwind123|  楼主 | 2021-6-9 15:14 | 显示全部楼层 |阅读模式
为什么往w25q128里面读取数据就写入0xff?
//读取SPI FLASH  
//在指定地址开始读取指定长度的数据
//pBuffer:数据存储
//ReadAddr:开始读取的地址(24bit)
//NumByteToRead:要读取的字节数(最大65535)
**_
```

```
void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)   
{
     u16 i;                                               
    W25QXX_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);   //循环读数  
    }
    W25QXX_CS=1;                                
}  **_

```
1. 1. * * **    SPI1_ReadWriteByte((u8)((ReadAddr)>>16));  //发送24bit地址
    这行代码里面往右移16位不是应该是0吗,为什么就变成了24位**

```
//SPI1 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
u8 SPI1_ReadWriteByte(u8 TxData)
{                     

  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}//等待发送区空  
   
    SPI_I2S_SendData(SPI1, TxData); //通过外设SPIx发送一个byte  数据
        
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){} //等待接收完一个byte  

    return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据   
            
}   
```
他为什么一定要写入0XFF,不可以是其他的值吗,还是说写什么其实都无所谓???

使用特权

评论回复
LcwSwust| | 2021-6-9 15:19 | 显示全部楼层
其手册中应该有类似的图,写数据主要是为了产生SCK时钟。
傲游截图20210609151907.jpg

使用特权

评论回复
aple0807| | 2021-6-9 16:36 | 显示全部楼层
你理解有误。读取数据时,你所用的MCU启动SPI传输的条件就是写入一个数,这个数可以是任意值,只是大多数人选择用0xff而已,并不是必须用0xff,你用0x00,0x55照样可以正常工作。

使用特权

评论回复
huarana| | 2021-6-9 19:10 | 显示全部楼层
spi可以实现写的同时读,如果你不想写的话那就随便写个命令好了。产生clk ,就读出数据了。

还是要深入理解spi的特点和用法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

288

主题

1150

帖子

1

粉丝