软件SPI和硬件SPI读写SD卡,TF卡测试程序
SD卡模块和SD卡
软件SPI读写SD卡程序
测试平台:STC89C516和STC12C5A60S2
内存卡大小:128MB和2GB
晶振:均为12MHz
硬件SPI读写SD卡程序
测试平台:STC12C5A60S2
内存卡大小:128MB和2GB
晶振:12MHz
(89C52没有硬件SPI)
为了尽可能的不给后来者留坑,这些代码我在发出来之前反复测试过,确保无误,
还有就是关于SD卡程序的读写我在程序中写的很清楚,这里不再赘述
单片机源程序如下:
#include "public.h"
#include "SD.h"
//测试平台:STC89C516和STC12C5A60S2
//内存卡大小:128MB和2GB
//晶振:均为12MHz
void main()
{
unsigned int i;
SD_init();//SD卡初始化
for(i=0;i<512;++i) BUFFER_DATA[i]=0x7F;
MCU_write_SD_512Byte(960,512);//MCU向SD卡写入数据,一次最多512字节(扇区,数据长度(最大为512,建议填512))
MCU_read_SD_512Byte(960,512);//MCU向SD卡读取数据,一次最多512字节(扇区,数据长度(最大为512,建议填512))
P0=BUFFER_DATA[0];
while(1);
}
/*
unsigned int i;
SD_init();//SD卡初始化
{
在使用SD卡模块前,先初始化SD卡
}
for(i=0;i<512;++i) BUFFER_DATA[i]=0x7F;
MCU_write_SD_512Byte(960,512);//MCU向SD卡写入数据,一次最多512字节(扇区,数据长度(最大为512,建议填512))
{
将数据写入到SD卡:
先将数据写入到数据缓冲数组BUFFER_DATA中(这里的数据我全部都写0x7F),
然后运行MCU_write_SD_512Byte(960,512);
960为SD卡的扇区,表示将数据写入到SD卡的960扇区,512为一次性写入的数据大小,为512字节,建议填512字节,
因为1个扇区的大小为512字节
}
MCU_read_SD_512Byte(960,512);//MCU向SD卡读取数据,一次最多512字节(扇区,数据长度(最大为512,建议填512))
P0=BUFFER_DATA[0];
{
从SD卡读取数据:
先运行MCU_read_SD_512Byte(960,512);
这里的960为你要读的SD扇区,512位一次性读取的数据大小,为512字节,建议填512字节,因为1个扇区的大小为512字节
完成后数据存放在数据缓冲数组BUFFER_DATA中
因为没有现象的话不好判断SD卡读写是否成功,所以把P0BUFFER_DATA[0]赋给P0,P0接LED灯,就可以看见现象了
}
{
注意:将程序下载到开发板后可能会出现P0口显示的数据和SD卡写入数据不一致的情况
这时,
要将开发板和SD卡模块断电
要将开发板和SD卡模块断电
要将开发板和SD卡模块断电
不是复位
不是复位
不是复位
将开发板断电后再上电,就可以看见现象了
如果还不成功,
检查连线是否正确
检查连线是否正确
检查连线是否正确
或尝试插拔SD卡
SD卡读写成功后,可以修改扇区和SD的写入数据多实验几次,确保万无一失
}
*/
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』