資源簡介
實(shí)現(xiàn)對(duì)SD卡的讀取,包括實(shí)現(xiàn)SPI總線的控制和對(duì)SD卡初始化等
代碼片段和文件信息
#include?
#include?“sd.h“
#include?“myfun.h“?//公共函數(shù)頭文件
#define?_SD_Write_Sector?0
#define?CS_SD_EN????(CS=0)??????//為低時(shí)表示片選
#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均相對(duì)SSD)
#define?SI_SD_HIGH???SD_SI=1;??????//SI=1
/*******************************************************
????????
********************************************************/
//變量定義
//--------------------------------------------------------------
bit?is_init;????????//在初始化的時(shí)候設(shè)置此變量為1同步數(shù)據(jù)傳輸(SPI)會(huì)放慢
//---------------------------------------------------------------
//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)??????////////注意讀的時(shí)候,也要寫一個(gè)字節(jié)
{??
?if?(is_init)
? CLK_DIV=0x07;
?else
? CLK_DIV=0x00;
?
?SPSTAT=0xC0;
?SPDAT=spidata;
?while(!(SPSTAT?&?0x80));
}
unsigned?char?SD_spi_read()////////注意讀的時(shí)候,也要寫一個(gè)字節(jié)
{??
?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,發(fā)送一個(gè)字節(jié)
?-?隸屬模塊:SD卡模塊
?-?函數(shù)屬性:內(nèi)部
?-?參數(shù)說明:x是要發(fā)送的字節(jié)
?-?返回說明:無返回
?-?注:其中is_init為1時(shí),寫的速度放慢,初始化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,讀取一個(gè)字節(jié)
?-?隸屬模塊:SD卡模塊
?-?函數(shù)屬性:內(nèi)部
?-?參數(shù)說明:無
?-?返回說明:返回讀到的字節(jié)
?******************************************************************/
unsigned?char?SD_spi_read()?//SPI讀一個(gè)字節(jié)
{??
??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卡模塊
?-?函數(shù)屬性:內(nèi)部
?-?參數(shù)說明:SD卡的命令是6個(gè)字節(jié),pcmd是指向命令字節(jié)序列的指針
?-?返回說明:命令寫入后,SD卡的回應(yīng)值,調(diào)用不成功,將返回0xff
?******************************************************************/
unsigned?char?SD_Write_Cmd(unsigned?char?*pcmd)?//向SD卡寫命令,pcmd是命令字節(jié)序列的首地址
{
?unsigned?char?temptime=0;
?SD_CS=1;
?SD_spi_write(0xFF);?//提高兼容性,如果沒有這里,有些SD卡可能不支持?
//?SD_spi_write(0xFF);?//提高兼容性,如果沒有這里,有
- 上一篇:封裝庫方法.pdf
- 下一篇:一個(gè)簡單的方便的日歷記事本
評(píng)論
共有 條評(píng)論