学习这里首先要了解一下SD卡基本资料:

SD卡的协议部分太多,也比较复杂,建议资料:《Simplified_Physical_Layer_Spec.pdf》其主要复杂在繁多的命令,一共有64个命令,各个命令代表什么可查资料。

关于这里大部分都是熟悉函数然后直接调用库就行,但还是需要每个函数都去读一下的,后面会有具体函数的使用实例,到时候再补充。

我们代码中一般用到的是ARM官方给的SD卡的库,但是库中存在问题,SD_Error SD_ReadBlock()缺少代码:(有标注,可直接替换)

SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize)
{SD_Error errorstatus = SD_OK;
#if defined (SD_POLLING_MODE) uint32_t count = 0, *tempbuff = (uint32_t *)readbuff;
#endifTransferError = SD_OK;TransferEnd = 0;   //传输结束标置位,在中断服务置1StopCondition = 0;  //怎么用的?SDIO->DCTRL = 0x0;if (CardType == SDIO_HIGH_CAPACITY_SD_CARD){BlockSize = 512;ReadAddr /= 512;}/*******************add,没有这一段容易卡死在DMA检测中*************************************//* Set Block Size for Card,cmd16,* 若是sdsc卡,可以用来设置块大小,* 若是sdhc卡,块大小为512字节,不受cmd16影响 */SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) BlockSize;SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN;SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;   //r1SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;SDIO_SendCommand(&SDIO_CmdInitStructure);errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN);if (SD_OK != errorstatus){return(errorstatus);}/*********************************************************************************/SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT;SDIO_DataInitStructure.SDIO_DataLength = BlockSize;SDIO_DataInitStructure.SDIO_DataBlockSize = (uint32_t) 9 << 4;SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO;SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block;SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable;SDIO_DataConfig(&SDIO_DataInitStructure);/*!< Send CMD17 READ_SINGLE_BLOCK */SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)ReadAddr;SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_READ_SINGLE_BLOCK;SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;SDIO_SendCommand(&SDIO_CmdInitStructure);errorstatus = CmdResp1Error(SD_CMD_READ_SINGLE_BLOCK);if (errorstatus != SD_OK){return(errorstatus);}#if defined (SD_POLLING_MODE)  /*!< In case of single block transfer, no need of stop transfer at all.*//*!< Polling mode */while (!(SDIO->STA &(SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR))){if (SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF) != RESET){for (count = 0; count < 8; count++){*(tempbuff + count) = SDIO_ReadData();}tempbuff += 8;}}if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET){SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT);errorstatus = SD_DATA_TIMEOUT;return(errorstatus);}else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET){SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL);errorstatus = SD_DATA_CRC_FAIL;return(errorstatus);}else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET){SDIO_ClearFlag(SDIO_FLAG_RXOVERR);errorstatus = SD_RX_OVERRUN;return(errorstatus);}else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET){SDIO_ClearFlag(SDIO_FLAG_STBITERR);errorstatus = SD_START_BIT_ERR;return(errorstatus);}while (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET){*tempbuff = SDIO_ReadData();tempbuff++;}/*!< Clear all the static flags */SDIO_ClearFlag(SDIO_STATIC_FLAGS);#elif defined (SD_DMA_MODE)SDIO_ITConfig(SDIO_IT_DATAEND, ENABLE);SDIO_DMACmd(ENABLE);SD_DMA_RxConfig((uint32_t *)readbuff, BlockSize);
#endifreturn(errorstatus);
}


STM32笔记--SDIO(SD卡读取)相关推荐

  1. 【STM32】STM32 SDIO SD卡读写测试(四)-- SD_Test之Transfer Mode阶段

    相关文章 <[SDIO]SDIO.SD卡.FatFs文件系统相关文章索引> 1.前言 本篇文章主要是介绍SD卡的读写测试,包括:SD卡擦除测试.SD卡单一块读写测试.SD卡多个块读写测试. ...

  2. STM32单片机移植SD卡FATFS文件系统

    最近看了32的sd卡和FATFS文件系统,现在就自己的理解总结一下. 一.SD卡模块 SD 卡:安全数码卡, 它是在 MMC 的基础上发展而来, 是一种基于半导体快闪记忆器的新一代记忆设备.按容量分类 ...

  3. SDIO—SD 卡读写测试

    1.SDIO 简介 SD 卡 (Secure Digital Memory Card) 在我们生活中已经非常普遍了,控制器对 SD 卡进行读写通信操作一般有两种通信接口可选,一种是 SPI 接口,另外 ...

  4. stm32 Fatfs 读写SD卡

    源:stm32 Fatfs 读写SD卡 转载于:https://www.cnblogs.com/LittleTiger/p/4864052.html

  5. java生成点阵图_Android从SD卡读取图片并显示为点阵图

    之前做一个项目的时候需要1.从SD卡读取图片转为预览图(点阵图,类似马赛克),2.保存当前预览图到特定文件夹,保存为一个txt,txt里存的是像素矩阵.3.从那个特定文件夹里读取像素矩阵,显示为预览图 ...

  6. STM32——SPI驱动SD卡

    文末有工程链接(FATFS文件系统也移植了) VCC:5V GND:GND MISO:PA6 MOSI:PA7 SCK:PA5 CS:PA4 /*外设驱动*/ /*.c*/ /*以下是SPI1口初始化 ...

  7. 【紫光同创国产FPGA教程】【第十四章】SD卡读取BMP图片显示例程

    本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(http://www.alinx.com). 1. 实验简介 在前面的实验中我们练习了SD卡读 ...

  8. 【STM32】STM32 SDIO SD卡读写测试(三)-- SD_Init之Init Card阶段

    相关文章 <[SDIO]SDIO.SD卡.FatFs文件系统相关文章索引> 1. 前言 本篇文章主要是介绍stm324x9i_eval_sdio_sd.c里面SD_Init()函数完整的过 ...

  9. 【STM32】STM32 SDIO SD卡读写测试(二)-- SD_Init之Power On阶段

    相关文章 <[SDIO]SDIO.SD卡.FatFs文件系统相关文章索引> 1. 前言 本篇文章主要是介绍stm324x9i_eval_sdio_sd.c里面SD_Init()函数完整的过 ...

最新文章

  1. 机器学习公开课~~~~mooc
  2. iOS cell 里需要创建n个元素
  3. 交换算法经常使用的两个数的值
  4. C++知识总结(1)--变量和基本类型
  5. python协成_Python协程(上)
  6. 学术英语视听说2听力原文_做英语听力题有哪些非常实用的小技巧?
  7. python 获取指定城市【昨日天气+未来15天预报天气+空气质量+气象数据】
  8. Atitit mybatis 配置 redis 集成 attilax总结 艾提拉总结 1.1. setting name=cacheEnabled v 1 1.2. Mapper文件 1 1.
  9. 华为光纤猫HG8240R设置
  10. Unity3D研究院之mac上从.ipa中提取unity3D游戏资源
  11. java swing 汽车租赁管理系统 java swing mysql实现的汽车租赁管理系统源码(1027)
  12. 七大行星排列图片_八大行星图片欣赏
  13. 亮度均匀性 matlab,亮度均匀性(Uniformity)
  14. 《菩萨蛮·隔花才歇帘纤雨》
  15. SpringBoot整合Mybatis出现的错误:At least one base package must be specified
  16. JVM源码分析之Metaspace解密
  17. Imx6ull 开发板通过Uboot使用网络启动系统
  18. 452. 用最少数量的箭引爆气球
  19. 助力高效办公,TOM企业邮箱网页版全面升级
  20. 用树莓派(等)为 USB Midi 键盘增添连接方式

热门文章

  1. PPT之幻灯片中的大纲选项卡
  2. 法律法规与标准化知识
  3. 阿里云ACP/ACE认证考试指南
  4. Lightoj 1258
  5. 如何复制360doc个人图书馆的文章?
  6. 【深度学习框架输入格式】NCHW还是NHWC?
  7. python调用大漠插件寻路_python怎么调用大漠?
  8. LTE:PHICH物理层处理过程及资源映射
  9. 大数据技术怎么学习,需要具备什么基础?简单说一下
  10. keil5 添加芯片支持包(pack)