Re: AN1003 SD ctrl problem
|
||||
---|---|---|---|---|
高級會員
|
好像是 msb lsb 擺錯的關系.. struct 裡面的 C_SIZE 改成下面似乎就正確了...,但是C_SIZE_MULT 部份的話..spec 裡面提到SECTOR_SIZE 為7 bits ,不過struct 裡面把 SECTOR_SIZE 設為 5 bits ...
unsigned C_SIZE_U :2; //1 6
發表於: 2006/11/20 14:50
|
|||
|
AN1003 SD ctrl problem
|
||||
---|---|---|---|---|
高級會員
|
最近在玩SD card , 算是有點小進展, C18是用 V3_06, MPLAB 是 7.31 ,在讀取CSD 計算 SD card memory capacity資訊時卻一直算錯,下面的struct 是直接從AN1003 typedef.h 拿出來用的無修改, 但是C_SIZE_U, C_SIZE_H, C_SIZE_L 跟 C_SIZE_MULT_H , C_SIZE_MULT_L , 取出來的值似乎不正確, 我用256MB 的MMC 卡
直在接 MPLAB 的 WATCH 觀查 struct value得到: C_SIZE_U=0X02 C_SIZE_H=0XCC C_SIZE_L=0X02 組合起來為 0X0B32 ((C_SIZE_U&0X03)<<10)|((C_SIZE_H)<<2)|(C_SIZE_L&0X03) C_SIZE_MULT_H=0X03 C_SIZE_MULT_L=0X01 組合起來為0X07 ((C_SIZE_MULT_H&0X03)<<1)|(C_SIZE_MULT_L&0X01) 由於C_SIZE/C_SIZE_MULT的值一直不正確後來直接看SD spec 用同一個struct 但是直接把對應的 byte 抓出來得到的值為 CSD CSDStatus; CSDStatus=ReadCSD(); ................................................ C_SIZE_U=CSDStatus._byte[6]&0X03; =>0X03 C_SIZE_H=CSDStatus._byte[7]; => 0XCC C_SIZE_L=CSDStatus._byte[8]&0X03; =>0X03 組合起來為 0X0F32 C_SIZE_MULT_H=CSDStatus._byte[9]&0X03; =>0X02 C_SIZE_MULT_L=CSDStatus._byte[10]&0X01; =>0X01 組合起來為 0X05 這時後跟 READ_BL_LENTH 來計算就對了... 問題來了.. 那為何 struct 裡面宣告的 C_SIZE/C_SIZE_MULT 明明對應到正確的地方,但是讀回來卻是錯的.... 實驗了一整個上午終於找到這樣的關聯性,所以想請教版主一下,究竟是我的問題還是?... 感謝....
typedef union
發表於: 2006/11/20 14:09
|
|||
|