搜索
bottom↓
回复: 5

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

[复制链接]

出0入0汤圆

发表于 2012-9-14 15:34:09 | 显示全部楼层 |阅读模式
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的操作仅仅初始化不同,读写函数基本一模一样?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 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,大端小端应该是一样的!
    ----------纯属个人理解,不对之处欢迎指出!

出0入0汤圆

 楼主| 发表于 2012-9-16 23:24:02 | 显示全部楼层
sdhc卡在非文件系统下进行扇区的读写操作,发现插在电脑上要么无法识别,要么可以显示盘符但是无法格式化。


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

出0入0汤圆

 楼主| 发表于 2012-9-18 09:05:21 | 显示全部楼层
买了一个新的读卡器,插到电脑上,就提示尚未格式话,
顿时我沉重的心情没了

出0入0汤圆

发表于 2013-4-10 14:42:02 | 显示全部楼层
朋友。我最近也在搞SD卡读写文件,不过没弄出来

出0入0汤圆

发表于 2013-4-10 14:43:34 | 显示全部楼层
可以请教下你这个具体该怎么弄么?我的f_open函数返回FR_OK,但是就是SD卡中什么都看不到。什么反应都没有。望指教。衷心感谢。我的QQ。374075382
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 03:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表