• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

SPI协议

ljmf5 2017-02-08 浏览量:1055






上图是STM32驱动SD卡的代码段,都用到了SD_SPI_ReadWriteByte(0xFF),但是返回值好像不太一样啊,这是什么情况,没搞懂

​或者说,就单纯针对SPI协议,这里该怎么理解​

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 一个是在读等待 一个是在读数据 返回值自然不一样了具体的要看 SD卡的spi操作时序
    • 发布于 2017-02-08
    • 举报
    • 评论 2
    • 1
    • 0
ljmf5 回复了 Eagleson:读等待就是写入啥,返回啥?也就是说我写0xfe,返回的也是0xfe?下面的我改成写0xfe,返回值r1也是一样吗 回复
ljmf5 回复了 Eagleson:再看看SD的时序 回复

其他答案 数量:9
  • 这个跟SD卡的状态有关,上面那个是在等待卡是否准备好。下面的是给卡发送命令后等待卡的响应。
    • 发布于2017-02-08
    • 举报
    • 评论 1
    • 0
    • 0
ljmf5 回复了 amrogue :再看看SD的时序 回复

  • 这个和sd卡的状态有关系,一个是等待,一个是读取。
    • 发布于2017-02-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 要看SD卡SPI方式的协议
    • 发布于2017-02-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 要看SD卡SPI方式的协议
    • 发布于2017-02-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 因為你沒有放上SD_SPI_ReadWriteByte函式主體,我參考網路上的大概是這樣

    u8 SD_SPI_ReadWriteByte(u8 data)
    {
    #ifdef STM32F407
    	return SPI1_ReadWriteByte(data);
    #endif
    } 
    
    uint8_t SPI1_ReadWriteByte(uint8_t data)
    {
    #ifdef STM32F407
      SPI1->DR = data; // write data to be transmitted to the SPI data register
      while( !(SPI1->SR & SPI_I2S_FLAG_TXE) ); // wait until transmit complete
      while( !(SPI1->SR & SPI_I2S_FLAG_RXNE) ); // wait until receive complete
      while( SPI1->SR & SPI_I2S_FLAG_BSY ); // wait until SPI is not busy anymore
      return SPI1->DR; // return received data from SPI data register
    #endif
    }
    不難看出收發是都要使用到這個函數,而您的例子而言,

    SD_Wait_Ready函數只是用來釋放MOSI或者MISO,對於發送或者接收都只有一條會工作,另一條閒置,所以只要確定是釋放狀態即可

    而SD_SendCmd函數,則是要去接收Slave回傳的響應值並作分析,跟上例目的就不同,上例只有釋放/非釋放的情況

    以上供參考

    • 发布于2017-02-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 返回值必然会不同,因为SD卡的状态不同,在不同的状态机里
    • 发布于2017-02-08
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

SPI协议