历史上的今天
返回首页

历史上的今天

今天是:2024年12月31日(星期二)

正在发生

2021年12月31日 | 基于51单片机的SD卡读卡器MMC存储器

2021-12-31 来源:eefocus

硬件设计

在这里插入图片描述

程序设计

#include


#define F_OSC  11059200//晶振平率Hz

#define F_BAUD 9600

#define RELOAD 256-F_OSC/12/32/F_BAUD

#define CR 0x0D        //回车


//定义SD卡需要的4根信号线

sbit SD_CLK = P1^4;

sbit SD_DI  = P1^6;

sbit SD_DO  = P1^5;

sbit SD_CS  = P1^7;


unsigned char xdata DATA[512];

//定义512字节缓冲区,注意需要使用 xdata关键字



//===========================================================

//写一字节到SD卡,模拟SPI总线方式

void SdWrite(unsigned char n)

{


    unsigned char i;

    

    for(i=8;i;i--)

    {

        SD_CLK=0;

        SD_DI=(n&0x80);

        n<<=1;

        SD_CLK=1;

        }

        SD_DI=1; 

    } 

//===========================================================

//从SD卡读一字节,模拟SPI总线方式

unsigned char SdRead()

{

    unsigned char n,i;

    for(i=8;i;i--)

    {

        SD_CLK=0;

        SD_CLK=1;

        n<<=1;

        if(SD_DO) n|=1;

    

    }

    return n;

}

//============================================================

//检测SD卡的响应

unsigned char SdResponse()

{

    unsigned char i=0,response;

    

    while(i<=8)

    {

        response = SdRead();

        if(response==0x00)

        break;

        if(response==0x01)

        break;

        i++;

    }

    return response;

//================================================================

//发命令到SD卡

void SdCommand(unsigned char command, unsigned long argument, unsigned char CRC)

{


    SdWrite(command|0x40);

    SdWrite(((unsigned char *)&argument)[0]);

    SdWrite(((unsigned char *)&argument)[1]);

    SdWrite(((unsigned char *)&argument)[2]);

    SdWrite(((unsigned char *)&argument)[3]);

    SdWrite(CRC);

}

//================================================================

//初始化SD卡

unsigned char SdInit(void)

{

    int delay=0, trials=0;

    unsigned char i;

    unsigned char response=0x01;

    

    SD_CS=1;

    for(i=0;i<=9;i++)

    SdWrite(0xff);

    SD_CS=0;

    

    //Send Command 0 to put MMC in SPI mode

    SdCommand(0x00,0,0x95);

    

    

    response=SdResponse();

    

    if(response!=0x01)

    {

        return 0;

    } 


    while(response==0x01)

    {

        SD_CS=1;

        SdWrite(0xff);

        SD_CS=0;

        SdCommand(0x01,0x00ffc000,0xff);

        response=SdResponse();

    } 


    SD_CS=1;

    SdWrite(0xff);

    return 1; 

}

//================================================================

//往SD卡指定地址写数据,一次最多512字节

unsigned char SdWriteBlock(unsigned char *Block, unsigned long address,int len)

{

    unsigned int count;

    unsigned char dataResp;

    //Block size is 512 bytes exactly

    //First Lower SS

    

    SD_CS=0;

    //Then send write command

    SdCommand(0x18,address,0xff);

    

    if(SdResponse()==00)

    {

        SdWrite(0xff);

        SdWrite(0xff);

        SdWrite(0xff);

        //command was a success - now send data

        //start with DATA TOKEN = 0xFE

        SdWrite(0xfe);

        //now send data

        for(count=0;count        

        for(;count<512;count++) SdWrite(0);

        //data block sent - now send checksum

        SdWrite(0xff); //两字节CRC校验, 为0XFFFF 表示不考虑CRC

        SdWrite(0xff);

        //Now read in the DATA RESPONSE token

        dataResp=SdRead();

        //Following the DATA RESPONSE token

        //are a number of BUSY bytes

        //a zero byte indicates the MMC is busy

        

        while(SdRead()==0);

        

        dataResp=dataResp&0x0f; //mask the high byte of the DATA RESPONSE token

        SD_CS=1;

        SdWrite(0xff);

        if(dataResp==0x0b)

        {

        //printf("DATA WAS NOT ACCEPTED BY CARD -- CRC ERRORn");

        return 0;

        }

        if(dataResp==0x05)

        return 1;

        

        //printf("Invalid data Response token.n");

        return 0;

    }

    //printf("Command 0x18 (Write) was not received by the MMC.n");

    return 0;

}


文件仅供参考


链接:https://pan.baidu.com/s/1h3ZnGUPP5o_8_NsVMwVQuA

提取码:4ebs

推荐阅读

史海拾趣

GAIA Converter Inc公司的发展小趣事

随着全球化进程的加速,锋鸣电子(上海总部)于2015年启动了国际化战略。公司首先在东南亚地区设立生产基地,利用当地的成本优势扩大产能。随后,锋鸣电子积极参加国际展会,拓展海外市场,与多家国际知名企业建立了合作关系。通过国际化战略的实施,锋鸣电子不仅提升了品牌知名度,还实现了销售收入的快速增长。

C.K TOOLS公司的发展小趣事

进入21世纪,C.K TOOLS不满足于现有的技术成果,开始与冶金和设计工程师合作,探索新材料在工具制造中的应用。他们发现了一种新型合金材料,具有出色的硬度和耐磨性,非常适合用于制造电子制造中使用的切割和剥线工具。经过多次试验和改进,C.K TOOLS成功推出了这一系列新型工具,并在电子制造领域取得了显著的市场份额。

Electronic Transistors Corp公司的发展小趣事

作为一家领先的电子企业,ETC公司深知自身肩负的社会责任。公司积极履行社会责任,关注环境保护和资源节约。ETC通过引进先进的生产工艺和设备,减少生产过程中的能源消耗和废弃物排放。同时,公司还积极参与公益事业和社会活动,为社会做出了积极贡献。这些举措不仅提升了ETC的企业形象,也为公司的可持续发展奠定了坚实的基础。

Davies Molding公司的发展小趣事

Davies Molding公司自创立之初,就将产品质量视为企业的生命线。在早期,公司创始人意识到,只有提供高品质的塑料注塑成型产品,才能在竞争激烈的电子行业中立足。因此,公司投入大量资源在研发、生产和质量控制上,确保每一件产品都符合严格的标准。这种对品质的坚持,不仅赢得了客户的信任,也为Davies Molding公司赢得了良好的口碑。

AMS公司的发展小趣事

Davies Molding公司在追求经济效益的同时,始终关注社会责任和可持续发展。公司积极参与环保公益活动,推动绿色生产,降低对环境的影响。此外,Davies Molding公司还注重员工福利和社会公益事业,为员工提供良好的工作环境和发展空间,为社会做出积极贡献。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

东软载波(EastSoft)公司的发展小趣事

凭借卓越的产品性能和技术实力,东软载波获得了多项荣誉和认证。公司被评为“国家绿色工厂”,多款产品通过国内外权威认证。同时,公司还荣获了多项行业奖项和荣誉称号,如“2022 PLC互联互通·基石奖”、“2022年山东民营企业新一代信息技术行业领军10强”等。这些荣誉的获得充分证明了东软载波在电子行业中的领先地位和实力。

问答坊 | AI 解惑

凌阳——2005年电子竞赛论文精选!

本帖最后由 paulhyde 于 2014-9-15 09:17 编辑 貌似还比较经典,有兴趣的可以看看~~~  …

查看全部问答>

大家好,请问谁用过MAX3420的USB芯片呢?有问题请教。

大家好,请问谁用过MAX3420的USB芯片呢?有问题请教。 以往的USB芯片没有安装驱动时候直接连接到计算机上会提示发现新硬件,我手里这个MAX3420芯片连接到主机后,什么提示都没有,但也不应该是芯片坏了。在设备管理器中也看不见这个设备,好奇怪, ...…

查看全部问答>

菜鸟提问,请指教。关于中断

void int0_init(void) {         if(rEINTPEND == (1…

查看全部问答>

上拉下拉寄存器的作用是什么

小弟初学驱动,不明白上拉下拉寄存器的作用是什么?希望能解释详细点,不胜感激!!!…

查看全部问答>

wince5.0 S3c2440官方bsp,带camera驱动

wince5.0 S3c2440官方bsp,带camera驱动: http://www.itxxh.cn/book/2440/zaxsw1565.shtml WINCE5.0系统下,OV9650 CAMERA驱动程序: http://www.itxxh.cn/book/2440/zaxsw1568.shtml…

查看全部问答>

怎么样的汇编代码才算绝对地址代码,生成obj里的也没有浮动地址。

怎么样的汇编代码才算绝对地址代码,生成obj里的也没有浮动地址。 是不是代码里不要段这个伪操作就可以了?…

查看全部问答>

LED照明设计注意技术细节

LED光源的技术日趋成熟,每瓦发光流明迅速增长,促使其逐年递减降价。以1W LED光源为例,2008年春的价格已是2006年春的价格三分之一,2009年春将降至2006年的四分之一。     LED绿色灯具的海量市场和持续稳定数年增长需求将是集成电路 行业继V ...…

查看全部问答>

LM3s8962体验之五……精确的位操作

Bit-banding 又称为:极细微的位处理操作, 精确的位操作,位别名区。 为了减少读-修改-写(RMW)操作的时间,ARM在Cortex-M3处理器中引入了bit-banding技术。在bit-banding使能的处理器中,存储器映射的特定区域(SRAM和外设区)能够使用地址别 ...…

查看全部问答>

有个盗版ULINK的广告太肆无忌惮了

大幅的图片,严重影响看贴的心情要盗版也要搞点稍微有技术含量的啊,比如ULINK2和JLINK,盗版ULINK多没面子…

查看全部问答>