8.08.2007

SD Card Identify

這裡,TI 的TMS320DM644x SD Card Controller User's Guid
Sec 3.1 Card Identification Operation
大略翻譯一下:

進行 SD/MMC Card的一般傳輸動動之前,先要對bus上所有的card作identify 和 configure。

先下 ALL_SEND_CID broadcast command。請bus 上的card回應。
controller收到回應後,再讀取card的 uniqure card identification address (CID)。
之後再assign 一個 relative adress (RCA)。

RCA 的長度比 CID短,

之後,controller和 card 之間的傳輸,都用這個RCA作為定址的方法。

SD Card的 identify procedure
  1. 送 GO_IDLE_STATE (CMD0) 給SD card。

    這個command讓所有的card進入idle mode。

  2. 送 APP_CMD (CMD5) 給SD card。card會回應 R1。

    這個command告訴card 接著會是application command。

  3. 送 SD_SEND_OP_COND (ACMD41) 並且包含一個argument告訴card support voltage ranage。card會回應 R3。

    這個command可以用來辨識card是否支援controller 提供的voltage range。

  4. 送 SD_SEND_CID (CMD2)給SD card。 card收到會回應 R2。

    這個command請所有的card送出他們的CID。由於SD card 的設計,會只有一個SD Card能夠成功的送出CID。送出CID的Card會進入identification state,不會再回應這個command,好將回應的機會留給其他還沒回的Card。

  5. 送出SEND_RELATIVE_ADDR (CMD3)給SD Card,請Card將Relative Address送回來。

    只有剛剛成功回覆 CID的SD Card會接受這個command。並且回應 R1和他的Relative Address (in R6)。之後,會進入 Data Transfer Mode。

  6. 反覆4, 5,當沒有SD Card回應 SD_SEND_CID command,代表所有的SD Card都進入 Data Transfer Mode。Identification 完畢。
上面提到的pdf,p 31 Figure 13 有一個清楚的procedure diagram。

MMC Card和 SD Card 不一樣的地方是 MMC Card需要 controller 指定 RCA,所以在procedure 5 後,要再下一個SET_RELATIVE_ADDR (CMD3) 設定MMC Card Address。

5 則留言:

JASON 提到...

你好
小弟最近在找尋SD卡的資料
您的解說讓我受益良多,是不是可以請您在多講一下怎麼在SD卡裡面建立檔案(如TXT檔)
謝謝您了

Checko 提到...

可以對SD 的sector作read/write動作後,接下來就是OS的範圍了,所以要考慮的地方很多,例如..要不要用filesystem?

JASON 提到...

您的意思是指說...
要用ads下撰寫ㄧ個txt檔是ㄧ件很困難的事嗎? 小弟想用ads1.2對sd卡進行資料的儲存

Checko 提到...

寫入txt後,如果SD card拿到pc上的card reader後還要看得到。就要使用 fat 格式(filesystem)。

如果只是要把SD當作是embedded controller的一個storage,自己存,自己讀就好,那就不用這麼麻煩還要用filesystem。就一個sector,一個sector存取資料就好。

lawrence 提到...

你好
想請問一下如何得知sd卡上的資訊
例如製造廠商,容量等訊息??
謝謝~~