主题 : mini2440开发板 SD卡读写问题 裸机开放 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 66049
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
综合积分: 6 分
注册时间: 2012-03-25
最后登录: 2012-03-28
楼主  发表于: 2012-03-25 21:20

 mini2440开发板 SD卡读写问题 裸机开放

SDI 块大小寄存器(SDIBSize)这个寄存器,赋值0x200,之后向发SDI 数据寄存器(SDIDAT)这个里边写入32字节的数据,循环写入128次,应该就能发512字节了吧。可是为何我发送后它一直处于数据处理的状态。而当我循环512次的话。就不会有这情况了呢?
代码是这样的:
    SDIBSIZE = 0x200;              //传输数据块大小为512字节(128字)    
    /*设置数据控制寄存器:字传输,块数据传输,4bit 数据传输,开始数据传输,
    数据发送模//式,共写1个块     */
    SDIDCON=(2<<22)|(1<<20)|(1<<17)|(1<<16)|(1<<14)|(3<<12)|(1<<0);
    //CMD24
    SDICARG = addr;
    SDICCON=(0x1<<9)|(0x1<<8)|0x58;    //sht_resp, wait_resp, dat, start, CMD24
    if(!Chk_CMDend(24, 1))    //-- Check end of CMD24
        return 0;
    SDICSTA=0xa00;    // Clear cmd_end(with rsp)
    while (wt_cnt < 128)    
    {    
        status=SDIFSTA;    
        if ((status&0x2000)==0x2000)    
        {    
            temp = (*buffer++)<<24;    
            temp |= (*buffer++)<<16;    
            temp |= (*buffer++)<<8;    
            temp |= *buffer++;    
            SDIDAT = temp;  
            wt_cnt++;    
        }    
    }
    if(!Chk_DATend())
                           return 0;
这样的话当到达if(!Chk_DATend())这行代码的时候。会死循环在里边。因为数据一直处于处理的状态。。
哪位大虾来帮帮忙下。
附件: sdi.rar (3 K) 下载次数:16