掌握 SD 卡协议原理,用 STM32F103 完成对 SD 卡的数据读取(FAT文件模式)。

目录

  • 一、SD 卡协议
    • 1. SD 卡
      • 概述
    • 2. SD 卡总线
      • 协议
      • 命令
      • 响应
    • 3.STM32 的 SDIO 功能
  • 二 、SD 卡的数据读取(工程、代码)
    • 1. 创建项目
    • 2.代码文件
  • 三、SD卡数据读取(电路,实现)
    • 1.电路连接
    • 2. 注意事项
    • 3.结果展示
  • 四、总结

一、SD 卡协议

1. SD 卡

SD存储卡是一种基于半导体快闪记忆器的新一代记忆设备,由于它体积小、数据传输速度快、可热插拔等优良的特性,被广泛地于便携式装置上使用,例如数码相机、平板电脑和多媒体播放器等。

概述

SD存储卡(Secure Digital Memory Card)是一种基于半导体快闪存储器的新一代高速存储设备。SD存储卡的技术是从MMC卡(MultiMedia Card格式上发展而来,在兼容SD存储卡基础上发展了SDIO(SD Input/ Output)卡,此兼容性包括机械,电子,电力,信号和软件,通常将SD、SDIO卡俗称SD存储卡。
SD卡具有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性,它被广泛地应用于便携式装置上,例如数码相机、平板电脑和多媒体播放器等。
SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,所以有着广泛的应用领域。音乐、电影等多媒体文件都可以方便地保存到SD卡中。目前市场上SD卡的品牌很多诸如:SANDISK、Kingmax、Panasonic和Kingston。
SD卡作为一种新型的存储设备,具有以下特点:
**●高存储容量:**最常用的容量:8GB、16GB、32GB、128GB、256GB等。
**●内置加密技术:**适应基于SDMI协议的著作版权保护功能。
**●高速数据传送:**最大读写速率为100MB/s。
**●体积轻小:**便于携带,具有很强的抗冲击能力。

  • SDIO 全称是安全数字输入/输出接口,多媒体卡(MMC)、SD 卡、SD I/O 卡都有 SDIO 接口。
  • STM32F10x 系列控制器有一个 SDIO 主机接口,它可以与 MMC 卡、SD 卡、SD I/O 卡以及CE-ATA 设备进行数据传输。MMC 卡可以说是 SD 卡的前身,现阶段已经用得很少。
  • SD I/O 卡本身不是用于存储的卡,它是指利用 SDIO 传输协议的一种外设。比如 Wi-Fi Card,它主要是提供 Wi-Fi 功能,有些 Wi-Fi 模块是使用串口或者 SPI 接口进行通信的,但 Wi-Fi SDIO Card 是使用 SDIO 接口进行通信的。并且一般设计 SD I/O 卡是可以插入到 SD 的插槽。
  • CE-ATA 是专为轻薄笔记本硬盘设计的硬盘高速通讯接口。

2. SD 卡总线

SD 卡一般都支持 SDIO 和 SPI 这两种接口。
STM32F42x 系列控制器的 SDIO 是不支持 SPI 通信模式的,如果需要用到 SPI 通信只能使用 SPI 外设。
具体的 SPI 通信方式可以参看我之前的博客:基于 SPI 协议用 0.96 寸 OLED 显示汉字及温湿度数据
SD 卡使用 9-pin 接口通信,其中 3 根电源线、1 根时钟线、1 根命令线和 4 根数据线。

SDIO 的通信时序要简单许多,SDIO 不管是从主机控制器向 SD 卡传输,还是 SD 卡向主机控制器传输都只以 CLK 时钟线的上升沿为有效。

协议

通讯由一个起始位(“0”),由一个停止位(“1”)终止。SD 通信一般是主机发送一个命令(Command),从设备在接收到命令后作出响应(Response),如有需要会有数据(Data)传输参与。
SD 总线的基本交互是命令与响应交互。
SD 数据是以块(Black)形式传输的,SDHC 卡数据块长度一般为 512 字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要 CRC 位来保证数据传输成功。CRC 位由 SD 卡系统硬件生成。STM32 控制器可以控制使用单线或 4 线传输。
主机向 SD 卡写入数据块操作示意如下:

命令

SD 命令由***主机***发出,以广播命令和寻址命令为例,广播命令是针对与 SD 主机总线连接的所有从设备发送的,寻址命令是指定某个地址设备进行命令传输。
SD 命令格式固定为 48bit,都是通过 CMD 线连续传输的(数据线不参与)

响应

响应由*** SD 卡向主机***发出,部分命令要求 SD 卡作出响应,这些响应多用于反馈 SD 卡的状态。
SDIO 总共有 7 个响应类型(代号:R1~R7),其中 SD 卡没有 R4、R5 类型响应。特定的命令对应有特定的响应类型,比如当主机发送 CMD3 命令时,可以得到响应 R6。与命令一样,SD 卡的响应也是通过 CMD 线连续传输的。根据响应内容大小可以分为短响应和长响应。短响应是 48bit 长度,只有 R2 类型是长响应,其长度为 136bit。

3.STM32 的 SDIO 功能

STM32 控制器有一个 SDIO,由两部分组成:SDIO 适配器和 AHB 接口。

  • SDIO 适配器提供 SDIO 主机功能,可以提供 SD 时钟、发送命令和进行数据传输。
  • AHB 接口用于控制器访问 SDIO 适配器寄存器并且可以产生中断和 DMA 请求信号

二 、SD 卡的数据读取(工程、代码)

1. 创建项目

其实直接打开压缩文件的工程,然后生成代码就行了
(下面还是加了几张工程截图)




配置 PA4 引脚为 GPIO_Output,并命名为 SD_CS

2.代码文件

代码网盘链接
**提取码:e63q **

修改main.c 中 while循环

while (1){WritetoSD(WriteBuffer,sizeof(WriteBuffer));        HAL_Delay(500);/*WriteBuffer[0] = WriteBuffer[0] +10;WriteBuffer[1] = WriteBuffer[1] +10;*/write_cnt ++;while(write_cnt > 0){  printf(" while \r\n");HAL_Delay(500);}

三、SD卡数据读取(电路,实现)

1.电路连接

STM32F103C8T6 SD卡
PA4 CS
PA5 SCK
PA6 MISO
PA7 MOSI

按如图所示找到对应引脚进行连接

2. 注意事项

在读卡前先格式化一下选择FAT模式

不要在运行过程中拔卡
否者会失败

  • 注意:
    SD 卡操作需要时间,得等一会,如果串口一直没有回应,可以试试以下操作:
    可以将SD卡换成内存小点的 4G/8G
    将最小核心板连接 5V,为其供给高电压
    尽量减少连线,或者使用短线连接

3.结果展示

编译烧录后,打开串口调试助手,可以看到:

然后会显示while

此时将SD卡从芯片中拔出,插入U盘,在电脑中可以看见有一个txt文件,打开可以看见。

四、总结

这次实验不是很好做,虽然能够成功烧录,但是实验效果不容易出来,串口调试助手一直没显示,多尝试一下,看看有没有线没有连稳,或者芯片接触 不良。有时候是串口反应较慢,耐心等待一会或许会有结果读出。

嵌入式系统作业12(SD卡读取)相关推荐

  1. ubuntu14.04系统下对SD卡分区

    在ubuntu14.04系统下对SD卡进行分区分为3步: 注意:进行SD卡分区时,用户操作权限为root权限! (1) umount SD卡 查看SD卡挂载目录,一般在/media目录下: sudo ...

  2. jeston TX1/TX2 系统迁移至SD卡的正确步骤

    如果是刚刚开始Nvidia jeston TX1/TX2 开发的初学者,希望本文可以帮助节省时间.首先上张图,完成配置后的 jeston TX1.载板使用的是作者自己设计的EdgeBox_EHub_t ...

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

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

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

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

  5. sd卡 升级 linux,升级树莓派archlinux系统到新sd卡

    由于之前把树莓派系统安装在4gb的sd卡上,随着系统的更新及安装了一大堆软件包之后,系统提示空间不足了.网上搜索了下,把所有数据迁移到新的sd卡上还是比较简单的. 克隆sd卡: 1,关闭树莓派电源,取 ...

  6. 【nano系列】jetson nano 迁移系统、制作SD卡启动扩展内存(二)

    本文继上文刷机到EMMC内存后,为扩展内存空间,迁移系统到Micro SD卡并制作SD卡启动 我的SD卡在nano中显示的名称为 /dev/sda1 ,不同于其他文章 的 /dev/mmcblk1p1 ...

  7. sd卡linux错误检测,android系统正在准备SD卡正在检测是否有错误且SD卡无法读取解决办法...

    手机android系统,也许您会碰到这样的情况. 错误提示:正在准备SD卡 正在检测是否有错误.这时sd卡(即内存卡)不能正常使用,不管手机自带的程序,还是通过usb口连接到电脑都无法识别sd卡. 这 ...

  8. lwip-2.1.3自带的httpd网页服务器使用教程(一)从SD卡读取网页文件并显示

    概述 本教程使用的单片机是STM32F103ZE,有线网口芯片为ENC28J60. 本教程里面的网页由于需要兼容Windows XP系统的IE8浏览器,所以采用HTML 4.01编写,不使用任何前端框 ...

  9. 把android系统装到sd卡,在Android系统中将软件安装在SD卡的方法

    这样就可以装上更多自己喜欢的软件了. 在Android手机刚面世的时候,系统版本1.5至后来的2.1都不支持把程序装到SD卡上,由于系统内置的空间较小,装不了太多软件,于是人们 想出App2SD的概念 ...

  10. ubutntu 使用tftp_TI 816X开发板直接从SD卡读取内核到内存中和通过TFTP下载到内存中区别...

    用的是TI的 816X开发板,现在碰到一个问题,想不明白,请教各位. 我的开发环境是在vmware下安装的ubuntu10.04,通过网线连接到开发板的网口(J10),主机IP为192.168.0.1 ...

最新文章

  1. 面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?
  2. vs2015改程序名字
  3. python序列类型-Python之序列类型方法
  4. 外企面试官们爱提的十个问题
  5. 互换性与技术测量电子版_181套建设工程全套资料表格,从开工到完工,完整电子版手慢无...
  6. xmanager linux,教您用xmanager启动Linux上的图形界面程序-Go语言中文社区
  7. 如何在Pandas中使用Excel文件
  8. 每个产品经理都应该知道的机器学习术语
  9. Linux容器能否弥补IoT的安全短板?
  10. 数据库名、实例名和ORACLE_SID的区别
  11. aspen和python一起使用_python-将$cond语句与$project一起使用并在PyMongo中聚合
  12. Map,List,Queue,Set和Stack的区别
  13. Quartz.NET WinFrom 关闭程序后无法结束进程
  14. ssh无密码登录设置方法以及出现问题 ECDSA host key 和IP地址对应的key不同的解决...
  15. Referenced file contains errors
  16. 我去,还有这种网站!
  17. 两个ViewControllerScene互相show,全局变量失效?简直就是zuo!
  18. 掌财社:一边亏钱一边被骂,爱奇艺需要出路
  19. 【云原生】第二篇--容器管理工具 Docker生态架构及部署
  20. 苹果cms伪静态常见几种问题解决教程

热门文章

  1. 智能门锁主要有哪些优势,具体是怎么分类的?
  2. php alert弹出框位置,jQuery_基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果),原理很简单: 获取当前屏幕( - phpStudy...
  3. 51单片机循迹小车工作原理与程序设计思路
  4. 带SN切换流程_一文详解贴片电阻生产工艺流程(15个步骤)
  5. pde中微元分析法的主要思想_有限元法(FEM)
  6. 小米线刷工具 MiFlash 提示长度不能小于 0 参数名 length,无法读取设备解决方法
  7. Java 小游戏(骑士大战魔王)
  8. 计算机多媒体技术广泛应用于各个领域,计算机多媒体技术的现状及发展前景
  9. 数字信号处理实验三用fft对信号作频谱分析_矢量信号分析
  10. 安卓 MediaRecorder 音频录制效果很差 模糊解决