IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32 HAL库 实现基于SPI模式的SD卡、TF卡FATS文件系统+模拟U盘的应用笔记 -> 正文阅读

[嵌入式]STM32 HAL库 实现基于SPI模式的SD卡、TF卡FATS文件系统+模拟U盘的应用笔记

前言

????????很多单片机不带SDIO接口,所以在使用SD卡时必须使用SPI模式进行读写。

????????想做一个基于SPI的SD卡文件系统读写SD卡上的文件,再配合USB接口做一个模拟U盘。只能利用业余时间慢慢更新,也不知道能不能坚持下去。

? ? ? ? 我会把从零开始开发一个程序需要经历的过程一一的记录下来。做成一个奶妈级的单片机开发笔记。

?一、硬件简介

? 1.SD卡和MicroSD卡(TF卡)的区别

? ? ? ? 由下图可以很容易的看出TF卡只是比SD卡少了一个3脚Vss脚,其它的管脚顺序是完全一样的。MicroSD卡也叫做TF卡,为了方便描述,之后的文章中把SD卡和TF卡统称为SD卡。

? 2.工作模式

? ? ? ? SD卡有两种工作模式,SD BUS模式和SPI模式。SD BUS模式采用4个数据线和1个时钟线。而在SPI模式下,需要1个数据输出线、1个数据输入线、1个时钟线和1个片选线。

? ? ? ? 本文重点介绍SD卡的SPI工作模式,SD BUS工作模式就不做过多的阐述。

? 3.硬件电路?

? ? ? ? ?SD卡只能使用3.3V的I/O电平,SPI模式下信号线要加10-100K的上拉电阻。下图是SPI模式下的硬件连接方式。

二、编程前的准备工作

? 1.SPI端口的配置

?????????SD卡的SPI的时钟线空闲时应该为高电平,在时钟的第二边沿也就是时钟线的电平由低变高时采集数据。所以配置SPI的极性和相位时应配置成:CPOL=1,CPHA=1 。

?????????下面简单解释一下SPI的极性和相位,感觉没必要看的可以直接跳过。

? ? CPOL极性

????????先说什么是SCLK时钟的空闲时刻,其就是当SCLK在发送8个bit比特数据之前和之后的状态,于此对应的,SCLK在发送数据的时候,就是正常的工作的时候,有效active的时刻了。其英文精简解释为:Clock Polarity = IDLE state of SCK。

????????SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:

????????CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high。

????????CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low。

? ? CPHA相位

????????首先说明一点,capture strobe = latch = read = sample,都是表示数据采样,数据有效的时刻。相位,对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿。

????????CPHA=0,表示第一个边沿:

????????对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;

????????对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;

????????CPHA=1,表示第二个边沿:

????????对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;

????????对于CPOL=1,idle时候的是高电平,第二个边沿就是从低变到高,所以是上升沿;

? ? 极性和相位的组合

????????CPOL和CPHA,分别都可以是0或时1,对应的组合就是如下四种:

?

? 2.常用命令简介

????????SPI命令格式为6字节构成,高位在前(MSB)。

????????字节1的最高2位固定是01,低6位为命令号(CMD0就是0,CMD16就是16,以此类推);字节2-5为命令参数,有些命令是没有参数的;字节6的高7位为CRC,最低位恒为1。

? ? ? ? 下表为比较常用的几个命令。

命令参数回应描述
CMD0(0X00)NONER1复位SD卡
CMD8(0X08)VHS+Check PatternR7发送接口状态命令
CMD9(0X09)NONER1读取卡特定数据寄存器
CMD10(0X0A)NONER1读取卡标志数据寄存器
CMD16(0X10)块大小R1设置块大小(字节数)
CMD17(0X11)地址R1读取一个块的数据
CMD24(0X18)地址R1写入一个块的数据
CMD41(0X29)NONER3发送给主机容量支持信息和激活卡初始化过程
CMD55(0X37)NONER1告诉SD卡,下一个是特定应用命令
CMD58(0X3A)NONER3读取OCR寄存器

? 3.SD卡的初始化

? ? 初始化步骤

? ? ? ? ? 1.初始化配置单片机的SPI接口和片选IO口。
? ? ? ? ? 2.调整SPI速度,SD卡在初始化时CLK的频率不能超过400KHz。
? ? ? ? ? 3.将SD卡的片选脚拉高,SD卡禁能。
? ? ? ? ? 4.向SD卡发送大于74个CLK的同步时钟。单片机调用SPI读或写数据的函数,向SD卡读或写10个字节就可以了,每读一个字节会产生8个CLK。
? ? ? ? ? 5.发送CMD0命令,使SD卡进入IDLE状态。
? ? ? ? ? 6.发送CMD8命令,查看SD卡类型是否为v2.0卡。
? ? ? ? ? 7.发送CMD55、CMD41、CMD58命令。
? ? ? ? ? 8.SD卡初始化完成。

?三、开始编程【视频】

? 1.建立工程

????????使用CubeMX建立一个工程。

? ? ? ? 视频地址:

? ? ? ???https://www.bilibili.com/video/BV1mb4y1U7V8?share_source=copy_web

? 2.打造一个自己的调试开发环境

? ? ? ? 俗话说得好,工欲善其事必先利其器,没有金刚钻不揽瓷器活。做电子开发没有好的工具或者工具不齐全是非常影响工作效率的。

? 3.基础函数的编写


总结


还没有写完,有空再更新。

代码部分很难用一两句文字描述清楚,打算用视频的形式进行分析。

本人不才,请多指教!

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:38:02  更:2021-08-21 15:39:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 18:16:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计