#define CHECK_ID_INSTR 0x5A9F // 00 是一个Dummy信号
#define DUMMY 0x5A5A
static uint16_t SPI_Send_2_Byte(uint16_t data)
{
uint16_t Timer = 0x1FFF;
while( SPI_I2S_GetFlagStatus(FLASH_SPI, SPI_I2S_FLAG_TXE) != SET)
{
if(Timer-- == 0)
{
SPI_ERROR("Wait For TXE Out Time ERROR_1");
return _FAILURE;
}
}
SPI_I2S_SendData(FLASH_SPI, data);
Timer = 0x1FFF;
while( SPI_I2S_GetFlagStatus(FLASH_SPI, SPI_I2S_FLAG_RXNE) != SET )
{
if(Timer-- == 0)
{
SPI_ERROR("Wait For RXNE Out Time ERROR_2");
return _FAILURE;
}
}
return SPI_I2S_ReceiveData(FLASH_SPI);
}
uint32_t SPI_CheckFlashID(void)
{
uint32_t ID;
SPI_CS_RESET;
ID = SPI_Send_2_Byte(CHECK_ID_INSTR);
ID &= 0xFF00;
ID <<= 16;
ID |= SPI_Send_2_Byte(DUMMY);
SPI_CS_SET;
return ID;
}
这样输出的FALSH_ID不对,但是我把它改成高位先行,然后还改了一下CHECK_ID_INSTR为0x9F5A,和SPI_CheckFlashID(void)函数里面的ID &= 0xFF00改为ID&=0x00FF;就可以成功的读取到falsh的id了。
搞不懂低位先行怎么改,求指教。 |