您的位置:控制工程论坛网论坛 » 教程与手册 » 资源共享:开放我的mmc/sd操作原代码

常青树

常青树   |   当前状态:在线

总积分:1421  2025年可用积分:0

注册时间: 2008-09-28

最后登录时间: 2012-05-30

空间 发短消息加为好友

资源共享:开放我的mmc/sd操作原代码

常青树  发表于 2008/10/17 7:35:58      768 查看 0 回复  [上一主题]  [下一主题]

手机阅读

经过一段时间的努力,搞定了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:)

1楼 0 0 回复