单片机软件SPI和硬件SPI读写SD卡,TF卡测试程序

发布者:泉地水无痕最新更新时间:2020-10-14 来源: 51hei关键字:单片机  软件SPI  硬件SPI  读写SD卡 手机看文章 扫描二维码
随时随地手机看文章

软件SPI和硬件SPI读写SD卡,TF卡测试程序
SD卡模块和SD卡



软件SPI读写SD卡程序
测试平台:STC89C516和STC12C5A60S2
内存卡大小:128MB和2GB
晶振:均为12MHz

硬件SPI读写SD卡程序
测试平台:STC12C5A60S2
内存卡大小:128MB和2GB
晶振:12MHz
(89C52没有硬件SPI)


为了尽可能的不给后来者留坑,这些代码我在发出来之前反复测试过,确保无误,
还有就是关于SD卡程序的读写我在程序中写的很清楚,这里不再赘述

单片机源程序如下:

  1. #include "public.h"

  2. #include "SD.h"


  3. //测试平台:STC89C516和STC12C5A60S2

  4. //内存卡大小:128MB和2GB

  5. //晶振:均为12MHz


  6. void main()

  7. {

  8.         unsigned int i;


  9.         SD_init();//SD卡初始化

  10.        

  11.         for(i=0;i<512;++i) BUFFER_DATA[i]=0x7F;

  12.         MCU_write_SD_512Byte(960,512);//MCU向SD卡写入数据,一次最多512字节(扇区,数据长度(最大为512,建议填512))

  13.        

  14.         MCU_read_SD_512Byte(960,512);//MCU向SD卡读取数据,一次最多512字节(扇区,数据长度(最大为512,建议填512))

  15.         P0=BUFFER_DATA[0];

  16.        

  17.         while(1);

  18. }


  19. /*

  20.         unsigned int i;

  21.        

  22.         SD_init();//SD卡初始化

  23.        

  24.         {

  25.                 在使用SD卡模块前,先初始化SD卡

  26.         }

  27.        

  28.         for(i=0;i<512;++i) BUFFER_DATA[i]=0x7F;

  29.         MCU_write_SD_512Byte(960,512);//MCU向SD卡写入数据,一次最多512字节(扇区,数据长度(最大为512,建议填512))

  30.        

  31.         {

  32.                 将数据写入到SD卡:

  33.                 先将数据写入到数据缓冲数组BUFFER_DATA中(这里的数据我全部都写0x7F),

  34.                 然后运行MCU_write_SD_512Byte(960,512);

  35.                 960为SD卡的扇区,表示将数据写入到SD卡的960扇区,512为一次性写入的数据大小,为512字节,建议填512字节,

  36.                 因为1个扇区的大小为512字节

  37.         }

  38.        

  39.         MCU_read_SD_512Byte(960,512);//MCU向SD卡读取数据,一次最多512字节(扇区,数据长度(最大为512,建议填512))

  40.         P0=BUFFER_DATA[0];

  41.        

  42.         {

  43.                 从SD卡读取数据:

  44.                 先运行MCU_read_SD_512Byte(960,512);

  45.                 这里的960为你要读的SD扇区,512位一次性读取的数据大小,为512字节,建议填512字节,因为1个扇区的大小为512字节

  46.                 完成后数据存放在数据缓冲数组BUFFER_DATA中

  47.                

  48.                 因为没有现象的话不好判断SD卡读写是否成功,所以把P0BUFFER_DATA[0]赋给P0,P0接LED灯,就可以看见现象了

  49.         }


  50.         {

  51.                 注意:将程序下载到开发板后可能会出现P0口显示的数据和SD卡写入数据不一致的情况

  52.                 这时,

  53.                         要将开发板和SD卡模块断电

  54.                         要将开发板和SD卡模块断电

  55.                         要将开发板和SD卡模块断电

  56.                         不是复位

  57.                         不是复位

  58.                         不是复位

  59.                 将开发板断电后再上电,就可以看见现象了

  60.                 如果还不成功,

  61.                         检查连线是否正确

  62.                         检查连线是否正确

  63.                         检查连线是否正确

  64.                 或尝试插拔SD卡

  65.                

  66.                 SD卡读写成功后,可以修改扇区和SD的写入数据多实验几次,确保万无一失

  67.         }

  68. */

关键字:单片机  软件SPI  硬件SPI  读写SD卡 引用地址:单片机软件SPI和硬件SPI读写SD卡,TF卡测试程序

上一篇:51单片机通过串口控制LED
下一篇:PWM频率发生器

推荐阅读最新更新时间:2024-11-04 18:52

51单片机-定时器工作模式2
1.工作模式2的使用 这里我们顺便讲解一下定时器0的工作模式2,也就是使用“小试管”的方式,TMOD的初始化就为“TMOD=0x02;”。 我们知道工作模式2的最长溢出时间仅为256*(12/11059200)=0.000277秒=277微秒。 我们想实现间隔51ms的流水灯实验该怎么做,首先我们定义一个变量cnt用来记录每次的溢出次数,然后我们的定时时间为51微秒(因为最大定时只有278微秒),cnt记录的值等于1000的时候,证明时间已经过去了51ms,于是再去执行流水灯的任务。 我们已经知道工作模式2是不需要在溢出之后再填充初始值的,比如我们定时的时间为51微秒,那么计算出“距离溢出的刻度”就为47(实际计算
[单片机]
MCS-51单片机与无线调制器的综合应用
GPS是目前技术上最成熟且已实用的一种定位系统,但是在GPS定位系统中,由于其是一个单向导航系统,他是把星历数据等传给地面接收机,可在许多具体应用时,例如在车辆调度系统中,一般都需要把利用GPS测得的信息数据传到调度中心,由于其系统由一个基准站和多个用户台组成,基准站与用户台之间的联系,即由基准站计算出的各种校正值发送到用户台,上边这一切都需要用到数据链来完成数据的传输。其中,数据链由调制解调器和电台组成。在无线数据传输系统中,调制解调器足一个关键部分,调制解调器(Modem)是将数据进行编码和调制,然后输入到电台发射出去,用户台将其接收下来,并将数据解调后,送入GPS接收机进行改正。本文介绍了单片机控制Modem的原理和方法。
[单片机]
浅析非对称双核MCU基础知识及核间通信
  本文从对比两颗分立MCU与单芯片双核MCU开始(以LPC4350为例),展开介绍了非对称双核MCU的基础知识与重要特点。接下来,重点介绍了核间通信的概念与几种实现方式,尤其是基于消息池的控制/状态通信。然后,对内核互斥、初始化流程等一些重要的细节展开了论述。最后提出了双核任务分工的两种应用模型,并分别举例。   背景与基本概念   在开发MCU应用系统时,如果单颗MCU无法满足系统的要求,一个很普遍的做法就是使用两颗或更多的MCU,把一部分“杂项工作”分配给另一个有“助理”性质的低端MCU来完成。但是,采用两颗MCU,缺点也很明显,尤其是在芯片与PCB成本、系统可靠性及功耗方面都有先天的不足。此外,若采用了不同架构的MCU
[单片机]
浅析非对称双核<font color='red'>MCU</font>基础知识及核间通信
时间片轮调的单片机程序结构
我们使用单片机去做一些任务的时候,通常把程序写成顺序结构,基本可以解决大部分的设计要求了。而且这种结构便于理解,而且程序易构成模块化,在各个模块中调用实现更复杂的任务。 然而顺序结构的写法,有时候避免不了沉重冗长的时间等待。例如键盘扫描,你就给我弄了一个delay_20ms()函数,而在这延时的过程,其实 MCU可以做很多事情的,这不白白的浪费掉这段时间吗?其实,delay的这段时间用数码管显示代替,也就是在等待的过程,我们可以做一下显示。但仅此而已? 之前,我在做3寸大数码钟的时候就遇到过一个时间要求苛刻的问题,我采用了17个 数码管 ,分成两组来动态显示。为了不闪烁,那么刷新频率起码大于 50Hz。而单片机还有其他任务,
[单片机]
时间片轮调的<font color='red'>单片机</font>程序结构
51单片机摸拟串口(232)
#include reg51.h sbit BT_SND =P1^0; sbit BT_REC =P1^1; //IO 口模拟232通讯程序 //使用两种方式的C程序 占用定时器0 #define uchar unsigned char #define uint unsigned int #define MODE_QUICK #define F_TM F0 #define TIMER0_ENABLE TL0=TH0; TR0=1; #define TIMER0_DISABLE TR0=0; sbit ACC0= ACC^0; sbit ACC1= ACC^1; sbit ACC2= ACC^2;
[单片机]
基于单片机的LED轮廓显示控制器设计方案
  LED护栏管又名丽得管,是一种先进的LED装饰照明灯饰产品。以红、绿、蓝3种颜色的LED作为光源,使用了微电子和数码技术,能进行色彩追逐,色彩过渡渐变,灰度变化和七色变化,能产生十分丰富的色彩变幻效果。该产品外形采用一次成型,灯管和底座浑为一体,防水性更好,重量更轻。广泛适用于酒吧、舞厅、大厦、广场、桥梁、栏杆等各种大型建筑装饰,全彩管更可以在一个大范围的区域实现灯光群控和显示动态节目,适合大型主题夜景。   文中提出了一种主从式单片机的LED轮廓显示屏解决方案,该设计方案利用STC单片机自身的FLASH ROM和RAM,外部无需任何存储电路,电路结构简单。可实现交流同步显示,驱动当前LED亮化市场中的多款LED护栏管与点
[电源管理]
基于<font color='red'>单片机</font>的LED轮廓显示控制器设计方案
【51单片机】数据管的消影问题
数码管的消影 未消影 代码 #include reg52.h sbit wela=P2^7; //位选 sbit dula=P2^6; //段选 void main() { while(1) { //一直显示 dula=1; P0=0x06; //显示1 dula=0; wela=1; P0=0xfe; //选择第一个数码管 wela=0; } } 运行结果 原因 第一个数码管的1显示较亮但是同时伴随着另外较弱一点段位的显示,可以看出是下面位选的影响(0xfe),然后几
[单片机]
【51<font color='red'>单片机</font>】数据管的消影问题
单芯闪存微控制器性能达200MIPS
  爱特梅尔现已推出基于ARM9的AT91SAM9XE系列的样品,这是集成了200MIPS的 ARM926EJ-S™ 处理器核与512K字节片上闪存的第一代单芯片闪存微控制器。    从ARM7顺利过渡到ARM9闪存微控制器   SAM9XE系列最大程度地重复利用了为SAM7系列而开发的外设和技术。此外,SAM9XE系列与SAM7系列采用相同的支持架构,从而实现两个微控制器系列之间地迁移。   爱特梅尔公司ARM产品市场主管Jacko Wilbrink指出:“SAM9XE 系列将爱特梅尔在ARM 闪存 MCU 方面的领导地位从 ARM7 领域扩展到 ARM9 领域。SAM9XE 系列建构于经过验证的架构和外设集,能够满足迅速
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved