码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 从0开始编写SD卡底层驱动代码(适用于任何单片机的通用代码)


    SD卡在嵌入式、单片机开发里使用的很多。主要用来存储图片、字库、等比较占用内存的数据。

    SD卡支持两种通信协议:SPI和SDIO。 SPI协议是最简单,不依赖单片机本身硬件的协议,实现非常容易。

    那么这篇文章就带大家,从开始认识SD卡,学习SD卡的指令,了解SPI协议,从0开始自己写出SD卡的驱动代码。

    学会之后,可以用在任何单片机,任何嵌入式系统上。

    当前文章就是介绍通过模拟SPI协议驱动SD卡,读写SD卡。 不依赖于任何特定的单片机型号,也不依赖单片机的本身硬件,是一个完全通用的代码。

    不管你是51单片机、还是 STM32、还是树莓派、还是其他单片机,使用起来是没区别的。

    单片机只是一个执行器,你学的是软件程序逻辑。

    文章目录

    • 一、从0开始学习SD卡指令与时序
      • 1.1 SD卡引脚接口功能介绍
        • 【1】SD卡引脚接口图
        • 【2】SPI方式驱动SD卡介绍
      • 1.2 MMC卡、SD卡介绍
        • 【1】SD卡和MMC两者间区别
        • 【2】SD卡版本说明
        • 【3】SD卡常用的指令表
      • 1.3 向SD卡发送命令的步骤介绍(SendSDCardCmd)
        • 【1】取消选中SD卡(SDCardCancelCS)
        • 【2】选中SD卡(SDCardSelectCS)
        • 【3】向SD卡发送操作命令cmd
        • 【4】向SD卡发送命令参数
        • 【5】发送CRC校验
        • 【6】等待SD卡响应
      • 1.4 SD卡的寄存器与操作命令介绍
        • 【1】SDCard_CMD0:卡复位命令
        • 【2】SDCard_CMD8:检测是否是2.0版本的SD卡
        • 【3】SDCard_CMD9: 获取SD卡的CSD信息
        • 【4】SDCard_CMD17: 设置单个读取的扇区
        • 【5】SDCard_CMD18: 设置读扇区(连续读扇区使用)
        • 【6】SDCard_CMD12: 停止数据传输
        • 【7】SDCard_CMD24: 设置写单个扇区
        • 【8】4.8 SDCard_CMD55
        • 【9】SDCard_CMD23: 多扇区写入前预先擦除块数量
        • 【10】SDCard_CMD25: 设置写多个扇区
        • 【11】SDCard_CMD41
        • 【12】SDCard_CMD58
      • 1.5 SD卡SPI接口命令
        • 【1】SPI接口时序
        • 【2】SPI模式下: SD卡初始化步骤(SDCardDeviceInit)
        • 【3】SPI模式下: 向SD卡发送数据包步骤(SDCardSendData)
        • 【4】SPI模式下: 从SD卡读取数据包步骤(SDCardRecvData)
        • 【5】SPI模式下: 向SD卡指定扇区写数据(SDCardWriteData)
        • 【6】写结束指令0xFD,完成写入。
        • 【7】取消片选
      • 1.6 SPI模式下: 从SD卡读取指定扇区数据(SDCardReadData)
        • 【1】读取一个扇区的步骤
        • 【2】SPI模式下: 获取SD卡的总扇区数(GetSDCardSectorCount)
    • 二、完整代码
      • 2.1 sd_card.c
      • 2.1 sd_card.h

    一、从0开始学习SD卡指令与时序

    1.1 SD卡引脚接口功能介绍

    【1】SD卡引脚接口图

    image-20240524092405034

    image-20240524092419291

    图1-2 SD卡引脚说明

    SD卡支持两种总线方式:SD方式与SPI方式。其中SD方式采用6线制,使用CLK、CMD、DAT0~DAT3进行数据通信。而SPI方式采用4线制,使

  • 相关阅读:
    【离散数学】图的随机生成和欧拉(回)路的确定(c语言实现)
    Microsoft Dynamics CRM怎么样?
    欧拉计划Python解法(第6题-第10题)
    Linux 网络性能的 15 个优化建议
    字节面试惨遭滑铁卢:一面就被吊打,幸得华为内推,三面拿到offer
    环形链表问题(判环、求入口点)
    [postgresql]计算中文字符的个数
    一步一步用numpy实现神经网络各种层
    细说 单链表、双向链表 、LinkedList类(附 add 源码解读)和 ArrayList 和 LinkedList 的区别 —— 数据结构
    [附源码]java毕业设计基于学生信息管理系统
  • 原文地址:https://blog.csdn.net/xiaolong1126626497/article/details/140006000
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号