AVR单片机的SD卡接口程序设计

网友投稿 269 2022-11-19

AVR单片机的SD卡接口程序设计

/*SDCodeforM32L*/

/*Bypasyong*/

/*2006-4*/

/*BaseICC6.31A*/

/************************************************************/

#include

#include

#include“1011.h”

#defineucharunsignedchar

#defineuintunsignedint

#defineMMC_PORTPORTB

voidsd_port_init()

{

MMC_PORT|=MMC_CS_PIN;

}

ucharBUFFER[512];//扇区缓冲区

voiddelay_nus(uintn)

{

unsignedcharb;

for(b=1;b;

}

//****************************************************************************

//****************************************************************************

ucharSD_Write_Command(ucharcmd,unsignedlongarg)

{

uchartmp;

ucharretry=0;

//MMC_PORT|=MMC_CS_PIN;//SD卡关闭

//send8CLOCkImpulse

Write_Byte_SPI(0xFF);

MMC_PORT&=~MMC_CS_PIN;//SD卡使能

Write_Byte_SPI(cmd|0x40);//送头命令

Write_Byte_SPI(arg》》24);

Write_Byte_SPI(arg》》16);//send6ByteCommandtoMMC/SD-Card

Write_Byte_SPI(arg》》8);

Write_Byte_SPI(arg&0xff);

Write_Byte_SPI(0x95);//仅仅对RESET有效的CRC效验码

//get8bitresponse

do

tmp=Read_Byte_SPI();

retry++;

}

while((tmp==0xff)&&(retry《100));//当没有收到有效的命令的时候

MMC_PORT|=MMC_CS_PIN;//MMC_CS_PIN=1;

elseMMC_PORT&=~MMC_CS_PIN;//MMC_CS_PIN=0;

return(tmp);

}

//****************************************************************************

//SD卡初始化(SPI-MODE)

//****************************************************************************

ucharSD_Init(void)

{

ucharretry,temp;

uchari;

MMC_PORT&=~MMC_CS_PIN;//SD卡使能

for(i=0;i《0x0f;i++)

{

Write_Byte_SPI(0xff);//send74clockatleast!!!

}

//SendCommandCMD0toMMC/SDCard

retry=0;

do

temp=SD_Write_Command(0,0);

retry++;

if(retry==100)

{

;//CMD0Error!

}

}

while(temp!=1);

//SendCommandCMD1toMMC/SD-Card

retry=0;

do

{//retry100timestosendCMD1command

temp=SD_Write_Command(1,0);

retry++;

if(retry==100)

{

;

}

}

while(temp!=0);

retry=0;

SD_Write_Command(16,512);//设置一次读写BLOCK的长度为512个字节

MMC_PORT|=MMC_CS_PIN;//MMC_CS_PIN=1;//setMMC_Chip_Selecttohigh

return(0);//Allcommandshavebeentaken.

}

//****************************************************************************

//从SD卡读一个扇区Return0ifnoError.

//****************************************************************************

ucharSD_Read_Block(unsignedlongaddress)

{

uchartemp=0;uinti=0;

reading=1;

temp=SD_Write_Command(17,address);//读出RESPONSE

while(Read_Byte_SPI()!=0xfe)

{;}//直到读取到了数据的开始头0XFE,才继续

for(i=0;i《512;i++)

{

BUFFER[i]=Read_Byte_SPI();

}

Read_Byte_SPI();//CRC-Byte

Read_Byte_SPI();//CRC-Byte

reading=0;

MMC_PORT|=MMC_CS_PIN;//关闭SD卡

return(temp);

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:|NO.Z.00022|——————————|BigDataEnd|——|Hadoop&PB级数仓.V06|——|PB数仓.v06|会员活跃度分析|活跃会员&DWS建表&DWS加载数据|
下一篇:|NO.Z.00020|——————————|BigDataEnd|——|Hadoop&PB级数仓.V04|——|PB数仓.v04|会员活跃度分析|json数据处理&SerDe处理json数据|
相关文章

 发表评论

暂时没有评论,来抢沙发吧~