OpenEdv-开源电子网

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

关于SD卡的SDIO模式下移植不成功

[复制链接]

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
发表于 2015-8-18 08:35:55 | 显示全部楼层 |阅读模式
5金钱
调用了官方的SDIO的库
初始化 串口信息打印如下:
 这是一个sd卡实验。。。。。

 SD_Init 初始化成功

 CardType is : 1 

 CardCapacity is : 2014314496
 CardBlockSize is : 1024 
 RCA is :8653  
 ManufacturerID is :0 


RCA的值显示为8653
 ManufacturerID的值显示为0,感觉不太对
就初始化是成功了的

还有我对其进行了擦除测试
SD_EraseTest(); //擦除测试

程序会死在下面那段里面
  while ((DMAEndOfTransfer == 0x00) && (TransferEnd == 0) && (TransferError == SD_OK) && (timeout > 0))
  {
    timeout--;
  }
不知道是什么问题,该如何解决啊?

最佳答案

查看完整内容[请看2#楼]

回复【8楼】正点原子: --------------------------------- 现在可以了,原因是没有分配内存.. 那么问题来了,挂载SD卡的时候不能自动分配吗?用多少分配多少, 还是因为我们挂载的时候需要给fs[0]分配一部分空间?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-18 08:35:56 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
现在可以了,原因是没有分配内存..
那么问题来了,挂载SD卡的时候不能自动分配吗?用多少分配多少,
还是因为我们挂载的时候需要给fs[0]分配一部分空间?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-18 12:30:47 | 显示全部楼层
参考我们的SD卡例程吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-18 14:17:59 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
用了你们的例程之后 初始化也是可以成功的
Card Type:SDHC V2.0
Card ManufacturerID:0
Card RCA:8479
Card Capacity:16000 MB
Card BlockSize:512

但是读取扇区里面的内容却不行 没法读取
if(SD_ReadDisk(buf,0,1)==0) //读取0扇区的内容
这条语句进不去 一直读取不到 可把我给愁死了
我是用杜邦线外接SD卡的模块的,这样没什么问题吧?
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-18 14:30:57 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
单步调试的时候发现在u8 SD_ReadDisk(u8*buf,u32 sector,u8 cnt)这个函数里面
if(cnt==1)sta=SD_ReadBlock(buf,lsector,512);     //单个sector的读操作
sta变成了0x07,所以不等于SD_OK
然后我又进SD_ReadBlock中寻找问题
errorstatus返回的值为0x00,sta=errorstatus;
但是sta却等于0x07了。。。。更加不懂了。。。。
回复

使用道具 举报

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
发表于 2015-8-18 18:14:12 | 显示全部楼层
试试用sdio单线模式
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-18 19:11:18 | 显示全部楼层
回复【5楼】Theone:
---------------------------------
这个跟杜邦线的长度有没有关系?
回复

使用道具 举报

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
发表于 2015-8-18 21:39:02 | 显示全部楼层
回复【6楼】wait小乖:
---------------------------------
可能有关系,sdio的频率比较高。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-18 22:59:10 | 显示全部楼层
回复【3楼】wait小乖:
---------------------------------
有问题啊。。。
杜邦线很容易受干扰,用单线模式试试吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-19 08:39:13 | 显示全部楼层
回复【7楼】Theone:
---------------------------------
    Status = SD_WaitWriteOperation();    //等待dma传输结束
    while(SD_GetStatus() != SD_TRANSFER_OK); //等待sdio到sd卡传输结束

一直在等待SDIO到SD卡传输结束,SD_GetStatus() 的值已经变成SD_CARD_ERROR 0xff了
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-19 08:39:28 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
    Status = SD_WaitWriteOperation();    //等待dma传输结束
    while(SD_GetStatus() != SD_TRANSFER_OK); //等待sdio到sd卡传输结束

一直在等待SDIO到SD卡传输结束,SD_GetStatus() 的值已经变成SD_CARD_ERROR 0xff了
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-19 11:01:25 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
早上又用了试了下你们的实验38
 LCD ID:ffff
Card Type:SDSC V2.0
Card ManufacturerID:0
Card RCA:8653
Card Capacity:1921 MB
Card BlockSize:1024

SECTOR 0 DATA:
eb 3c 90 4d 53 44 4f 53 35 2e 30 0 2 40 6 0 2 0 2 0 0 f8 f1
 0 3f 0 ff 0 0 0 0 0 0 8 3c 0 80 0 29 9 54 b5 ae 4e 4f 20 4e 
41 4d 45 20 20 20 20 46 41 54 31 36 20 20 20 33 c9 8e d1
 bc f0 7b 8e d9 b8 0 20 8e c0 fc bd 0 7c 38 4e 24 7d 24 8b 
c1 99 e8 3c 1 72 1c 83 eb 3a 66 a1 1c 7c 26 66 3b 7 26 8a 
57 fc 75 6 80 ca 2 88 56 2 80 c3 10 73 eb 33 c9 8a 46 10
 98 f7 66 16 3 46 1c 13 56 1e 3 46 e 13 d1 8b 76 11 60 
89 46 fc 89 56 fe b8 20 0 f7 e6 8b 5e b 3 c3 48 f7 f3 1 46
 fc 11 4e fe 61 bf 0 0 e8 e6 0 72 39 26 38 2d 74 17 60 b1
 b be a1 7d f3 a6 61 74 32 4e 74 9 83 c7 20 3b fb 72 e6 eb
 dc a0 fb 7d b4 7d 8b f0 ac 98 40 74 c 48 74 13 b4 e bb 7 0 
cd 10 eb ef a0 fd 7d eb e6 a0 fc 7d eb e1 cd 16 cd 19 26 8b 
55 1a 52 b0 1 bb 0 0 e8 3b 0 72 e8 5b 8a 56 24 be b 7c 8b
 fc c7 46 f0 3d 7d c7 46 f4 29 7d 8c d9 89 4e f2 89 4e f6 c6 
6 96 7d cb ea 3 0 0 20 f b6 c8 66 8b 46 f8 66 3 46 1c 66 8b
 d0 66 c1 ea 10 eb 5e f b6 c8 4a 4a 8a 46 d 32 e4 f7 e2 3 46 
fc 13 56 fe eb 4a 52 50 6 53 6a 1 6a 10 91 8b 46 18 96 92 33
 d2 f7 f6 91 f7 f6 42 87 ca f7 76 1a 8a f2 8a e8 c0 cc 2 a cc b8 
1 2 80 7e 2 e 75 4 b4 42 8b f4 8a 56 24 cd 13 61 61 72 b 40 
75 1 42 3 5e b 49 75 6 f8 c3 41 bb 0 0 60 66 6a 0 eb b0 42 4f 
4f 54 4d 47 52 20 20 20 20 d a 52 65 6d 6f 76 65 20 64 69 73
 6b 73 20 6f 72 20 6f 74 68 65 72 20 6d 65 64 69 61 2e ff d a 44
 69 73 6b 20 65 72 72 6f 72 ff d a 50 72 65 73 73 20 61 6e 79 20 
6b 65 79 20 74 6f 20 72 65 73 74 61 72 74 d a 0 0 0 0 0 0 0 ac cb d8 55 aa 
DATA ENDED
里面的数据对嘛?
我可是刚格式化过的,总感觉不太对
回复

使用道具 举报

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
发表于 2015-8-19 12:12:59 | 显示全部楼层
回复【11楼】wait小乖:
---------------------------------
你可以用winhex打开sd卡对比看看
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-19 13:36:24 | 显示全部楼层
回复【12楼】Theone:
---------------------------------
用了WINHEX打开来看了 确实是这样的 没错 谢谢指导
说明原子的例程很好用 至少对于测试硬件来说是没有问题的
接下来继续搞我的SDIO
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-19 17:43:24 | 显示全部楼层
回复【12楼】Theone:
---------------------------------
还是一直死在 while(SD_GetStatus() != SD_TRANSFER_OK);这条语句里面了 
实在是想不通为什么............................
回复

使用道具 举报

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
发表于 2015-8-19 19:59:50 | 显示全部楼层
回复【14楼】wait小乖:
---------------------------------
官方库很多bug的 说不清楚
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-20 11:02:32 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
原子哥 我想用SDIO + fatfs 是参照你们的例程39FATFS实验吗?
39的实验是flash的吧????
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-20 13:13:10 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
我根据你们的实验39做了一个简单的测试:
以下是我修改的部分:
    FATFS fs;
    FIL file; 
    res = f_mount(&fs,"0:",1);
if(res != 0)
{
printf("f_mount failed.\r\n");
}
else
{
printf("f_mount successed.\r\n");
}
res = f_open(&file,"0:/data111.txt",FA_CREATE_NEW|FA_WRITE);
if(res != 0)
{
printf("f_open failed.\r\n");
}
else
{
printf("f_open successed.\r\n");
}
f_close(&file);
printf("FATFS OK!\r\n");
我没有申请内存分配,想直接创建一个TXT,在f_open的时候 res的返回值是非0,
printf("f_open failed.\r\n");
为什么会创建TXT失败呢????
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-20 13:19:55 | 显示全部楼层
回复【17楼】wait小乖:
---------------------------------
res = 0x0c  FR_NOT_ENABLED
The volume has no work area
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-21 23:03:33 | 显示全部楼层
回复【19楼】wait小乖:
---------------------------------
要给fs[0]分配好就可以了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-23 14:32:18 | 显示全部楼层
回复【20楼】正点原子:
---------------------------------
假设我不给fs[0]分配内存地址 ,
res = f_mount(0, &fs);
res = f_open(&file, "mytest.txt", FA_OPEN_ALWAYS|FA_WRITE);
我用的是0.09的FATFS 
这样是否就可以不分配内存给fs[0]了,我在我那里没找到分配的内存,所以觉得是自动分配的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-23 22:28:38 | 显示全部楼层
回复【21楼】wait小乖:
---------------------------------
这样就死翘翘了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-24 10:46:45 | 显示全部楼层
回复【22楼】正点原子:
---------------------------------
问题是我这样也能写入数据 用读卡器也可以在电脑上看到数据哈
所以对这第二种方法不是很理解~
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-27 23:55:51 | 显示全部楼层
回复【23楼】wait小乖:
---------------------------------
那是你运气好,下次你遇到问题的时候,就头大了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

23

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2015-7-1
在线时间
2 小时
 楼主| 发表于 2015-8-28 08:16:02 | 显示全部楼层
回复【24楼】正点原子:
---------------------------------
所以 不解了 ,必须得开辟一块内存出来吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-31 00:11:51 | 显示全部楼层
回复【25楼】wait小乖:
---------------------------------
必须
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 22:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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