OpenEdv-开源电子网

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

STM32的SDIO挑卡是不是很严重的那个,原子哥和各位大侠们的见解呢

[复制链接]

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-1-3 12:31:14 | 显示全部楼层 |阅读模式
最近完成了STM32的SDIO驱动读写TF卡,函数没问题了,是改自官网的版本,测试了读写一个块大小成功了,但是上文件系统的时候(FatFs R0.09b版本),文件系统里面调用卡初始化函数是,我jtag跟踪到了卡上电函数就失败了,但是在上电函数里面我一步一步的下去它又成功了,全速不行,没找到原因

下面是我的串口打印信息
LCD Drive ID is: 9341
Card Type: SDSC V2.0
Card ManufacturerID: 0
Card RCA: 8649
Card Capacity: 953 MB
Card BlockSize: 512

sd write ok
sd read ok
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000

下面是测试函数
memset(SD_Testwbuff, 0xaa, 200); 

if(SD_WriteDisk((uint32_t)0x0, SD_Testwbuff, 1) == SD_OK) //写SD卡数据
{
printf("sd write ok\t\n");
}
else printf("sd write error\r\n");

delay_ms(10);

if(SD_ReadDisk((uint32_t)0x0, SD_Testrbuff, 1) == SD_OK) //读SD卡数据
{
printf("sd read ok\t\n");
for(hjk = 0;hjk < 512;hjk++) printf("%x",SD_Testrbuff[hjk]);
}
else printf("sd read error\r\n");


移植文件系统的时候串口打印信息
f_mount is: 0
f_mount is: 0
f_open is: 3
f_read is: 9
f_close is: 9
f_open is: 3
f_write is: 9
f_close is: 9

测试代码
FATFS *fs[2]; //文件系统相关定义
FATFS fr;
UINT br,bw;
FIL *fsrc;
FIL *fdts;
FRESULT resp; //FatFs通用结果码

下面是实现函数

resp = f_mount(0, fs[0]); //挂载SD卡
printf("f_mount is: %d\r\n",resp);

resp = f_mount(1, fs[1]); //挂载flash卡
printf("f_mount is: %d\r\n",resp);

resp = f_open(fsrc, "0:demo.txt", FA_OPEN_EXISTING | FA_READ);
printf("f_open is: %d\r\n",resp);

resp = f_read(fsrc, SDIO_READ, sizeof(SDIO_READ), &br );
printf("f_read is: %d\r\n",resp);

resp = f_close(fsrc);
printf("f_close is: %d\r\n",resp);


resp = f_open(fdts, "0:test.txt", FA_CREATE_ALWAYS | FA_WRITE);
printf("f_open is: %d\r\n",resp);

resp = f_write(fdts, SDIO_READ, sizeof(SDIO_READ), &bw);
printf("f_write is: %d\r\n",resp);
resp = f_close(fdts);
printf("f_close is: %d\r\n",resp);

大侠们能帮忙看下么?

参考了原子哥的FatFs实验的部分代码,还是不行,至于外挂的FLASH没试













ffconf.h

7.48 KB, 下载次数: 820

diskio.c

8.57 KB, 下载次数: 784

sdio_sdcard.h

20.22 KB, 下载次数: 708

sdio_sdcard.c

85.63 KB, 下载次数: 791

现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

226

主题

482

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1680
金钱
1680
注册时间
2012-4-10
在线时间
105 小时
发表于 2014-1-3 12:51:42 | 显示全部楼层
不是这样的,楼主,和板子走线有关系的,等长走线很重要,我之前做了和板子不行,后面等长走线了什么卡都可以读了
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-1-3 12:57:21 | 显示全部楼层
回复【2楼】344864311:
---------------------------------
Card ManufacturerID: 0
这里么,读取的制造商ID是0,说明这卡是山寨的,晕、

我用的是原子的战舰STM32开发板,我画的板子还没发出去做

学习了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2014-1-3 16:31:44 | 显示全部楼层
SDIO的TF卡,走线有学问的,楼上说的没错,跟走线很大关系
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-1-3 16:54:33 | 显示全部楼层
回复【4楼】lxj19901115:
---------------------------------
恩,这个记住了

但是我在原子的战舰STM32开发板上面就是调不通
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-1-3 17:23:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
发表于 2014-1-3 17:23:37 | 显示全部楼层
回复【5楼】Badu_Space:

回复【4楼】lxj19901115:
---------------------------------
恩,这个记住了
但是我在原子的战舰STM32开发板上面就是调不通

------------------------------------------------------------------------------------------------------------------------------------------
  我感觉战舰板的SPI方式的SD卡“皮实”,去了速度慢点意外,没发现挑卡故障,而SDIO方式,挑拣太多,试过几种卡,有的就不易通过。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-1-3 17:27:35 | 显示全部楼层
回复【7楼】dong:
---------------------------------
我测试了读取一个block的时候完全没问题,但是上文件系统的时候,文件系统再次调用SD_Init()函数初始化卡的时候就出问题了,SD_powerOn()函数就过不了,但是jtag单步进去SD_powerOn()函数它又能初始化成功,f_open()等等函数还是不行
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
发表于 2014-1-3 18:08:23 | 显示全部楼层
回复【8楼】Badu_Space:

回复【7楼】dong:
---------------------------------
我测试了读取一个block的时候完全没问题,但是上文件系统的时候,文件系统再次调用SD_Init()函数初始化卡的时候就出问题了,SD_powerOn()函数就过不了,但是jtag单步进去SD_powerOn()函数它又能初始化成功,f_open()等等函数还是不行

==================================================
这SDIO的SD卡是很诡秘的,也搞得我头昏脑涨的,不行,干脆用SPI得了。。。。。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-3 20:39:46 | 显示全部楼层
回复【3楼】Badu_Space:
---------------------------------
你用我们提供的SDIO例程(扩展例程)也不能发现你的卡么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-1-4 10:42:16 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
上次在论坛上下载了,试了下,卡能识别到,就是文件系统出错,重新调用卡初始化函数就出错返回,大部分在上电过程

可能这个卡是山寨卡的原因吧,买个正版的卡试下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-5 16:36:53 | 显示全部楼层
回复【11楼】Badu_Space:
---------------------------------
哦哦...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-1-10 13:10:37 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
原子哥,前些天买了张闪迪的8G卡,读取的制造商ID是3,blocksize = 512,容量计算得到7580MB,算是正版了吧。

不过我上同样的代码还是不行,现在连读写块都出错了,晕
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-10 13:35:22 | 显示全部楼层
回复【13楼】Badu_Space:
---------------------------------
正常
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-1-10 14:09:48 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
我今晚试下这个实验,看下能不能正常操作http://www.openedv.com/posts/list/25896.htm
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

81

主题

185

帖子

0

精华

高级会员

Rank: 4

积分
534
金钱
534
注册时间
2013-7-4
在线时间
13 小时
发表于 2014-1-10 14:30:53 | 显示全部楼层
f_mount之前disk_initialize有用么?
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-1-10 14:50:52 | 显示全部楼层
回复【16楼】jimmjimm:
---------------------------------
没用,f_mount之前disk_initialize,之后的初始化都失败的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 23:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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