搜索
bottom↓
回复: 143

SD2.0规范及其驱动编写(程序待完善)

[复制链接]

出0入0汤圆

发表于 2008-4-20 17:56:54 | 显示全部楼层 |阅读模式
SD2.0协议包含SDHC卡的支持,支持4G以上的SD卡

从阅读的资料来看,SD2.0的卡有两种模式,标准standard 和 高容量high capacity (SDHC)
其中standard和以前的卡一样,最高到2G,采用字节寻址。 而SDHC则采用block寻址。 用以增加卡的容量


很多人说找不到2.0协议(很多认为2.0就是SDHC,跟usb2.0类似,所以只搜索SDHC spec),其实官方网站就有:
http://www.sdcard.org/about/memory_card/pls/
选I Accepet就可以下载了。

这里我上传上来:
SD2.0 specourdev_257523.pdf(文件大小:1.04M) (原文件名:Simplified_Physical_Layer_Spec.pdf)


这个协议中给出了支持sd2.0卡的初始化流程:


初始化流程 (原文件名:initialize_flow.JPG)


sd2.0卡包含新的csd结构:

csd version2的结构 (原文件名:csd_version2.JPG)


因此程序中需要重新写初始化部分,和读卡信息的部分内容。


这里有我写的程序,用于网站的mp3板,也可用于zl0801的mp3板。 请有sdhc卡的兄弟帮忙一起测试以下,以完善这个驱动的编写。
我手头只有一张4G的microSD卡,这个程序也仅在这张卡上测试过。
用于网站mp3范例板 和zl0801的mp3板ourdev_257542.zip(文件大小:425K) (原文件名:mp3_05_mega128_sdhc.zip)


写这个程序参照了 msn上的一位好友的mp3 (OpenPlayer)的程序。在此表示感谢。
这是他的网站:(西班牙当地一个小语种,大概能猜到意思)
http://www.mstdev.org/tdr/?cat=5

但是他的程序用我这张卡不能用。其中在检查pattern的时候出错。
希望有sdhc卡的兄弟帮忙共同完善一下。

谢谢!

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2008-4-20 19:33:15 | 显示全部楼层
支持一下,支持加cool。问下楼主,sdhc与sd规范上大致有哪些差异?

出0入0汤圆

 楼主| 发表于 2008-4-23 23:00:35 | 显示全部楼层
to 【1楼】 gingin
    主要差别就是我楼主列出来的两幅图

to ALL:
    希望有sdhc卡的兄弟有空帮忙测试一下。 现在买个SDHC也不便宜,没钱买试验。呵呵

出0入0汤圆

发表于 2008-4-23 23:06:38 | 显示全部楼层
关注一下 顺便留个记号 谢谢

出0入296汤圆

发表于 2008-4-24 00:07:23 | 显示全部楼层
哈哈!太好了,下载下来学习。

出0入0汤圆

发表于 2008-4-24 06:35:16 | 显示全部楼层
我也学习下,哈哈~

出0入0汤圆

发表于 2008-4-24 11:18:13 | 显示全部楼层
留记号

出0入0汤圆

发表于 2008-4-24 13:30:13 | 显示全部楼层
马上拿下……

出0入0汤圆

发表于 2008-4-28 10:19:38 | 显示全部楼层
好东西,先谢了

出0入0汤圆

发表于 2008-4-28 12:32:11 | 显示全部楼层
这个得顶

出0入0汤圆

发表于 2008-4-28 18:56:00 | 显示全部楼层
支持

出0入0汤圆

发表于 2008-4-29 10:07:13 | 显示全部楼层
谢谢啦

出0入0汤圆

发表于 2008-4-29 11:53:24 | 显示全部楼层
MARK,赞一个!

出0入0汤圆

发表于 2008-5-16 08:17:27 | 显示全部楼层
嗯,从淘宝上刚买4G的sdhc卡,才80大元,试一下能不能初始化到SPI读取数据!

出0入0汤圆

发表于 2008-8-21 00:52:06 | 显示全部楼层
我在noisii下写了个sd卡读写程序,可以对早期版本的sd卡进行读写。但却不能对现在版本的sd卡进行读写。很困惑啊?希望lz指点一下。声明一下我使用的是1G的sd卡,不是sdhc卡        谢谢lz

出0入0汤圆

发表于 2008-9-23 09:12:45 | 显示全部楼层
顶起

出0入0汤圆

发表于 2008-9-23 09:49:45 | 显示全部楼层
研究研究

出0入0汤圆

发表于 2008-9-23 09:54:39 | 显示全部楼层
mark

出0入46汤圆

发表于 2008-9-24 23:02:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-9-25 09:19:44 | 显示全部楼层
谢谢共享

出0入0汤圆

发表于 2008-9-26 22:42:07 | 显示全部楼层
顶一下!

出0入0汤圆

发表于 2008-11-3 14:31:00 | 显示全部楼层
請問一下各位

有人再2410 上面 對 SDHC 不管是認卡或是READ/ Write 成功嗎 ?

也就是說我不清楚2410 是否有support 到 sdhc 





ps: (我看2410 上面的內容他是這樣寫的好像沒有support 但是我不知道那位大俠也許有成功過可以幫幫忙)



OVERVIEW

The S3C2410X Secure Digital Interface (SDI) can interface for SD memory card, SDIO device and Multi-Media

Card (MMC).

FEATURES

— SD Memory Card Spec. (ver. 1.0) / MMC Spec. (2.11) compatible

出0入0汤圆

发表于 2008-11-3 17:15:05 | 显示全部楼层
好东西,先收下了,谢谢啊

出0入0汤圆

发表于 2008-11-3 20:52:42 | 显示全部楼层
thanks ! mark!

出0入0汤圆

发表于 2008-11-3 21:02:20 | 显示全部楼层
太好了,收藏!!!!

出0入0汤圆

发表于 2008-11-4 10:43:40 | 显示全部楼层
好东西

出0入0汤圆

发表于 2008-11-20 14:59:26 | 显示全部楼层
支持一下

出0入0汤圆

发表于 2008-11-20 20:36:33 | 显示全部楼层
前两天刚搞懂了章老师说的“SD卡有无MBR与卡本身无关”,今天又得到一张HCSD卡,没想到搜GOOGLE又搜到家里来,还是章老师的大做,敬佩,章老师为我们新手提供太多帮助了。。

出0入0汤圆

发表于 2008-12-4 09:47:22 | 显示全部楼层
顶一下

出0入4汤圆

发表于 2008-12-4 10:09:29 | 显示全部楼层
学习。

出0入0汤圆

发表于 2008-12-5 14:52:44 | 显示全部楼层
收藏学习

出0入42汤圆

发表于 2008-12-6 10:06:28 | 显示全部楼层
收藏

出0入0汤圆

发表于 2008-12-6 10:10:59 | 显示全部楼层
记号  谢谢

出0入0汤圆

发表于 2008-12-31 12:44:48 | 显示全部楼层
唉,这个我都看了好几遍了,怎么没有我的脚印。

出0入0汤圆

发表于 2008-12-31 20:37:50 | 显示全部楼层
嗯,学习学习

出0入0汤圆

发表于 2008-12-31 21:53:01 | 显示全部楼层
谢谢!先收藏了!

出0入0汤圆

发表于 2009-1-1 00:42:46 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-1-4 18:20:29 | 显示全部楼层
必须拿下

出0入0汤圆

发表于 2009-1-4 18:29:24 | 显示全部楼层
普通最大能支持到4G吧?

我有上有个4G(金士顿)的,我也搞不太清是不是SDHC,按别人写的再自己修改下竟然能行

而之前有个金士顿1G用同样的程序死活不行...

有空实验...

出0入0汤圆

发表于 2009-1-5 10:02:03 | 显示全部楼层
尽管不懂,还是up

出0入0汤圆

发表于 2009-1-12 15:28:49 | 显示全部楼层
正在学习这部分,用楼主的程序在试验,我手上的卡在测试中有两处需要改动(都在获取卡容量的函数中):

1、程序中获取卡容量的函数MMC_SD_ReadCapacity(),楼主用

r1 = MMC_SD_SendCommand(9, 0);//写命令        //send command  //READ CSD

的CSD的内容,我的卡过不去。我想是不是这样打断了SPI的周期,改成

r1 = MMC_SD_SendCommandCRC_NoDeassert(9, 0, 0x95);//写命令        //send command  //READ CSD

之后能过去。



2、计算version2.0的容量:Capacity =  (((uint32)buffer[8])<<8 + (uint32)buffer[9] +1)*(uint32)1024;

我4G的卡不对,将"<<8"改成"*256"就能过去,现在还没搞明白。



手头有三张卡:

1)Kingston 4GB Class4   初始化OK,可以判断出“version2.0,High Capacity”;读取卡容量OK;读扇区数据OK;

2)KINGMAX 128M microSD  初始化OK,判断出“version1.0”;读取卡容量OK;读扇区数据OK;

3)Kingston SDC/1GB microSD  初始化偶尔能正确,结果判断出“version2.0,Standard Capacity”;卡容量和数据都无法正确读取

初始化已经正确进入Version分支,错误在

retry = 0;

do

{

    r1 = MMC_SD_SendCommandCRC(55, 0, 0);

    if(r1!=0x01)

    {

        return r1;

    }

    r1 = MMC_SD_SendCommandCRC(41, 0x40000000, 0);



}while(r1!=0);



程序在“MMC_SD_SendCommandCRC(55, 0, 0);”后直接返回了,r1返回为0;这种现象出现的概率大概有50%,到现在还没找到原因。





时间和资源有限,就测了这么多,希望大家指点~



本贴被 Alvinwang 编辑过,最后修改时间:2009-01-12,15:30:42.

出0入0汤圆

发表于 2009-1-12 15:35:31 | 显示全部楼层
补充小问题:

miniSD,microSD,和TF卡都可以经过适配器转换当成SD卡使用,转换后指令是相同的吗?我在SD官方的组织上没有找到相应的spec,哪位分享一下呢?

出0入0汤圆

发表于 2009-1-13 16:19:17 | 显示全部楼层
谢谢楼主,以前看了1.0的现在找到了2.0,再看看,谢谢啊

出0入0汤圆

发表于 2009-1-16 14:46:00 | 显示全部楼层
标记!

出0入0汤圆

发表于 2009-4-21 14:05:12 | 显示全部楼层
非常感谢啊,正要学习

出0入0汤圆

发表于 2009-4-23 16:29:04 | 显示全部楼层
现在都流行挖古墓,“经典恒久远,一篇永流传”

mark完保存在硬盘上,免得再次遇到被黑找都找不到

出0入0汤圆

发表于 2009-4-23 16:38:02 | 显示全部楼层
这也不错
时不时的把古墓挖出来大家学习学习还是不错的

出0入0汤圆

发表于 2009-6-16 11:16:54 | 显示全部楼层
谢谢了

出0入0汤圆

发表于 2009-6-20 19:50:25 | 显示全部楼层
好东西,谢谢LZ。

出0入0汤圆

发表于 2009-6-20 22:12:30 | 显示全部楼层
最近也在做SD卡的项目
mark

出0入0汤圆

发表于 2009-6-23 22:52:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-24 13:54:06 | 显示全部楼层
很好,有用

出0入0汤圆

发表于 2009-6-24 14:05:19 | 显示全部楼层
mark 以后研究

出0入0汤圆

发表于 2009-6-27 22:10:51 | 显示全部楼层
感谢!学习!

出0入0汤圆

发表于 2009-6-30 18:20:33 | 显示全部楼层
学习了

出0入0汤圆

发表于 2009-7-21 11:55:24 | 显示全部楼层
我有一张kingston的2G SDC和【41楼】 Alvinwang 的一样。
问题怎么解决呀?大家之个招把。

出0入0汤圆

发表于 2009-7-26 12:13:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-27 23:32:23 | 显示全部楼层
支持

出0入0汤圆

发表于 2009-8-17 11:00:01 | 显示全部楼层
41楼的,我想问一下你的程序调通没有,我现在错误也是出现在
初始化已经正确进入Version分支,错误在
retry = 0;
do
{
    r1 = MMC_SD_SendCommandCRC(55, 0, 0);
    if(r1!=0x01)
    {
        return r1;
    }
    r1 = MMC_SD_SendCommandCRC(41, 0x40000000, 0);

}while(r1!=0);

程序在“MMC_SD_SendCommandCRC(41, 0x40000000, 0); ”后r1返回为0x05;这种现象出现的概率大概有100%,到现在还没找到原因。
有谁知道啊,能不能解释下????

出0入0汤圆

发表于 2009-8-19 10:41:50 | 显示全部楼层
真的没有知道吗???能不能告诉我MMC_SD_SendCommandCRC(41, 0x40000000, 0); 里面的这三个参数是怎么算的的。帮帮忙啊

出0入0汤圆

 楼主| 发表于 2009-8-19 10:46:17 | 显示全部楼层
没卡做试验,等4G卡白菜价时去搞几个,不然买了自己也没用

出0入0汤圆

发表于 2009-8-19 11:05:11 | 显示全部楼层
bozai,你能不能告诉我
为什么
初始化已经正确进入Version分支,错误在  
retry = 0;  
do  
{  
    r1 = MMC_SD_SendCommandCRC(55, 0, 0);  
    if(r1!=0x01)  
    {  
        return r1;  
    }  
    r1 = MMC_SD_SendCommandCRC(41, 0x40000000, 0);  

}while(r1!=0);  

程序在“MMC_SD_SendCommandCRC(41, 0x40000000, 0); ”后r1返回为0x05;这种现象出现的概率大概有100%,最有可能是哪里错了啊

出0入0汤圆

 楼主| 发表于 2009-8-19 11:52:22 | 显示全部楼层
这个我不清楚,不好意思

出0入0汤圆

发表于 2009-8-19 17:12:10 | 显示全部楼层
波仔:你好!在你提供的程序的指导下,现在我已经把程序调通。但是还有以下几个部分没有搞明白:
1,我想知道你的command函数里面的参数是怎么确定的。如:MMC_SD_SendCommandCRC(41, 0x40000000, 0); 它里面的参数为什么是0x40000000
2,在用到MMC_SD_SendCommandCRC()函数时,
while((r1 = MSD_ReadByte(0xFF))==0xFF)
    {
        retry++;
        if(retry > 200)
        {
            break;
        }
    }
经过运行后,为什么r1会变成0x01?
很是费解,希望你能抽点时间帮我解释一下,先谢了,祝工作顺利!

出0入0汤圆

发表于 2009-8-22 15:39:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-8-24 11:03:40 | 显示全部楼层
好东西,收藏了。

出0入0汤圆

发表于 2009-8-24 16:57:46 | 显示全部楼层
有没有中文的?

出0入0汤圆

发表于 2009-8-24 20:33:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-8-28 15:32:29 | 显示全部楼层
64楼,应该是返回的信息最后8为crc是0x01

出0入0汤圆

发表于 2009-11-23 11:35:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-23 12:29:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-23 13:35:31 | 显示全部楼层
金士顿4G microSDHC卡

初始化通过,可以判断是SD_TYPE_V2HC类型

计容量时读出16个字节的CSD信息:0x40,0x0E,0x00,0x32,0x5b,0x59,0x00,0x00,0x1d,0x8b,0x7f,0x80,0x0a,0x40,0x00,0x05

按照程序的计算公式:Capacity =  (((uint32)buffer[8])<<8 + (uint32)buffer[9] +1)*(uint32)1024 得到结果为0

按41楼方法改成Capacity =  (((uint32)buffer[8]) * 256 + (uint32)buffer[9] +1)*(uint32)1024 得到结果:

Capacity = (uint32)(0x1d8b+1)*(uint32)1024 = 0x1d8c*1024 = 7745536 结果不对

出0入0汤圆

发表于 2009-11-23 22:18:34 | 显示全部楼层
根据文档,Capacity =  (((uint32)buffer[8]) * 256 + (uint32)buffer[9] +1)*(uint32)512

把原程序的(uint32)1024改成(uint32)512计算出Capacity = 3872768 Kb 结果正确

出0入0汤圆

发表于 2009-11-24 12:31:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-25 10:28:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-22 18:41:00 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-1-22 20:29:56 | 显示全部楼层
感谢ing

出0入0汤圆

发表于 2010-2-17 19:54:03 | 显示全部楼层
mark   SD

出0入0汤圆

发表于 2010-2-22 16:50:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-23 09:16:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-26 14:43:54 | 显示全部楼层
Mark 一下。

出0入0汤圆

发表于 2010-3-7 11:44:00 | 显示全部楼层
回复【楼主位】bozai 章其波
-----------------------------------------------------------------------

测试您的程序时的问题:
MMC_SD_WriteSingleBlock(127, sd_send_buf);
MMC_SD_ReadSingleBlock(127, sd_recv_buf);

这两个函数,谁先执行,谁就好使,相应的第二个函数的返回值总出错;不知道为什么?
(难道函数执行完,后续的spi没处理完,导致下一个函数的命令错误。)
例如:
r1 = MMC_SD_SendCommand(17, address_mode?sector:sector<<9);//读命令        //read command
       
        if(r1 != 0x00)
                return r1;

出0入0汤圆

发表于 2010-4-6 18:43:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-6 18:46:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-21 20:50:05 | 显示全部楼层
回复【50楼】tyblly
-----------------------------------------------------------------------

还在吗,想请教你个问题可以吗,谢谢~QQ:452206724
我也再整SD卡~

出0入0汤圆

发表于 2010-5-4 15:04:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-4 20:21:00 | 显示全部楼层
顶 支持

出0入0汤圆

发表于 2010-7-6 17:02:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-6 17:55:23 | 显示全部楼层
mark!~~

出0入0汤圆

发表于 2010-7-6 18:23:03 | 显示全部楼层
mark下 要研究研究

出0入0汤圆

发表于 2010-7-6 18:27:28 | 显示全部楼层
收藏

出0入0汤圆

发表于 2010-7-7 09:27:13 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-7-7 10:36:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-7 12:00:56 | 显示全部楼层
关注!

出0入0汤圆

发表于 2010-7-7 12:18:00 | 显示全部楼层
这个正需要,mark了

出0入0汤圆

发表于 2010-7-7 17:04:26 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-9-10 14:16:54 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-9-10 15:50:06 | 显示全部楼层
很快也会用到SD卡,标记一下,感谢分享

出0入0汤圆

发表于 2010-9-10 20:11:35 | 显示全部楼层
mark!!

出0入0汤圆

发表于 2010-9-11 14:30:16 | 显示全部楼层
强悍
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-8-26 10:22

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

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