搜索
bottom↓
回复: 16

马潮老师紧急求助!!!关于SD卡的问题

[复制链接]

出0入0汤圆

发表于 2014-1-6 11:28:26 | 显示全部楼层 |阅读模式
马老师您好,我正在学习您的第二版书里关于wave播放器的程序,是那个报站的,demo19—2里的程序,情况是这样,我用的时候SD卡初始化的成功率极低,50次可能才有一次两个灯都常亮,读卡正不正确的那个灯老是闪,有的时候可以有的时候不可以,成功概率低是什么问题麻烦您解答一下!!!

我用的是网上直接可以买的SD卡模块,解法肯定正确,就是判断卡里有没有卡的PB.0我直接接的低,每次都是卡插好了才上电打开单片机。
SD卡我选用的两种:一张4G的SD;一张2G的mini SD 接的SD adapter
                                两张卡情况一样,初始化成功机率低。
我用的8m的内部RC时钟,程序未做任何修改。
情况就是这样
麻烦老师了!

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2014-1-6 13:23:14 | 显示全部楼层
马潮老师,在吗?麻烦了

出0入0汤圆

 楼主| 发表于 2014-1-6 17:31:45 | 显示全部楼层
我测试了一下,在FRESULT pf_mount (        FATFS *fs                /* Pointer to new file system object (NULL: Unmount) */
)

这个函数中,if (disk_initialize() & STA_NOINIT)        /* Check if the drive is ready or not */  
    {
                return FR_NOT_READY;
    }

跳到这个判断里了

然后再看   disk_initialize()   这个函数,

执行这个判断时   if (send_cmd(CMD0, 0) == 1)         条件不成立

再看执行    send_cmd(CMD0, 0)   时

这个判断   if (cmd & 0x80)   不成立

虽然我不知道是什么原因,但请问是不是 晶振 的问题

我用的是内部 8M的RC

我对SD的通信原理还不懂,请帮帮我!!!谢谢了

出0入0汤圆

 楼主| 发表于 2014-1-6 19:33:16 | 显示全部楼层
难道是模块不行?因为有几次成功了~~~

出0入0汤圆

发表于 2014-1-6 19:35:06 | 显示全部楼层

1.马潮老师用的晶振不是8M的 ,而是根据需要算出来的 11.2896M...   用12M的可以
2.SD卡模块 一般只用了四个引脚 马潮老师上面还用到了卡套上的10引脚 用来判断是否插入卡,楼主程序没做什么修改 应该是直接把PB.0 引脚拉低
3.FAT32文件系统楼主要不不懂,还是学习一下吧

4.马老师如果要是来的话 可能会建议你从基础学起,如果连一些基本的原理都不懂只做伸手党的话 马老师可能会说 把你手上的书烧了吧

出0入0汤圆

 楼主| 发表于 2014-1-6 19:45:28 | 显示全部楼层

男小北 发表于 2014-1-6 19:28
1.马潮老师用的晶振不是8M的 ,而是根据需要算出来的 11.2896M...   用12M的可以
2.SD卡模块 一般只用了四个引脚 马潮老师上面还用到了卡套上的10引脚 用来判断是否插入卡,楼主程序没做什么修改 应该是直接把PB.0 引脚拉低
3.FAT32文件系统楼主要不不懂,还是学习一下吧

4.马老师如果要是来的话 可能会建议你从基础学起,如果连一些基础的东西不懂只做伸手党的话 马老师可能会说 把你手上的书烧了吧


我的回复:
你好,谢谢你的回复,我是初学者,想一步一步的看懂老师的代码,

现在我想先解决的问题是怎样让SD卡初始化正常,我反复傻傻的试有几次让SD初始成功,肯定是碰巧啦

对于第一个问题是这样,老师用11.2896M的晶振,而我用8M的内部,也能成功是不是说,其实对于SD卡的数据传输
晶振的差别只在传输速率上,在成功与否上没有差别?在这里我的晶振慢应该是导致播放音乐时不好听,拖。对吗?

对于您说的第二点,我是把引脚拉低,但是看程序,我感觉这样应该没有问题吧?

最后我想弄懂的问题是,我在三楼说的,我自己试了一下程序,是什么原因导致问题这样发生的?

希望您能予以帮助,谢谢!!!

出0入0汤圆

发表于 2014-1-6 21:45:13 | 显示全部楼层
本帖最后由 machao 于 2014-1-7 09:00 编辑

你首先检查硬件连接是否正确。买的SD卡模块要注意它使用5V还是3.3V的电压。SD卡只能工作在3.3V,如果采用5V供电,需要对相应的接口进行分压处理。

要注意,电压不对会损坏SD卡的。

sd卡里的文件请拷贝使用我参考里面的文件,因为我的例子读取文件名是特定的,不是任何文件名都读

另外我的代码中有采用USART输出信息进行调试的,开关在H文件中,你可以参考,在相应的地方加上USART输出一些调试信息,看看具体处理到哪步出问题。

如果真是初学者,这个例子还是有点难度的。

出0入0汤圆

发表于 2014-1-6 23:24:21 来自手机 | 显示全部楼层
wzh20042005 发表于 2014-1-6 19:45
男小北 发表于 2014-1-6 19:28
1.马潮老师用的晶振不是8M的 ,而是根据需要算出来的 11.2896M...   用12M ...

也许Lz真需要补一些基础,否则你看代码再翻译回 sd的基本原理,难度可想而知

出0入0汤圆

 楼主| 发表于 2014-1-7 10:21:31 | 显示全部楼层
machao 发表于 2014-1-6 21:45
你首先检查硬件连接是否正确。买的SD卡模块要注意它使用5V还是3.3V的电压。SD卡只能工作在3.3V,如果采用5V ...

谢谢老师回复,是这样,我的模块是5v和3v供电均可的,连线没有问题,

程序里我把USART的那个给不要了,读文件名的程序做了修改,原来是必须要有报站的文件才会正常

现在不需要了,昨晚用普通的mini SD卡2G的格式化成 文件系统FAT ,  分配单元大小:32kb

这时候一切正常,完全可以正常使用,后来我把别的mini SD卡2G的格式化成 文件系统FAT ,  分配单元大小:32kb  却不能使用,只有之前的那一块认得到

我使用能认得到的卡来播放,声音很拖,我想问一下这是晶振的原因吗,是读卡速度因为我8M的时钟不够?

还是因为8M的时钟在更新PWM波时速度不够?可是我改过它的中断速度了,源程序是时钟1 不分频 比较用0CR1A=0xFE;

我从0x7e试到0x2e 声音都没变化几乎~~~~

出0入0汤圆

 楼主| 发表于 2014-1-7 10:22:55 | 显示全部楼层
myxiaonia 发表于 2014-1-6 23:24
也许Lz真需要补一些基础,否则你看代码再翻译回 sd的基本原理,难度可想而知 ...

确实,我本身学习能力也不强,不过对这个内容很感兴趣,想好好学习!

看了FAT 的内容确实感觉有些吃力

出0入8汤圆

发表于 2014-1-7 10:29:39 | 显示全部楼层
数据线有加上拉电阻了吗,我以前就碰到过忘加上拉电阻,低容量的卡使用正常,高容量的不正常的情况!

出0入0汤圆

 楼主| 发表于 2014-1-7 10:59:42 | 显示全部楼层
bujie8010 发表于 2014-1-7 10:29
数据线有加上拉电阻了吗,我以前就碰到过忘加上拉电阻,低容量的卡使用正常,高容量的不正常的情况! ...

请问您是买的模块还需要上拉电阻,还是自己焊的呢?

我买的是这样的模块:看原理图应该本身已经接了吧,我不知道是不是

您看看



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-1-7 11:03:34 | 显示全部楼层
bujie8010 发表于 2014-1-7 10:29
数据线有加上拉电阻了吗,我以前就碰到过忘加上拉电阻,低容量的卡使用正常,高容量的不正常的情况! ...

模块要是没焊错的话应该是加了的

出0入0汤圆

发表于 2014-1-7 11:46:58 | 显示全部楼层
wzh20042005 发表于 2014-1-7 10:22
确实,我本身学习能力也不强,不过对这个内容很感兴趣,想好好学习!

看了FAT 的内容确实感觉有些吃力 ...

有时间的话学一下  没时间的话拿来用得了  毕竟搞这种驱动还是很麻烦的  usb的特恶心  我上次光是搞usb的msc类就搞了一个月 还是对照例程库学习的

出0入0汤圆

发表于 2014-1-7 13:42:22 | 显示全部楼层
值得研究。

出0入0汤圆

发表于 2014-1-9 11:17:31 | 显示全部楼层
wzh20042005 发表于 2014-1-7 10:21
谢谢老师回复,是这样,我的模块是5v和3v供电均可的,连线没有问题,

程序里我把USART的那个给不要了, ...

基础是非常重要的,没有牢固和广泛的基础,关拿个代码参考是不行的。
播放WAW音频,首先PWM的频率应该与WAV音频的采样频率相同,比如WAV音频是8K的,PWM就应该8K,如果WAV是44.1K,那么PWM频率就必须是44.1K.
使用8M系统时钟的话,根本不能产生44.1K的PWM波,因为8位PWM频率最高是8M/256 = 31.25K.

如果你播放44.1K的WAV音频,那么首先保证PWM频率是44.1K,另外还必须保证程序能及时读出SD卡的数据,并进行处理(比如双声道16位的数据,转化成单声道8位数据),然后每44.1K更换PWM的占空比数据,如果跟不上声音肯定变粗变慢。

采用8位的MCU作这个DD,需要比较高的系统设计能力,包括硬件和软件。如果没有一定的能力,就是使用32位的MCU,作出的效果也很难达到商用的程度。

我的代码实际还可以优化的。在我的例程代码中,使用SPI的硬件接口,已经设置SPI时钟工作在最高频率了,就是要保证能最快的读SD卡,但是SPI的操作中还是采用了轮询等待的方式,这样MCU的效率就打了折扣。

如果能使用SPI中断方式操作,效率会更好,但程序设计要求更难了。

这个也是属于特种兵训练的项目。

出0入0汤圆

发表于 2014-1-9 11:25:28 | 显示全部楼层
wzh20042005 发表于 2014-1-7 10:59
请问您是买的模块还需要上拉电阻,还是自己焊的呢?

我买的是这样的模块:看原理图应该本身已经接了吧, ...

这个模块的电路非常清除,SD卡工作电压是3.3V。
如果你的MCU系统也是3.3V,可以直接连接SD卡的数据口,电压直接连接3.3V的输入。

如果你的MCU系统是5V,要连接是要注意,电源连接SD卡的5V端(模块上有5-3V的转换),但MCU的I/O口不能直接连接SD卡的数据口,需要分压。

这个分压电路在这个模块上有,旁边有一组连接接口,应该对照电路,正确连接,如果出错,会损坏SD卡的。千万注意。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 07:16

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

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