经过验证测试,sd卡使用的spi模式为模式3(mode3),即CPOL和CPHA均为1,时钟线高电平空闲,第二个边沿(上升沿)进行采样。
下面为51单片机软spi读写一个字节时序(模式3)的代码示例,适用于sd卡的读写。

#define uchar unsigned char
bdata uchar spidw,spidr;//定义两个可以位寻址的uchar变量
sbit d0=spidw^0;
sbit d1=spidw^1;
sbit d2=spidw^2;
sbit d3=spidw^3;
sbit d4=spidw^4;
sbit d5=spidw^5;
sbit d6=spidw^6;
sbit d7=spidw^7;
sbit c0=spidr^0;
sbit c1=spidr^1;
sbit c2=spidr^2;
sbit c3=spidr^3;
sbit c4=spidr^4;
sbit c5=spidr^5;
sbit c6=spidr^6;
sbit c7=spidr^7;sbit cs=P3^4;//sd卡的spi模式引脚cs
sbit spi_do=P3^5;//sd卡的spi模式引脚mosi
sbit spi_di=P3^7;//sd卡的spi模式引脚miso
sbit clk=P3^6;//sd卡的spi模式引脚clkvoid yanshi(uchar t)
{uchar a,b;for(a=t;a>0;a--)for(b=120;b>0;b--);
}/*
sd卡spi模式读写函数,spi通讯要先自行使能sd卡的cs引脚
参数:
mm:要写入的一个字节数据
delay:spi通讯时是否加延时,以控制是低速spi还是高速spi。sd卡初始化时,sd的spi速度不能太快,否则初始化失败。
1:低速 0:高速
返回值:从spi中读取的一个字节数据
*/
*uchar spiwr(uchar mm,uchar delay)     //模式3上升沿采样
{spidw=mm;if(delay)yanshi(10);clk=0;spi_do=d7;   if(delay)yanshi(10);clk=1;c7=spi_di;    if(delay)yanshi(10);clk=0;spi_do=d6;    if(delay)yanshi(10);clk=1;c6=spi_di;    if(delay)yanshi(10);clk=0;spi_do=d5;    if(delay)yanshi(10);clk=1;c5=spi_di;    if(delay)yanshi(10);clk=0;spi_do=d4;    if(delay)yanshi(10);clk=1;c4=spi_di;    if(delay)yanshi(10);clk=0;spi_do=d3;    if(delay)yanshi(10);clk=1;c3=spi_di;    if(delay)yanshi(10);clk=0;spi_do=d2;    if(delay)yanshi(10);clk=1;c2=spi_di;    if(delay)yanshi(10);clk=0;spi_do=d1;    if(delay)yanshi(10);clk=1;c1=spi_di;    if(delay)yanshi(10);clk=0;spi_do=d0;    if(delay)yanshi(10);clk=1;c0=spi_di;return spidr;
}

注意: 大部分淘宝上买的sd卡读写模块,它的电路很简单,sd卡供电是使用了一个5v转3.3v的电源降压芯片,但是sd卡的控制引脚;如:mosi,miso,cs,clk都是直接接单片机,只不过每个引脚另外还接了一个3.3v的上拉电阻,如下图所示。这种电路是有隐患的。

由于51单片机的引脚是5v的,所以51单片机直接使用这个模块,一般就会出现sd卡损坏的情况,本人就遇到过,往sd卡存了几个文本文件,引脚模式没有设置,还是保持51默认的弱上拉模式,实验了几下,之后再用读卡器将sd卡插电脑上,sd卡显示文件系统损坏,文件全部没有了,最后只能让我又给它格式化了一下,还好没有坏。或者有时也会出现电脑识别sd卡特别慢的情况。
因此一般不能直接将sd卡接到51单片机的引脚上,最可靠的方法就是每个引脚都接上一个5v-3.3v电平转换芯片过渡。
退一步讲,如果只能用这样的电路,那么可以这么做(必须要这么做,否则sd卡坏的几率很大):51单片机的sd相关连接引脚在开机时就设置成开漏模式,STC的51单片机大多都是可以设置开漏的,具体可以看看STC单片机手册,但是这种办法也不保险,开机瞬间,下载程序时,引脚是不会开漏的,如果插着sd卡,长久必定会造成sd卡的损坏。
sd卡的读写就不再此介绍了,如果大家可以给我关注点赞,并在评论区留言的话,嘻嘻嘻,我会再发一个博客进行详细介绍51单片机的读写sd卡,并介绍移植51单片机的文件系统,如:fat32,基于Petit FatFs文件系统。

SD卡SPI读写模式,基于51单片机的讲解相关推荐

  1. SPI初始化C语言编程,SD卡spi模式读写,初始化和复位都成功了

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:SD卡spi模式读写,初始化和复位都成功了 问题详情:我用的是内存卡 12M的!有知道是怎么回事的吗?是写入数回答:应该还得格式化, ...

  2. SD卡SPI模式入门教程

    ▼我是阿荣,关注我,在技术路上一起精进!▼ SD卡简介 SD卡是一种基于半导体快闪记忆器的新一代记忆设备,英文全称Secure Digital Memory Card,中文名又称安全数码卡. 尺寸分类 ...

  3. SD卡 SPI模式操作(1)初始化SD卡

    原文(本人转载):帆登小站-SD卡 SPI模式操作(1)初始化SD卡 作者是初学者,水平有限,本文仅作为个人学习笔记使用,不能保证内容的正确性.部分资料来源于网络,参考了SD卡协议2.0手册等资料,如 ...

  4. 基于51单片机的热水卡系统

    基于51单片机的热水卡系统 说明 功能描述 主要材料 原理图和实物图 部分代码 补充说明 说明 首先很感谢您对这篇文章的阅读,这是我第一次写博文,写得不好的地方请谅解.文章中如果有侵权的请联系我,我会 ...

  5. 基于51单片机十字路口红绿灯交通灯+紧急模式

    基于51单片机十字路口红绿灯交通灯 +无黄灯+紧急 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J010 目录标题 基于51单片机十字路口红绿灯交 ...

  6. 基于51单片机的IC卡智能水表设计

    具体实现功能 系统由STC89C52单片机+LCD1602+电磁阀+继电器+流量计+IC卡读写模块模块构成. 具体功能: (1)第一行显示IC卡ID号码,此时未读到IC卡,所以ID显示为0,第二行显示 ...

  7. SD nand与SD卡 SPI模式驱动

    SD nand 与 SD卡的SPI模式驱动 文章目录 SD nand 与 SD卡的SPI模式驱动 1. 概述 2. SPI接口模式与SD接口模式区别 2.1 接口模式区别 2.2 硬件引脚 2.3 注 ...

  8. 基于51单片机十字路交通灯仿真_黄灯闪烁_正常模式+夜间模式+紧急模式

    基于51单片机十字路交通灯仿真_黄灯闪烁+夜间+夜间 目录 基于51单片机十字路交通灯仿真_黄灯闪烁+夜间+夜间 演示视频 基本功能: 仿真图 程序 程序代码 程序讲解 倒计时的产生 红黄绿灯状态处理 ...

  9. NFC之基于51单片机rc522的读写

    NFC之基于51单片机rc522的读写 改程序,端口定义 上位机修改com口

最新文章

  1. 视频编解码之理论概述 和即时通信
  2. 大规模集群自动化部署SSH无密码登陆
  3. 2019 年 C++ 的发展
  4. 新书上架:《Java SE 实践教程》
  5. 神策数据荣获北京市广播电视局优秀推荐项目
  6. MySQL数据类型和Java数据类型对应关系表
  7. C#调用 Halcon引擎执行代码
  8. wpf page 界面渲染完成后执行自动操作_Vue项目骨架屏自动生成方案(dps)
  9. python图片转视频加特效_使用Python opencv实现视频与图片的相互转换
  10. Ionic APP 热更新 之 产品发布状态下的热更新搭建,去local-dev-addon插件
  11. 每天一个Linux命令(3):ls命令
  12. php删除文件还能修复吗,删除文件恢复
  13. 龙芯电脑编译安装mysql5.7详解
  14. 压缩包 zip RAR 7z 密码破解常用的几种方法
  15. 《一封神气的情书》李敖
  16. 用as写2048游戏
  17. 《数据结构与算法分析》回溯算法之博弈——三连棋(tic tac toe)人机对战AI设计(αβ枝减)
  18. 机器学习入门课程笔记(一)——deeplearning.ai: Neural Networks and Deep Learning
  19. [从头读历史] 第268节 诗经 鄘风
  20. 【pyenv】解决 pyenv install 国内下载缓慢的问题

热门文章

  1. PL/SQL Developer 14 配置
  2. 一.java的工作方式
  3. 猪呀,羊呀,送到哪里去?
  4. 传输线的物理基础(一):地、信号和均匀传输线
  5. STM32F103ZET6【标准库函数开发】------PB3,PB4当做普通IO口,重定义
  6. 微信公众号获取openid(java后端+html实现)
  7. 微信开发之微信网页授权 完整示例
  8. MATLAB进行不定积分和定积分的求解
  9. 【vue打包】线上部署报错net::ERR_ABORTED 404 (Not Found)
  10. S6系统激活、软件升级和软件授权激活