历史上的今天
今天是:2025年01月16日(星期四)
2020年01月16日 | AVR单片机的SD卡接口程序设计
2020-01-16 来源:elecfans
/*SDCodeforM32L*/
/*Bypasyong*/
/*BaseICC6.31A*/
/************************************************************/
#include
#include
#include“1011.h”
#defineucharunsignedchar
#defineuintunsignedint
#defineMMC_CS_PINBIT(4)//PORTB.4
#defineMMC_PORTPORTB
ucharreading=0,a=0,pointer=0;
voidsd_port_init()

{
MMC_PORT|=MMC_CS_PIN;
}
ucharBUFFER[512];//扇区缓冲区
uinti=0;
voiddelay_nus(uintn)
{
unsignedcharb;
for(b=1;b;
}
//****************************************************************************
//SendaCommandtoMMC/SD-Card
//Return:thesecondbyteofresponseregisterofMMC/SD-Card
//****************************************************************************
ucharSD_Write_Command(ucharcmd,unsignedlongarg)
{
uchartmp;
ucharretry=0;
//MMC_PORT|=MMC_CS_PIN;//SD卡关闭
//send8CLOCkImpulse
Write_Byte_SPI(0xFF);
//setMMC_Chip_Selecttolow(MMC/SD-CardacTIve)
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
//Read_Byte_MMC();//readthefirstbyte,ignoreit.
do
{//Onlylast8biTIsusedhere.Readitout.
tmp=Read_Byte_SPI();
retry++;
}
while((tmp==0xff)&&(retry《100));//当没有收到有效的命令的时候
if(reading==0)
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卡使能
delay_nus(250);//WaitMMC/SDready.。.
for(i=0;i《0x0f;i++)
{
Write_Byte_SPI(0xff);//send74clockatleast!!!
}
//SendCommandCMD0toMMC/SDCard
retry=0;
do
{//retry200TImestosendCMD0command
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);
}
下一篇:AVR单片机对外部RAM的扩展
史海拾趣
|
我用的是nboot+eboot启动,下面是输信息。请高手指点一下。 \\par Mini(4k) NandBoot V2.0. [2007-09-28] \\par \\par \\par NAND Boot Start \\par NAND Boot End \\par Boot time=nTCNT*82uS. nTCNT=0x052f. \\par I/O Strength Max \ ...… 查看全部问答> |
|
在CE上Bluetooth设置PIN问题 我用的SDK是STANDARDSDK_500,可是这SDK里没有Btdrt.lib,因此找了个Btdrt.lib 但是在使用BthGetPINRequest()、BthSetPIN()函数还是不能用 可能是手动加入的Btdrt.lib关连到其它的LIB,这要如何解决? 或者谁做的,你 ...… 查看全部问答> |
|
wince6.0 是否支持SHLoadImageResource? 请各位帮帮忙看看! 我在windows moible 5.0 上使用SHLoadImageResource是可以的 而在wince6.0上 却找不到SHLoadImageResource 是不是wince6.0 不支持 SHLoadImageResource? … 查看全部问答> |
|
1. ok6410 买来2.3个月,具体我也不知道了。装了android系统后当时间看看。没真正开发过。720元。 2. lm3s8962 申请来的。芯片太贵,放弃学习。248元。加钱换cc2530板子最好,我有无限龙3700元那个套件的光盘 ...… 查看全部问答> |
|
#include <stdio.h> void main() { int x=3,y; y=––x+––x+x++; printf(\"x=%d y=%d\\n\",x,y); } x=2,y=3 不懂 ??????? &n ...… 查看全部问答> |
|
BIN优点,下载时二进制传输效率高,一个起始地址和长度(均可事先知道)搞定.因起始地址和长度在 下载一开始就可以知道,所以只需要擦除实际代码大小的FLASH,避免大FLASH空间小代码时擦除FLASH的时间和FLASH损耗. 缺点:当代码分段在不同地址时,如 ...… 查看全部问答> |




