经过一段时间的努力,搞定了mmc/sd卡mp3 player,经过测试,320kbps文件极其流畅:). 这个上面SD成功的人不少,但是始终不见有人open source,见于这种情况,我准备开放我的mmc.c&mmc.h代码给大家,也表示对ouravr做些贡献.希望大家在弄mmc/sd mp3时候少走弯路.希望大家喜欢:).
所有代码我都经通过了我的测试.我分别采用了software spi和hardware spi访问mmc/sd,软件spi速度很慢,我只能采用16mhz的时钟才能播放320kbps的文件:(. 硬件SPI速度极其快,速度有质的飞跃:)
下面是我对低层代码的一些测试:
My hardware:
CPU: ATnega162
Clock:8MHz
Data Source: Kingston 128MB High-Speed SD Card(white colour)
Test 1:
---------------------------------------------------
SPI:Software SPI
DATA block: 1MB
Time: 35s
Speed:about 28KB/s=224kbps
Test 2:
----------------------------------------------------
SPI:Hardware SPI
DATA block: 1MB
Time: 10s
Speed:about 100KB/s=800kbps. Very fast ^_^.
Test 3:
-----------------------------------------------------
The crystal of cpu has been changed!
Clock : 16MHz
SPI : Hardware SPI + software SPI(init mmc/sd)
DATA BLOCK: 1MB
Data Source : Kingston 128MB High-Speed SD
Time : 5.5S
Speed: about 200KB/S. Oh,my god,very very fast^_^!
Notice: Here I use software SPI to initialize mmc/sd,or I can't do it:(
先上传我的使用software spi操作mmc/sd代码给大家:)(硬件的稍后):
点击此处下载armok0167408.rar
说明:我没有画电子版本的sch,也没有时间画,当初就是在纸上画的:) 请仔细看mmc.h,看明白硬件连接.我先简单给个连接图:
SD M162 Port
----------------------------
1 CS ---> PORTA.0
2 CMD/DI ---> PORTA.1
3 GND ---> NC(接相应的3.3V电源地)
4 Vcc ---> NC(接3.3V电源正)
5 CLK ---> PORTA.4
6 GND ---> NC(接相应的3.3V电源地)
7 DO ---> PORTA.6
8 NC ---> PORTA.7(MMC busy LED)
9 NC ---- 未连接
注意:8脚连上一个1K的电阻和一个LED送到PORTA.7上去作为MMC_BUSY_LED.忙信号是低电平驱动的.
另外连接到SD卡要进行电平转换.如下:
_________________ PORTA.0
|
|-|
| | 1.2K
|_|
|_________________CMD/DI(MMC/SD PIN)
|
|-|
| |2.2k
|_|
|
|
|_________________GND
|
---
-
另外SD的DATA OUT脚,也就是7脚DO不需要转换,直接连到CPU的PORTA.6.
编译环境cvavr.移植到GCC需要做些修改了:)
1. 在初始化时候要注意SPI速度,在初始化时候尽量降低SPI速度.我的卡(kingston 128MB)如果没有降低速度在发CMD0正常,发CMD1时候总出错!这个很重要一定要注意!!!! 在初始化成功后,尽可能提高SPI速度,我是将AVR的SPI速度提升到了极限,SPI2X也ENABLE.
2. 在操作mmc/sd之前,先发送80个脉冲给它.(/cs先禁止)
Good luck to all:)