找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4899|回复: 0
收起左侧

[零基础学习STM32]第十三讲:SDIO实验—读取SD卡信息

[复制链接]
ID:278743 发表于 2018-4-19 11:12 | 显示全部楼层 |阅读模式
一、概述
    1.SDIO的定义
       SDIO在SD标准上定义了一种外设接口。目前,SDIO主要有两类应用——可移动和不可移动。可移动设备作为Palm和Windows Mobile的扩展设备,用来增加蓝牙、照相机、GPS和802.11b功能。不可移动设备遵循相同的电气标准,但不要求符合物理标准。某些手机内包含通过SDIO连接CPU的802.11芯片。此举将“珍贵”的I/ O管脚资源用于更重要的功能。
       蓝牙、照相机、GPS802.11b设备有专为它们定义的应用规范。这些应用规范与为PCIUSB设备定义的类规范很相像。它们允许任何宿主设备与任意外设通话,只要它们都支持应用规范。
      SDIOSD卡规范间的一个重要区别是增加了低速标准。SDIO卡只需要SPI1SD传输模式。低速卡的目标应用是以最小的硬件开支支持低速I/ O能力。低速卡支持类似调制解调器、条码扫描仪和GPS接受器等应用。对组合(存储器+ SDIO)而言,全速和4位操作对卡内存储器和SDIO部分都是强制要求的。
    2.SDIO的功能
       转换设备的能力 SD标准有很大的弹性,比方说,SD插槽不仅能插入内存卡。SDIO卡是一种界面,即由使用标准SD卡插槽来扩展设备的功能,让设备拥有新的功能。
      新功能列举如下:GPS 相机 Wi-Fi 调频广播 以太网 条形码读卡器 蓝牙; 将与SD memory card同样的终端形状的卡槽利用于扩张卡的规格。把对应SDIO卡槽(插口)称为SDIO卡,扩张卡称为SDIO卡。
      是为了在个人电脑和PDA等中添加功能而使用SD卡的规格,由于可以使用比PC卡形状还小的卡和插槽,相比于笔记本电脑,更多采用于小巧的PDA中。主要销售的产品有,面向PDAPHS通讯卡和蓝牙通讯卡,无线网卡,小型数码相机等。
      为了使用SDIO,必须要有对应的插槽,数码相机memory card的专用缝儿插槽不对应SDIO卡。SDIO插槽中能够插入SD memory card来读写。
      SD/SDIO MMC卡主机接口(SDIO)提供APB2外设总线与多媒体卡(MMC)、SD卡、SDIO卡以及CE-ATA设备之间的接口。
   3.SDIO具有如下主要特性:
  •      完全兼容多媒体卡系统规范版本4.2。卡支持三种不同数据总线模式:1位(默认)、4位和8位。
  •      完全兼容先前版本的多媒体卡(向前兼容性)。
  •      完全兼容SD存储卡规范版本2.0。
  •      完全兼容SDI/O卡规范版本2.0:卡支持两种不同数据总线模式:1位(默认)和4位。
  •      完全支持CE-ATA功能(完全符合CE-ATA数字协议版本1.1)。
  •      对于8位模式,数据传输高达48MHz。
  •      数据和命令输出使能信号,控制外部双向驱动程序。

   4.SD卡识别过程:
       多媒体卡和SD卡的卡识别过程有所不同。对于多媒体,识别过程是以时钟速率开始。SDIO_CMD线输出驱动器是开楼引脚,在此识别过程中允许并行的卡操作。对准过程以如下方式完成:
(1)激活总线。
(2)SDIO卡主机广播SEND_OP_COND(CMD1)以接收运行条件。
(3)卡以其运行条件寄存器的内容进行响应。
(4)不兼容的卡将被置于无效状态。
(5)SDIO卡主机向所有有效广播ALL_SEND_CID(CMD2)。
(6)这些卡将发回其唯一的卡识别号(CID)并进入识别状态。
(7)SDIO卡主机向某个地址的有效卡发出SET_RELATIVE_ADDR(CMD3)。这一新地址称为相对卡地址(RCA);它比CID更短,可对卡进行寻址。分配的卡变为待机状态。SDIO卡主机可以重新发出此命令以更改RCA。卡的RCA是最后分配的值。
(8)SDIO卡主机对所有有效卡重复步骤5到7。
二、硬件电路

                  图13_0 SD卡槽电路图
三、实验原理
      STM32F407上带有SDIO控制器,iCore3核心板上将SDIO连接到TF卡座上。本实验将Micro SD卡插入TF卡座上即可。硬件连接示意图如下:

                 图13_1  实验原理图
四、源代码
1.     主函数
  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卡的参数
  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.   }
复制代码
五、实验现象
      在终端显示屏上可以看到Micro SD卡的信息,如下图:

               图13_2  实验现象显示图
六 、代码包下载
       网盘:http://pan.baidu.com/s/1hqM787E

iCore3_12_TIMER.rar

851.49 KB, 下载次数: 13, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表