资源简介
实现对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
- 下一篇:一个简单的方便的日历记事本
相关资源
- ExampleCode_RDC_AD2S1210官方例程内含模拟
- spi测试程序,适合初学者
- AVR ATMEGA16 SPI双机通信的PROTEUS仿真 双
- VCSEL激光器的Pspice模型文件
- spiflash 驱动代码
- ad7794_spi操作源文件
- ADXL345 STM32 SPI 代码亲测可用
- 图像压缩,使用SPIHT算法进行图像压缩
- Auto Spice CMMI 26262差异对比
- 自己编写的使用Verilog通过SPI读写EEP
- Hspice使用详细教程
- SPI总线操作时序详解
- SPI从机通信设置
- SPI_OLED硬件与软件
- SSM框架(一) 基于eclipseJee搭建Sping
- Verilog版本的SPI程序
- dsPIC对于直流无刷BLDC无传感器电机控
- ad7190的spi通讯
- SPI经典IP内核verilog
- PIC单片机SPI通信 带proteus仿真
- 基于ti 的单片机msp430g2553的硬件spi控制
- MSP430SPI调试AD7708
- STM32F10x_SPI硬件接口读写Flash25Q16.zip
- MFRC522与89C52单片机通信参考例程
- 可配置式GPIO模拟SPI总线方法的设计与
- 51单片机IO模拟SPI和25lc1024通信
- STM8S 0.96寸OLED4线SPI驱动程序
- 科大讯飞XFS5152语音合成SPI驱动的C51源
- dsPIC33E 内部Flash读写及其它外设驱动
- dsPIC33EBootloader下位机
评论
共有 条评论