<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > AVR的SD卡接口程序

AVR的SD卡接口程序

作者: 時(shí)間:2011-11-25 來(lái)源:網(wǎng)絡(luò ) 收藏

程序/*****************************************************/
/* SD Code for M32L */
/* By pasyong */
/* 2006-4 */
/* Base ICC6.31A */
/************************************************************/
#include iom32v.h>
#include macros.h>
#include "1011.h"
#define uchar unsigned char
#define uint unsigned int
#define MMC_CS_PIN BIT(4) //PORTB.4
#define MMC_PORT PORTB

uchar reading=0,a=0,pointer=0;
void sd_port_init()
{
MMC_PORT =MMC_CS_PIN;
}
uchar BUFFER[512]; //扇區緩沖區
uint i=0;
void delay_nus(uint n)
{
unsigned char b;
for (b = 1; bn; b++)
;
}
//************************************************************
//Send a Command to MMC/SD-Card
//Return: the second byte of response register of MMC/SD-Card
//*************************************************************
uchar SD_Write_Command(uchar cmd,unsigned long arg)
{
uchar tmp;
uchar retry=0;

//MMC_PORT =MMC_CS_PIN; //SD卡關(guān)閉
//send 8 Clock Impulse
Write_Byte_SPI(0xFF);

//set MMC_Chip_Select to low (MMC/SD-Card active)
MMC_PORT=~MMC_CS_PIN; //SD卡使能

Write_Byte_SPI(cmd 0x40); //送頭命令
Write_Byte_SPI(arg>>24);
Write_Byte_SPI(arg>>16); //send 6 Byte Command to MMC/SD-Card
Write_Byte_SPI(arg>>8);
Write_Byte_SPI(arg0xff);
Write_Byte_SPI(0x95); //僅僅對RESET有效的CRC效驗碼

//get 8 bit response
//Read_Byte_MMC(); //read the first byte,ignore it.
do
{ //Only last 8 bit is used here.Read it out.
tmp = Read_Byte_SPI();
retry++;
}
while((tmp==0xff)(retry100)); //當沒(méi)有收到有效的命令的時(shí)候

if(reading==0)
MMC_PORT =MMC_CS_PIN; //MMC_CS_PIN=1;
else MMC_PORT=~MMC_CS_PIN; //MMC_CS_PIN=0;
return(tmp);
}
//********************************************************
//SD卡初始化(SPI-MODE)
//***********************************************************
uchar SD_Init(void)
{
uchar retry,temp;
uchar i;
MMC_PORT=~MMC_CS_PIN; //SD卡使能

delay_nus(250); //Wait MMC/SD ready...
for (i=0;i0x0f;i++)
{
Write_Byte_SPI(0xff); //send 74 clock at least!!!
}
//Send Command CMD0 to MMC/SD Card
retry=0;

do
{ //retry 200 times to send CMD0 command
temp=SD_Write_Command(0,0);
retry++;
if(retry==100)
{
;//CMD0 Error!
}
}
while(temp!=1);

//Send Command CMD1 to MMC/SD-Card
retry=0;
do
{ //retry 100 times to send CMD1 command
temp=SD_Write_Command(1,0);
retry++;
if(retry==100)
{
;
}
}
while(temp!=0);
retry=0;
SD_Write_Command(16,512); //設置一次讀寫(xiě)BLOCK的長(cháng)度為512個(gè)字節

MMC_PORT =MMC_CS_PIN; //MMC_CS_PIN=1; //set MMC_Chip_Select to high
return(0); //All commands have been taken.
}
//****************************************************************
//從SD卡讀一個(gè)扇區 Return 0 if no Error.
//******************************************************************
uchar SD_Read_Block(unsigned long address)
{
uchar temp=0;uint i=0;
reading=1;
temp=SD_Write_Command(17,address); //讀出RESPONSE
while (Read_Byte_SPI()!= 0xfe)
{;} //直到讀取到了數據的開(kāi)始頭0XFE,才繼續
for(i=0; i512; i++)
{
BUFFER[i]=Read_Byte_SPI();
}
Read_Byte_SPI();//CRC - Byte
Read_Byte_SPI();//CRC - Byte
reading=0;
MMC_PORT =MMC_CS_PIN; //關(guān)閉SD卡
return(temp);
}



關(guān)鍵詞: AVR SD卡接口

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>