初中生
最后登录1970-1-1
在线时间 小时
注册时间2015-12-22
|
这是野火教程SPI_FLASH 中读写一个字节的原程序
u8 SPI_FLASH_SendByte(u8 byte)
{
/* Loop while DR register in not emplty */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
/* Send byte through the SPI1 peripheral */
SPI_I2S_SendData(SPI1, byte);
/* Wait to receive a byte */
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
/* Return the byte read from the SPI bus */
return SPI_I2S_ReceiveData(SPI1);
}
我的想法:然后Flash就忽略DIO线,通过DO线把ID输送给主机;既然忽略,那我干嘛还要发送一个Dummy字节数据干嘛,主机能直接受数据吗?
将发送和接受分开写。
void SPI_FLASH_SendByte( u8 byte)
{
/*Loop while DR Register in not empty----when DR_Send buffer is empty,data will be sended*/
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)== RESET);
/*Send data through the peripher*/
SPI_I2S_SendData(SPI1,byte);
}
/**
* @brief Receive byte from the FLASH .
* @param None
* @retval None
*/
u8 SPI_FLASH_ReceiveByte(void)
{
/*Loop while DR Register in empty ------when DR_Receive buffer is not empty,data will be receive*/
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)== RESET);
/*Return the byte read from SPI bus*/
return SPI_I2S_ReceiveData(SPI1);
}
那木其他程序作出相应的修改;
例如读取W25X16 DeviceID的程序为:
/**
* @brief Read the W25Q16 DeviceID .
* @param None
* @retval None
*/
u32 SPI_FLASH_ReadDeviceID(void)
{
u32 Temp = 0;
/*Select the Flash: chip select low*/
SPI_FLASH_CS_LOW();
/*Send the ReadDeviceID instruction */
SPI_FLASH_SendByte(W25X_DeviceID);
SPI_FLASH_SendByte(Dummy);
SPI_FLASH_SendByte(Dummy);
SPI_FLASH_SendByte(Dummy);
Temp = SPI_FLASH_ReceiveByte();
/*Deselsect the FLASH: chip select high*/
SPI_FLASH_CS_HIGH();
return Temp;
}
但是我自己仿写修改的程序无法读取和接受FLASH的数据。这是为什么?
我软仿结果发现....还像主机一直循环在等待从FLASH接受数据.....
求各位大神告知真相???分析一下
|
-
然后Flash就忽略DIO线,通过DO线把ID输送给主机;既然忽略,那我干嘛还要发送一个Dummy字节数据干嘛,主机 ...
-
我失败的实验现象如下:
|