number007cool 发表于 2012-9-14 15:34:09

2440移植fatfs关于读写sd卡底层函数的问题

U8 SD_ReadMultipleBlock(U32 blockaddr,U16 blocknum,U8 *buf)
{
        int status;
       
        rd_cnt=0;
        rSDIFSTA=rSDIFSTA|(1<<16);
        rSDIDCON=(2<<22)|(1<<19)|(1<<17)|(Wide<<16)|(1<<14)|(2<<12)|(blocknum<<0);
        rSDICARG=blockaddr<<9;
       
RERDCMD:

        rSDICCON=(0x1<<9)|(0x1<<8)|0x52;
       
        if(!Chk_CMDend(18, 1))
                goto RERDCMD;

        rSDICSTA=0xa00;
       
        while(rd_cnt<512*blocknum)
        {
                if((rSDIDSTA&0x20)==0x20)
                {
                        rSDIDSTA=(0x1<<0x5);
                        break;
                }
                status=rSDIFSTA;
                if((status&0x1000)==0x1000)
                {
                        *buf++=rSDIDAT8;
                        rd_cnt++;
                }
        }
       
        if(!Chk_DATend())
        {
                Uart_Printf("Data error!\n");
                return 1;
        }
               
        rSDIDCON=rSDIDCON&~(7<<12);
        rSDIFSTA=rSDIFSTA&0x200;
        rSDIDSTA=0x10;
       
RERCMD12:

        rSDICARG=0x0;
        rSDICCON=(0x1<<9)|(0x1<<8)|0x4c;
       
        if(!Chk_CMDend(12, 1))
                goto RERCMD12;
               
        rSDICSTA=0xa00;
               
        return 0;       
}

------------------------------------------------------------
这个地方时按字节操作的*buf++=rSDIDAT8;
buf是8位的,而定义rSDIDAT8的时候,#define rSDIDAT8   (*(volatile unsigned char *)0x5a000040)        //SDI data

而这个定义是在小端模式下。

但是看又说sd是大端存储,故而应定义成大端模式。。

这个地方比较纠结:
1、把rSDIDAT8   定义的时候 取的是一个字节的地址,这样坐正确么?或该怎么样处理?

2、大小端到底该怎么配置,LD_WORD等在读写底层驱动中是否使用?ads下是否必须定义成函数形式?


3、sdhc的操作和sd的操作仅仅初始化不同,读写函数基本一模一样?

rjinglan 发表于 2012-9-15 23:53:56

关于大端小端我的理解是;当以单字节去操作时是没有区别的(不知道对不对!),大端和小端的区别是在于存一个大于一个字节的情况,如32bit的平台下 存一个int 型数据在地址0x00000000,0x12345678,在小端时候:0x0000 0000-->0x78, 0x0000 0001-->0x56,0x0000 0002-->0x34, 0x0000 0004-->0x12;而大端为:0x0000 0000-->0x12, 0x0000 0001-->0x34,0x0000 0002-->0x56, 0x0000 0004-->0x78,;所以我觉得单从一个字节的写入和读出跟大小端没啥关系,比如你要向0x0000 0000 写0x88,大端小端应该是一样的!
    ----------纯属个人理解,不对之处欢迎指出!{:smile:}

number007cool 发表于 2012-9-16 23:24:02

sdhc卡在非文件系统下进行扇区的读写操作,发现插在电脑上要么无法识别,要么可以显示盘符但是无法格式化。


再来进行非扇区读写操作发现失败 ~   我的这张卡是不是废掉了?!{:mad:}

number007cool 发表于 2012-9-18 09:05:21

买了一个新的读卡器,插到电脑上,就提示尚未格式话,
顿时我沉重的心情没了

为了FAT 发表于 2013-4-10 14:42:02

朋友。我最近也在搞SD卡读写文件,不过没弄出来

为了FAT 发表于 2013-4-10 14:43:34

可以请教下你这个具体该怎么弄么?我的f_open函数返回FR_OK,但是就是SD卡中什么都看不到。什么反应都没有。望指教。衷心感谢。我的QQ。374075382
页: [1]
查看完整版本: 2440移植fatfs关于读写sd卡底层函数的问题