打印

单片机初始化SD卡失败,大圣诞的,我要疯掉了

[复制链接]
2710|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jyxielong|  楼主 | 2010-12-25 20:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jyxielong 于 2010-12-25 20:23 编辑

调了两天了。。。。还在初始化。。。汗啊。。。。

MCU mega32 (系统电压3.1V),1M时钟
我用JTAG调试,在初始化后面加断点,发现程序一直在发送CMD0那里死循环
用示波器观察发现,SPI发送出去的数据和数组里的一样,但是MISO引脚上的响应信号一直是高电平(0xff)。。。这是什么原因?
硬件上  我直接用杜邦线和SD卡的脚焊在一起,然后连到单片机IO口上。。。

#include"avr/io.h"
#include"util/delay.h"
volatile unsigned char RR=12,retry=0;
volatile unsigned char i=0,j=0;
unsigned char CMD[6]={0x40,0x00,0x00,0x00,0x00,0x95};
unsigned char RR1[6];
void SPI_init()
{
    DDRB|=(1<<;PB4);   // SS端设置为输出
    DDRB|=(1<<;PB5);   // MOSI端口设置为输出
    DDRB&=~(1<<;PB6);  // MISO端口设置为输入
    DDRB|=(1<<;PB7);   
    SPCR=0x50;//主机模式,使能SPI,时钟4分频,起始沿采样,数据高位在前
    PORTB|=(1<<;PB4);//SS=1;片选不使能
    PORTB=0xff;//全部IO口使能内部上拉
}

unsigned char spi_sendB(unsigned char temp)
{
    unsigned char back=0;
    SPDR=temp;
    while(!(SPSR&(1<<SPIF)));//等待发送完成
//    asm("nop");
    back=SPDR;
    return back;
}

int main()
{
    _delay_ms(2000);
    SPI_init();
    _delay_ms(2000);


    for(i=0;i<20;i++)//至少74个时钟周期
    {
        spi_sendB(0xff);
    }
    PORTB&=~(1<<;PB4);//选中片选
    do
    {
        for(i=0;i<6;i++)//发送CMD0命令,设置为SPI模式
        {
            RR=spi_sendB(CMD);            
        }
    //    retry++;        
    }
    while(RR!=1);
    。//在这里加断点,程序一直到不了这里
    。
    。
}

相关帖子

沙发
jyxielong|  楼主 | 2010-12-25 20:32 | 只看该作者
我*,程序都在笑我了

使用特权

评论回复
板凳
古道热肠| | 2010-12-25 23:03 | 只看该作者
要检查硬件连接是否对了.用可信的硬件平台调软件,用可信的软件测试硬件是否是完好的.别搞得软件和硬件没有一个靠得住的,那问题就难找了.

使用特权

评论回复
地板
zhuliang123456| | 2011-8-12 15:21 | 只看该作者
你只是一直在发送cmd0,并没有专门等它的响应

使用特权

评论回复
5
lixiaoxu2meng| | 2011-11-21 14:59 | 只看该作者
顶楼主 我也遇到过同样的问题 还未解决

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

41

帖子

1

粉丝