2015-10-04 36 views
1

我正在使用微控制器(PIC18F26J50)與G.Skill 4GB microSD卡連接。通過SPI寫入SDHC卡時數據未對齊

  • SD卡初始化成功,我從接收0x01(空閒)R1令牌轉爲0x00(就緒)R1令牌。
  • 讀取數據塊的工作,我能夠讀取分區1的位置,並讀取分區

的第一個扇區但是試圖寫一個塊的時候,我從來沒有看到一個響應令牌。將卡上的原始塊傾倒。我看到的數據確實寫的,但它沒有正確對齊......解釋的最好方式是用實際的圖片

This should be filled with 0x01, 0x02, 0x03, and so on up to 0xFF before repeating

這應該充滿0×01,0×02,×03,等等在重複之前高達0xFF

這張卡在windows中工作得很好。我能夠正確地讀取和寫入數據。

調查,我發現我得到的迴應是0XCA,如果你右移,你得到0xE5,一個正確的響應令牌。數據本身與左側不一致。此外,看起來兩個虛擬字節和令牌也被寫入。校正移位你:

FF FF FE 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 

所以我刪除了代碼編寫2個虛擬字節和0xFE的令牌,和神聖的S *#$卡啓動命令後,立即以書面數據,我認爲違反符合規範!任何人都可以確認這是否是SDHC卡的預期行爲?還是這張卡只是運行一個真正的s *#$ ty SD控制器? (後者我懷疑是因爲我有一張工作正常的16GB卡)

回答

0

我剛剛遇到了完全相同的問題,這不是SD卡的問題,而是與我的SPI接口。

我使用的特定芯片(Freescale KL03)會將當前接收到的字節保留在數據緩衝區中,直到您讀取它爲止,即使您已經開始發送下一個字節。我不同步,所以每次我寫SPI字節,等待傳輸,然後從緩衝區讀取,我實際上得到的是前一個結果,而不是當前的結果。結果是每個SPI事務都有單字節滯後。

因此,我的範圍顯示,我是交換與存儲卡中的以下內容:

MOSI: 58 00 00 00 01 00 00 00 00 7E nn nn nn ... 
MISO: FF FF FF FF FF FF FF 00 FF FF FF FF FF ... 

這就造成了你遇到的錯位。它應該是這樣的:

MOSI: 58 00 00 00 01 00 00 00 7E nn nn nn nn ... 
MISO: FF FF FF FF FF FF FF 00 FF FF FF FF FF ... 

總之,確保您發送7E 後,立即響應00到你的寫命令。