资源简介
实现对SD卡的读取,包括实现SPI总线的控制和对SD卡初始化等
代码片段和文件信息
#include
#include “sd.h“
#include “myfun.h“ //公共函数头文件
#define _SD_Write_Sector 0
#define CS_SD_EN (CS=0) //为低时表示片选
#define CS_SD_DIS (CS=1) //disable
#define SCK_SD_LOW SD_SCL=0; //low
#define SCK_SD_HIGH SD_SCL=1; // SCK = 1
#define SI_SD_LOW SD_SI=0; //(SISO均相对SSD)
#define SI_SD_HIGH SD_SI=1; //SI=1
/*******************************************************
********************************************************/
//变量定义
//--------------------------------------------------------------
bit is_init; //在初始化的时候设置此变量为1同步数据传输(SPI)会放慢
//---------------------------------------------------------------
//unsigned char bdata _dat;
//sbit _dat7=_dat^7;
//sbit _dat6=_dat^6;
//sbit _dat5=_dat^5;
//sbit _dat4=_dat^4;
//sbit _dat3=_dat^3;
//sbit _dat2=_dat^2;
//sbit _dat1=_dat^1;
//sbit _dat0=_dat^0;
#ifdef _STC12C_SPI
void SD_spi_write(unsigned char spidata) ////////注意读的时候,也要写一个字节
{
if (is_init)
CLK_DIV=0x07;
else
CLK_DIV=0x00;
SPSTAT=0xC0;
SPDAT=spidata;
while(!(SPSTAT & 0x80));
}
unsigned char SD_spi_read()////////注意读的时候,也要写一个字节
{
unsigned char spidata;
if (is_init)
CLK_DIV=0x07;
else
CLK_DIV=0x00;
SPSTAT=0xC0;
SPDAT=0xAA;
while(!(SPSTAT & 0x80));
spidata=SPSTA;
return spidata;
}
#else
/******************************************************************
- 功能描述:IO模拟SPI,发送一个字节
- 隶属模块:SD卡模块
- 函数属性:内部
- 参数说明:x是要发送的字节
- 返回说明:无返回
- 注:其中is_init为1时,写的速度放慢,初始化SD卡SPI速度不能太高
******************************************************************/
void SD_spi_write(unsigned char x)
{
unsigned char i;
for (i = 0; i < 8; i++)
{
if (x & 0x80)
{
SI_SD_HIGH;
}
else
{
SI_SD_LOW;
}
SCK_SD_LOW ;
if(is_init) delay(DELAY_TIME);
_nop_();
SCK_SD_HIGH;
if(is_init) delay(DELAY_TIME);
_nop_();
x<<=1;
}
}
/******************************************************************
- 功能描述:IO模拟SPI,读取一个字节
- 隶属模块:SD卡模块
- 函数属性:内部
- 参数说明:无
- 返回说明:返回读到的字节
******************************************************************/
unsigned char SD_spi_read() //SPI读一个字节
{
unsigned char irByte=0;
for(i=0;i<8;i++)
{
SD_SO=1;
SCK_SD_LOW ;
if(is_init) delay(DELAY_TIME);
_nop_();
SCK_SD_HIGH;
if(is_init) delay(DELAY_TIME);
_nop_();
rByte<<=1;
rByte|=SD_SO;
}
return rByte;
}
#endif
/******************************************************************
- 功能描述:向SD卡写命令
- 隶属模块:SD卡模块
- 函数属性:内部
- 参数说明:SD卡的命令是6个字节,pcmd是指向命令字节序列的指针
- 返回说明:命令写入后,SD卡的回应值,调用不成功,将返回0xff
******************************************************************/
unsigned char SD_Write_Cmd(unsigned char *pcmd) //向SD卡写命令,pcmd是命令字节序列的首地址
{
unsigned char temptime=0;
SD_CS=1;
SD_spi_write(0xFF); //提高兼容性,如果没有这里,有些SD卡可能不支持
// SD_spi_write(0xFF); //提高兼容性,如果没有这里,有
- 上一篇:封装库方法.pdf
- 下一篇:一个简单的方便的日历记事本
相关资源
- Spire API文档
- The direction of synaptic plasticity mediated
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- 28335写的用spi读取传感器数据并用CA
- STM32F103 CC2500完整驱动(模拟SPI)
- 手机短信api接口(源代码)
- cs5530的SPI程序
- 9s12单片机SPI功能代码
- stm32 用SPI 方式读写 SDHC
- SPI Master 的Verilog源代码
- Spire.Doc 破解版
- Spin-1目标的广义parton分布的多项式和
- 介子和S波氘核的四极矩以及对spin-1系
- 基于SPCE061A和PTR8000的模拟SPI总线通信
- 用8位spi实现16位spi
- linux SPI设备注册和驱动小结
- 用Verilog语言写的CPLD和MCU通讯的SPI接口
- Spirent iTest用户手册详细介绍iTest的各
- 精确结果为3d N $$ \\ mathcal {N} $$ = 2 S
- 从Poincaré代数的闭合中得
- Temperature dependence of electron-spin cohere
- QCD中三个循环处的Spin-2形状因子
- STM32分别以串口硬件SPI模拟并口驱动
- stm32利用spi驱动tm1803
- 戴尔Inspiron笔记本 摄像头工具webcam
- 戴尔DELL Inspiron 14R N4010网卡驱动 最新
- dell inspiron n4010摄像头驱动 官方最新版
- 戴尔DELL灵越Inspiron N4120快捷键驱动程
- 戴尔DELL灵越Inspiron 14R 5420热键驱动程
评论
共有 条评论