打印

关于SPI的数据帧16bit+低位先行

[复制链接]
447|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
无幻|  楼主 | 2020-4-24 07:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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了。
搞不懂低位先行怎么改,求指教。

使用特权

评论回复

相关帖子

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

本版积分规则

431

主题

436

帖子

0

粉丝