|
发表于 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另外的建議,也許也有別人會遇到一樣的問題,建議發帖的時候,就在論壇上發問吧!把這樣的經驗分享給需要的人 |
|