OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2683|回复: 2

SDIO模式读取SD卡的问题,分不多 但是跪求大神帮忙小弟感激不尽

[复制链接]

17

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
531
金钱
531
注册时间
2015-12-2
在线时间
164 小时
发表于 2016-10-26 20:03:18 | 显示全部楼层 |阅读模式
用的原子哥的程序,但是SD卡是自己家里找的,256MB 大小 SDSC V1.1卡 初始化成功了,我用SPI模式读写的时候都OK得  但是当我用SDIO读写扇区的时候,再程序内卡死了,卡在
while(!(SDIO->STA&((1<<10)|(1<<4)|(1<<1)|(1<<3)|(1<<9))))//êy&#190;Y&#191;é·¢&#203;í3é1|/&#207;&#194;ò&#231;/CRC/3&#172;ê±/&#198;eê&#188;&#206;&#187;′í&#206;ó
                {
                        if(SDIO_GetFlagStatus(SDIO_FLAG_TXFIFOHE) != RESET)                                                        //·¢&#203;í&#199;&#248;°&#235;&#191;&#213;,±íê&#190;&#214;áéù′&#230;á&#203;8&#184;&#246;×&#214;
                        {
                                if((tlen-bytestransferred)<SD_HALFFIFOBYTES)//2&#187;1&#187;32×&#214;&#189;úá&#203;
                                {
                                        restwords=((tlen-bytestransferred)%4==0)?((tlen-bytestransferred)/4)(tlen-bytestransferred)/4+1);
                                       
                                        for(count=0;count<restwords;count++,tempbuff++,bytestransferred+=4)
                                        {
                                                SDIO_WriteData(*tempbuff);
                                        }
                                }else
                                {
                                        for(count=0;count<8;count++)
                                        {
                                                SDIO_WriteData(*(tempbuff+count));
                                        }
                                        tempbuff+=8;
                                        bytestransferred+=32;
                                }
                                timeout=0X3FFFFFFF;        //D′êy&#190;Yò&#231;3&#246;ê±&#188;&#228;
                                SDIO_ClearFlag(SDIO_FLAG_TXFIFOHE);
                        }else
                        {
                                if(timeout==0)return SD_DATA_TIMEOUT;
                                timeout--;
                        }
                }

这里,读取SDIO->STA的内容是0x00045000,也就是第12,14,18位为1.
所以可以进while,可以进if(SDIO_GetFlagStatus(SDIO_FLAG_TXFIFOHE) != RESET)       
但是里面已经没有数据了,于是 就这样一直while。。。。
请教大神,请教原子哥,这是啥问题啊
飞飞飞飞飞
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
531
金钱
531
注册时间
2015-12-2
在线时间
164 小时
 楼主| 发表于 2016-10-26 20:04:20 | 显示全部楼层
这段代码是在函数 SD_Error SD_WriteBlock( u8 *buf,  long long addr,  u16 blksize) 里面的
回复 支持 反对

使用道具 举报

17

主题

80

帖子

0

精华

高级会员

Rank: 4

积分
531
金钱
531
注册时间
2015-12-2
在线时间
164 小时
 楼主| 发表于 2016-10-26 20:28:31 | 显示全部楼层
有没有哪位大哥大姐能给解答一下这是为什么啊?我不知道哪里有问题了。。。。。在线等 好心塞
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 11:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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