找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4940|回復: 0
收起左側

[零基礎學習STM32]第十三講:SDIO實驗—讀取SD卡信息

[復制鏈接]
ID:278743 發(fā)表于 2018-4-19 11:12 | 顯示全部樓層 |閱讀模式
一、概述
    1.SDIO的定義
       SDIO在SD標準上定義了一種外設接口。目前,SDIO主要有兩類應用——可移動和不可移動?梢苿釉O備作為Palm和Windows Mobile的擴展設備,用來增加藍牙、照相機、GPS和802.11b功能。不可移動設備遵循相同的電氣標準,但不要求符合物理標準。某些手機內包含通過SDIO連接CPU的802.11芯片。此舉將“珍貴”的I/ O管腳資源用于更重要的功能。
       藍牙、照相機、GPS802.11b設備有專為它們定義的應用規(guī)范。這些應用規(guī)范與為PCIUSB設備定義的類規(guī)范很相像。它們允許任何宿主設備與任意外設通話,只要它們都支持應用規(guī)范。
      SDIOSD卡規(guī)范間的一個重要區(qū)別是增加了低速標準。SDIO卡只需要SPI1SD傳輸模式。低速卡的目標應用是以最小的硬件開支支持低速I/ O能力。低速卡支持類似調制解調器、條碼掃描儀和GPS接受器等應用。對組合(存儲器+ SDIO)而言,全速和4位操作對卡內存儲器和SDIO部分都是強制要求的。
    2.SDIO的功能
       轉換設備的能力 SD標準有很大的彈性,比方說,SD插槽不僅能插入內存卡。SDIO卡是一種界面,即由使用標準SD卡插槽來擴展設備的功能,讓設備擁有新的功能。
      新功能列舉如下:GPS 相機 Wi-Fi 調頻廣播 以太網 條形碼讀卡器 藍牙; 將與SD memory card同樣的終端形狀的卡槽利用于擴張卡的規(guī)格。把對應SDIO卡槽(插口)稱為SDIO卡,擴張卡稱為SDIO卡。
      是為了在個人電腦和PDA等中添加功能而使用SD卡的規(guī)格,由于可以使用比PC卡形狀還小的卡和插槽,相比于筆記本電腦,更多采用于小巧的PDA中。主要銷售的產品有,面向PDAPHS通訊卡和藍牙通訊卡,無線網卡,小型數(shù)碼相機等。
      為了使用SDIO,必須要有對應的插槽,數(shù)碼相機memory card的專用縫兒插槽不對應SDIO卡。SDIO插槽中能夠插入SD memory card來讀寫。
      SD/SDIO MMC卡主機接口(SDIO)提供APB2外設總線與多媒體卡(MMC)、SD卡、SDIO卡以及CE-ATA設備之間的接口。
   3.SDIO具有如下主要特性:
  •      完全兼容多媒體卡系統(tǒng)規(guī)范版本4.2?ㄖС秩N不同數(shù)據(jù)總線模式:1位(默認)、4位和8位。
  •      完全兼容先前版本的多媒體卡(向前兼容性)。
  •      完全兼容SD存儲卡規(guī)范版本2.0。
  •      完全兼容SDI/O卡規(guī)范版本2.0:卡支持兩種不同數(shù)據(jù)總線模式:1位(默認)和4位。
  •      完全支持CE-ATA功能(完全符合CE-ATA數(shù)字協(xié)議版本1.1)。
  •      對于8位模式,數(shù)據(jù)傳輸高達48MHz。
  •      數(shù)據(jù)和命令輸出使能信號,控制外部雙向驅動程序。

   4.SD卡識別過程:
       多媒體卡和SD卡的卡識別過程有所不同。對于多媒體,識別過程是以時鐘速率開始。SDIO_CMD線輸出驅動器是開樓引腳,在此識別過程中允許并行的卡操作。對準過程以如下方式完成:
(1)激活總線。
(2)SDIO卡主機廣播SEND_OP_COND(CMD1)以接收運行條件。
(3)卡以其運行條件寄存器的內容進行響應。
(4)不兼容的卡將被置于無效狀態(tài)。
(5)SDIO卡主機向所有有效廣播ALL_SEND_CID(CMD2)。
(6)這些卡將發(fā)回其唯一的卡識別號(CID)并進入識別狀態(tài)。
(7)SDIO卡主機向某個地址的有效卡發(fā)出SET_RELATIVE_ADDR(CMD3)。這一新地址稱為相對卡地址(RCA);它比CID更短,可對卡進行尋址。分配的卡變?yōu)榇龣C狀態(tài)。SDIO卡主機可以重新發(fā)出此命令以更改RCA?ǖ腞CA是最后分配的值。
(8)SDIO卡主機對所有有效卡重復步驟5到7。
二、硬件電路

                  圖13_0 SD卡槽電路圖
三、實驗原理
      STM32F407上帶有SDIO控制器,iCore3核心板上將SDIO連接到TF卡座上。本實驗將Micro SD卡插入TF卡座上即可。硬件連接示意圖如下:

                 圖13_1  實驗原理圖
四、源代碼
1.     主函數(shù)
  1. /*
  2. * Name                : main
  3. * Description         : ---
  4. * Author              : ysloveivy.
  5. *
  6. * History
  7. * --------------------
  8. * Rev                 : 0.00
  9. * Date                : 12/01/2015
  10. *  
  11. * create.
  12. * --------------------
  13. */int main(void)
  14. {
  15.         int i;
  16.         led.initialize();
  17.         usart4.initialize(115200);

  18.         usart4.printf("\x0c");                        //清屏        
  19.         usart4.printf("\033[1;32;40m");             //設置字體終端為綠色
  20.         usart4.printf("\r\n\r\nhello! I am iCore3!\r\n\r\n\r\n");
  21.         //判斷SD卡是否初始化
  22.         if(SD_Init() != 0){
  23.                 usart4.printf("SD ERROR!\r\n");
  24.                 while(1){
  25.                         for(i = 0;i < 10000000;i++);
  26.                         LED_RED_ON;
  27.                         for(i = 0;i < 10000000;i++);
  28.                         LED_RED_OFF;
  29.                 }
  30.         }
  31. //輸出SD卡的類型
  32. switch(SDCardInfo.CardType){
  33.         case SDIO_STD_CAPACITY_SD_CARD_V1_1:
  34.           usart4.printf("SDCardType\t\t:SDIO_STD_CAPACITY_SD_CARD_V1_1\r\n");
  35.                         break;
  36. case SDIO_STD_CAPACITY_SD_CARD_V2_0:
  37.         usart4.printf("SDCardType\t\t:SDIO_STD_CAPACITY_SD_CARD_V2_0\r\n");
  38.                         break;
  39. case SDIO_HIGH_CAPACITY_SD_CARD:
  40.                 usart4.printf("SDCardType\t\t:SDIO_HIGH_CAPACITY_SD_CARD\r\n");
  41.                         break;
  42.         case SDIO_MULTIMEDIA_CARD:
  43.                 usart4.printf("SD CardType\t:SDIO_MULTIMEDIA_CARD\r\n");
  44.                         break;
  45.         }
  46. //輸出SD卡的參數(shù)
  47.         usart4.printf("SD CardCapacity\t\t: %dMB\r\n",(unsigned long int)(SDCardInfo.CardCapacity >> 20));
  48.         usart4.printf("SDCardBlockSize\t: %dByte\r\n",SDCardInfo.CardBlockSize);
  49. usart4.printf("SD RCA \t\t\t: %d\r\n",SDCardInfo.RCA);
  50.         usart4.printf("SDManufacturerID\t: %d\r\n",SDCardInfo.SD_cid.ManufacturerID);
  51.         while(1){
  52.                         for(i = 0;i < 10000000;i++);
  53.                         LED_GREEN_ON;
  54.                         for(i = 0;i < 10000000;i++);
  55.                         LED_GREEN_OFF;
  56.         }
  57. }
復制代碼
2.SDIO配置結構體
  1.   SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV + 2;
  2.   SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
  3.   SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
  4.   SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
  5.   SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b;
  6.   SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
  7.   SDIO_Init(&SDIO_InitStructure);
復制代碼
3.SD卡初始化程序
  1. SD_Error SD_Init(void)
  2. {
  3.   __IO SD_Error errorstatus = SD_OK;

  4. NVIC_InitTypeDef NVIC_InitStructure;

  5. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  6. // SDIO Interrupt ENABLE
  7. NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;
  8. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  9. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  10. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  11. NVIC_Init(&NVIC_InitStructure);
  12. // DMA2 STREAMx Interrupt ENABLE
  13. NVIC_InitStructure.NVIC_IRQChannel = SD_SDIO_DMA_IRQn;
  14. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  15. NVIC_Init(&NVIC_InitStructure);
  16.   /* SDIO Peripheral Low Level Init */
  17.   SD_LowLevel_Init();
  18.   SDIO_DeInit();
  19.   errorstatus = SD_PowerON();
  20.   if (errorstatus != SD_OK)
  21.   {
  22.     /*!< CMD Response TimeOut (wait for CMDSENT flag) */
  23.     return(errorstatus);
  24.   }
  25.   errorstatus = SD_InitializeCards();
  26.   if (errorstatus != SD_OK)
  27.   {
  28.     /*!< CMD Response TimeOut (wait for CMDSENT flag) */
  29.     return(errorstatus);
  30.   }
復制代碼
五、實驗現(xiàn)象
      在終端顯示屏上可以看到Micro SD卡的信息,如下圖:

               圖13_2  實驗現(xiàn)象顯示圖
六 、代碼包下載
       網盤:http://pan.baidu.com/s/1hqM787E

iCore3_12_TIMER.rar

851.49 KB, 下載次數(shù): 13, 下載積分: 黑幣 -5

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表