在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4542|回复: 9

[求助] SD卡初始化后不能读写?

[复制链接]
发表于 2012-5-27 13:05:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
最近在调SD卡的HOST,就是通过串口控制SD的HOST的寄存器来对SD卡进行操作。
目前SD初始化已经正常完成,响应也是对的。写操作是用的MULTI WRITE,通过chipscope抓数据线上DAT0也有反映,就是读时数据线没变化,但是读命令的响应是正确的。
请问调过SD的各位,这是什么原因,我换个几个卡都是这样。
请不吝赐教,谢谢!!!!!!!!!!!!
 楼主| 发表于 2012-5-28 09:34:17 | 显示全部楼层
有没有调过SD卡的,把初始化后的命令步骤贴下,我参考下
发表于 2012-5-28 11:46:18 | 显示全部楼层
大哥,你用的是什么host呀?
你把接口的时序发一下吧
 楼主| 发表于 2012-5-28 14:08:53 | 显示全部楼层
HOST是公司买的IP,接口时序是命令的吗?网上很多的,协议上也有的
 楼主| 发表于 2012-5-29 11:02:42 | 显示全部楼层
通过chipscope抓线发现写操作时,数据线DAT0有数据传向SD卡,从协议上看卡应该回个接收的响应010,我这边没响应,估计是没写进去,不知道问题出在哪里??仿真没问题啊
 楼主| 发表于 2012-5-31 13:31:11 | 显示全部楼层
已经把问题解决了。是我的卡写时只支持最小512byte的块数据,因为发的数据块小了造成卡没给数据响应,所以HOST在等待响应。
发表于 2012-5-31 17:22:45 | 显示全部楼层
因為你有些事情沒有提到,所以我先問清楚
1.你是用幾bit mode ? 1bit or 4bit ? SD HOST 有沒有送ACMD6去對SD卡做過BUS WIDTH的設定?
2.你是用哪種Speed mode ? default speed or high speed ? SD Host有沒有送過CMD6去對SD卡做過"Switch to High Speed" ??
3. 上述兩個項目對SD卡切換過後, 請記得也要將SD HOST接換成一樣的設定(by setting internal register)
4. 你的SD Clock的頻率跑多快?

一般來說,寫資料有問題,有可能是上述這些條件沒有設定好而造成的
SD卡要是沒有回覆CRC STATUS, 有可能是因為
1. SD卡沒有收到足夠的資料量,可能是設定上的問題(請檢查上述的設定)
比方Block length=512byte (SD spec default setting, 也可透過CMD16去變更)
假設SD HOST自己已經切換成4BIT MODE,但是卻沒把SD卡也切換成4BIT MODE (仍然停留在1BIT MODE),那SD卡內部的電路就會預期在SD HOST有送出SD CLOCK的狀況下,SD HOST的Rising edge去sample data,並且要sample 530次(包含start bit+data block + CRC16+End bit) 才算是收完一個完整的data block,然後才會比對CRC16的值,然後回吐CRC STATUS給SD HOST

2. SD HOST沒有送足夠的資料量,這可能是SD HOST的問題
如果有,那就要去檢查SD HSOT了,這時候就要認命的一個一個去數DATA Block

3. SD 卡有回CRC STATUS,但是SD HOST卻沒收到,那就是Timing的問題
先確定SD 卡回覆的CRC STATUS格式是否正確,然後再去CHECK SD HOST是否在送完DATA BLOCK之後,SD卡立刻送出CRC STATUS,但是SD HOST卻來不及收進來的狀況





P.S另外的建議,也許也有別人會遇到一樣的問題,建議發帖的時候,就在論壇上發問吧!把這樣的經驗分享給需要的人
发表于 2012-5-31 17:25:58 | 显示全部楼层
大部分的DATA BLOCK都是設512BYTE,印象中這好像是跟Microsost 的FAT table或是file system有關.
當然也可以設成別的block length
 楼主| 发表于 2012-6-1 09:14:31 | 显示全部楼层
回复 8# pcbass


    十分感谢你的回复,你说的问题确实很有代表性,我调设计时也遇到了,刚接触SD卡解决问题没什么头绪。这几天已调好了,为了后续的兄弟能用到我也遇到的问题和解决方法贴下吧。
我调试的是SD 2G标准卡 ,速率class2 ,SD_CLK频率低于50MHZ
1. 首先协议看好,这是英文原版。对调试帮助很大 Part_1_Physical_Layer_Simplified_Specification_Ver3.01_Final_100518[1].pdf
2. 接口时序问题,SD卡对接口时序要求很高。开始我向SD发命令,总是没有响应回来。经过老大提示,可能是接口信号的hold_time时间没有满足,于是将HOST输出给SD的CLK反向输出,保证了SD可以采到该信号(我用的创见的SD必须改,SANDISK的却不用改,纠结。。。)。
3. 初始化过程,严格按照协议来执行,CMD0-->CMD8-->CMD55-->CMD41(需要参数与给电压对应)-->CMD55-->CMD41(参数0即可),然后对卡的响应,响应最高位BUSY应该为1,表示初始化完成。然后再CMD2--3--7
4. 写数据块,这个调了好几天。写了32BYTE数据,chipscope能抓到写数据就是卡没响应。最后查协议发现,卡不支持小于512B的块写操作,默认都是512B,所以卡一直还在等待HOST发数据所以没响应。
5. 时钟问题,SD读回数据,HOST没有接到,这个就是时钟问题,我觉得HOST要采SD的数据,所以HOST的系统时钟一定要大于给SD的时钟
6. 调试经验,先把协议搞清楚,开始每次命令都要读响应及卡和HOST状态寄存器,结合协议搞清错误出在哪?其实SD相对于DDR或USB等外设还是比较简单的
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
好了,希望对大家有用。。。再次感谢论坛里给我帮助的哥们!!!!
发表于 2012-6-1 11:26:50 | 显示全部楼层
SD default speed的時候 (也就是initial state-400KHz and default speed <50MHz), 通常都是SD CLK的下降緣OUTPUT DATA,然後上升緣SAMPLE DATA, 因為速度慢,所以資料OUTPUT之後,再加上OUTPUT DELAY,都還可以滿足上升緣SAMPLE 的SETUP TIME.
但是如果是切換到HIGH SPEED MODE (50MHz,或是MMC 卡的52MHZ),那就要改成上升緣OUTPUT DATA,上升緣SAMPLE DATA,這樣才能避免"因為SD CLK週期變短,但是DATA OUTPUT DELAY仍然不變,而產生了SETUP TIME VIOLATION的狀況".

至於SANDISK的卡為什麼沒事,這有可能跟半導體製程有關係,所以他們的SD CARD Controller 可以容忍的SETUP TIME/HOLD TIME都會比較小,早先他們已經是進步到90nm,現在可能跑到更先進的半導體製程----這是我的猜測
當然我也發現有些卡片從SD initial state一直到data read/write,都是用上升緣來output data/sample data.........這樣會不會產生相容性問題??....這就看情況了,如果出貨的時候是只搭配某個設備來賣,反正只要保證彼此之間沒有相容性問題,就沒事了,所以就看公司業務的規劃和策略
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 11:47 , Processed in 0.021980 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表