码农知识堂 - 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线制,使

  • 相关阅读:
    第五章:Java中的方法和方法重载
    专家建议|一图指引企业如何以4种精益方法规模化创新
    python微信小程序 springboot个人健康管理系统java php
    TSINGSEE青犀智能分析网关工服识别算法,如何最大限度保障工人安全?
    麻省理工学院与Meta AI共同开发StreamingLLM框架,实现语言模型无限处理长度
    智能工厂建设模式及解决方案供应商---万界星空科技
    你的开发套件已到货「GitHub 热点速览」
    java发送http请求(jquery发送http请求,前后端看这一篇文章够了,很完整)
    Javascript中的内置对象—数组
    四嗪PROTACTetrazine-Ph-PEG4-Ph-aldehyde/NHCO-C3-NHS ester/PEG4-NH-Boc的研究
  • 原文地址:https://blog.csdn.net/xiaolong1126626497/article/details/140006000
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号