主题 : 有人做过SD+FATFS+MINI2440的吗? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 33255
精华: 0
发帖: 13
金钱: 85 两
威望: 17 点
综合积分: 26 分
注册时间: 2010-11-28
最后登录: 2011-05-21
楼主  发表于: 2011-05-09 10:00

 有人做过SD+FATFS+MINI2440的吗?

程序乍都跑不对,读不出123。TXT的数据,这个是我的disk_read
DRESULT disk_read (
    BYTE_fat drv,        /* Physical drive nmuber (0..) */
    BYTE_fat *buff,        /* Data buffer to store read data */
    DWORD_fat sector,    /* Sector address (LBA) */
    BYTE_fat count        /* Number of sectors to read (1..255) */
)
{  
    int status;
    BYTE   rd_cnt;
    DRESULT res;
    int result;
    rd_cnt = 0;
    Uart_Printf("Block read test[ Polling read ]\n");
    
    rSDIFSTA = rSDIFSTA|(1<<16);    // FIFO reset

    rSDIDCON=(2<<22)|(1<<19)|(1<<17)|(1<<16)|(1<<14)|(2<<12)|((count)<<0);    //YH 040220

    rSDICARG=sector;//0x0;    // CMD17/18(addr)

RERDCMD:

        if(count<2)    // SINGLE_READ
        {
            rSDICCON=(0x1<<9)|(0x1<<8)|0x51;    // sht_resp, wait_resp, dat, start, CMD17
            if(!Chk_CMDend(17, 1))    //-- Check end of CMD17
            {
                goto RERDCMD;
            }        
        }
        else    // MULTI_READ
        {
            rSDICCON=(0x1<<9)|(0x1<<8)|0x52;    // sht_resp, wait_resp, dat, start, CMD18
            if(!Chk_CMDend(18, 1))    //-- Check end of CMD18
            {
                goto RERDCMD;
            }
        }

        rSDICSTA=0xa00;    // Clear cmd_end(with rsp)        

        while(rd_cnt < count)    // 512*block bytes
        {
            if((rSDIDSTA&0x20)==0x20) // Check timeout
            {
                rSDIDSTA=(0x1<<0x5);  // Clear timeout flag
                break;
            }
            status=rSDIFSTA;
            if((status&0x1000)==0x1000)    // Is Rx data?
            {
                *buff++=rSDIDAT;
                rd_cnt++;
            }
        }
        
    

    //-- Check end of DATA
    //if(!Chk_DATend())
    {
       // return 0;
    }
    rSDIDCON=rSDIDCON&~(7<<12);        
    rSDIFSTA=rSDIFSTA&0x200;    //Clear Rx FIFO Last data Ready, YH 040221
    rSDIDSTA=0x10;    // Clear data Tx/Rx end detect

    if(count>1)
    {
RERCMD12:    
    //--Stop cmd(CMD12)
        rSDICARG=0x0;        //CMD12(stuff bit)
        rSDICCON=(0x1<<9)|(0x1<<8)|0x4c;//sht_resp, wait_resp, start, CMD12

    //-- Check end of CMD12
        if(!Chk_CMDend(12, 1))
        {
            goto RERCMD12;
        }
        rSDICSTA=0xa00;    // Clear cmd_end(with rsp)
    }
    
    
    return 0;
}
级别: 新手上路
UID: 27808
精华: 0
发帖: 13
金钱: 65 两
威望: 13 点
综合积分: 26 分
注册时间: 2010-09-01
最后登录: 2015-11-15
1楼  发表于: 2011-05-09 23:40
这个你要注意参数匹配,还有就是FATFS里面的设备需要定义为 MMC/SD
级别: 新手上路
UID: 97825
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2013-11-06
最后登录: 2015-03-08
2楼  发表于: 2013-12-23 00:12
麻烦问一下,这个怎么弄啊,我刚学arm,现在光移植fatfs就弄头大了,非常希望你能帮帮忙啊