中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

STM32 SDIO是什么

發布時間:2021-12-27 10:57:46 來源:億速云 閱讀:308 作者:小新 欄目:互聯網科技

小編給大家分享一下STM32 SDIO是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1、SDIO簡介

SDIO,全稱:Secure Digital Input and Output,即安全數字輸入輸出接口。它是在SD卡接口的基礎上發展而來,它可以兼容之前的SD卡,并可以連接SDIO接口設備,比如:藍牙、WIFI、照相機等。

SDIO和SD卡規范間的一個重要區別是增加了低速標準。低速卡的目標應用是以最小的硬件開支支持低速I/O能力。低速卡支持類似調制解調器、條碼掃描儀和GPS接收器等應用。

STM32的SDIO控制器支持多媒體卡(MMC卡)、SD存儲卡、SDI/O卡和CE-ATA設備。

SDIO框圖

 STM32 SDIO是什么

 復位后SDIO_D0用于數據傳輸。初始化后主機可以改變數據總線的寬度(通過ACMD6命令設置)

如果一個多媒體卡接到了總線上,則SDIO_D0、SDIO_D[3:0]或SDIO_D[7:0]可以用于數據傳輸。      

MMC版本V3.31和之前版本的協議只支持1位數據線,所以只能用SDIO_D0(為了通用性考慮,在程序里面我們只要檢測到是MMC卡就設置為1位總線數據)

02、SDIO特點

①與多媒體卡系統規格書版本4.2全兼容。支持三種不同的數據總線模式:1位(默認)、4位和8位。

②與較早的多媒體卡系統規格版本全兼容(向前兼容)。

③與SD存儲卡規格版本2.0全兼容。

④與SDI/O卡規格版本2.0全兼容:支持兩種不同的數據總線模式:1位(默認)和4位。

⑤完全支持CE-ATA功能(與CE-ATA數字協議版本1.1全兼容)。8位總線模式下數據傳輸速率可達48MHz。

⑥數據和命令輸出使能信號,用于控制外部雙向驅動器。

03、SDIO時鐘

卡時鐘(SDIO_CK):每個時鐘周期在命令和數據線上傳輸1位命令或數據。對于SD或SD I/O卡,時鐘頻率可以在0MHz至25MHz間變化。

SDIO適配器時鐘(SDIOCLK):該時鐘用于驅動SDIO適配器,可用于產生SDIO_CK時鐘。SDIOCLK來自PLL48CK(48Mhz)。

APB2總線接口時鐘(PCLK2):該時鐘用于驅動SDIO的APB2總線接口,其頻率為PCLK2=84Mhz。

SDIO_CK計算公式:SDIO_CK=SDIOCLK/(2+CLKDIV)

注意:在SD卡初始化時,SDIO_CK不可以超過400Khz,初始化完成后,可以設置為最大頻率(但不可以超過SD卡最大操作頻率)

04、SDIO的命令與響應

命令

SDIO的命令分為:應用相關命令(ACMD)和通用命令(CMD)兩部分。發送ACMD時,需先發送CMD55。

SDIO所有的命令和響應都是在SDIO_CMD引腳上面傳輸的,命令長度固定為48位,SDIO命令格式如下表所示:

STM32 SDIO是什么

 STM32 SDIO長響應(136位)格式如下表所示

 STM32 SDIO是什么

在收到R1響應后,我們可以從SDIO_RESPCMD寄存器和SDIO_RESP1寄存器分別讀出命令索引和卡狀態信息。關于其他響應的介紹,請大家參考光盤:《SD卡2.0協議.pdf》

05、SDIO塊數據傳輸

多數據塊讀操作

SDIO與SD卡通信一般以數據塊的形式進行傳輸,SDIO(多)數據塊讀操作,如下圖所示

STM32 SDIO是什么

 數據塊寫操作同數據塊讀操作基本類似,只是數據塊寫的時候,多了一個繁忙判斷,新的數據塊必須在SD卡非繁忙的時候發送。這里的繁忙信號由SD卡拉低SDIO_D0,以表示繁忙,SDIO硬件自動控制,不需要我們軟件處理。

注意:當SDIO_CK頻率過快時,可能導致SD卡通信失敗,此時,建議降低SDIO_CK試試。

06、代碼

STM32的SDIO控制器驅動還是很復雜的,ST提供了stm32f2x_sdio_sd.c驅動文件,我們組要修改對應的GPIO驅動即可。

/**
  * @brief  Initializes the SD Card and put it into StandBy State (Ready for 
  *         data transfer).
  * @param  None
  * @retval None
  */
void SD_LowLevel_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
 
  /* GPIOC and GPIOD Periph clock enable */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | SD_DETECT_GPIO_CLK, ENABLE);
 
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_SDIO);
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_SDIO);
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SDIO);
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SDIO);
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SDIO);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_SDIO);
 
  /* Configure PC.08, PC.09, PC.10, PC.11 pins: D0, D1, D2, D3 pins */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
 
  /* Configure PD.02 CMD line */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
 
  /* Configure PC.12 pin: CLK pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  
  /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
  /*GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);*/
 
  /* Enable the SDIO APB2 Clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE);
 
  /* Enable the DMA2 Clock */
  RCC_AHB1PeriphClockCmd(SD_SDIO_DMA_CLK, ENABLE);
}

DMA等配置使用默認的即可。

我們需要使用的函數接口有

SD_Error SD_Init(void);
SD_Error SD_Erase(uint32_t startaddr, uint32_t endaddr);
SD_Error SD_WriteBlock(uint8_t *writebuff, uint32_t WriteAddr, uint16_t BlockSize);
SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize);

以上是“STM32 SDIO是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

抚顺市| 隆林| 交城县| 蛟河市| 铁岭县| 绥德县| 安西县| 乐都县| 桐梓县| 邹平县| 洛浦县| 广饶县| 彭山县| 平南县| 宜兰市| 石楼县| 睢宁县| 合肥市| 黄浦区| 巧家县| 馆陶县| 梨树县| 卫辉市| 永安市| 奈曼旗| 大厂| 临澧县| 鄂州市| 上虞市| 乌苏市| 苍梧县| 长汀县| 马龙县| 泗洪县| 杂多县| 胶南市| 兰坪| 宁国市| 舟曲县| 和龙市| 紫云|