micro SD(TF)卡详解
一、SD miniSD microSD SDHC的區分
SD
SD卡(Secure Digital Memory Card)是一種基于半導體閃存工藝的存儲卡。為了滿足數碼產品不斷縮小存儲卡體積的要求,SD卡逐漸演變出了Mini SD,Micro SD兩種規格。?
SD卡背面共有9個引腳,包含4根數據線,支持1bit/4bit兩種數據傳輸寬度,時鐘最高頻率為25MHZ,故理論最高數據傳輸速率為12.5MB/S,工作電壓2.7~3.6V
???
?
?
?
?
?
?
MiniSD
顧名思義,Mini SD卡相比標準SD卡,外形上更加小巧,僅有標準SD卡40%左右的大小。盡管Mini SD卡的外形大小及接口形狀與原來的SD卡有所不同,但接口規范保持不變,確保了兼容性。若將Mini SD插入特定的轉接卡中,可當作標準SD卡來使用。?
????????????????
TransFlash(Micro SD) (主角)
Transflash卡,也稱T-Flash卡,TF或T卡,最早由SanDisk推出。T卡僅有11mmx15mmx1mm大小,僅相當于標準SD卡的1/4,比Mini SD卡還要小巧。?
同樣,T卡是與標準SD卡功能也是兼容的,將T卡插入特定的轉接卡中,可以當作標準SD卡或Mini SD卡來使用。?
2005年7月,SDA協會正式發布了Micro SD標準,該標準與TransFlash卡完全兼容,市場上的TransFlash卡和Micro SD卡可以不加區分的使用。這好比TransFlash是卡的小名,等長大了就取了個Micro SD的學名,不過大家還是叫其TransFlash的多!?
Mini SD、Micro SD這種小體積SD卡的出現,大大拓展了SD卡的應用范圍,這使得SD卡應用在一些小型手機中成為可能。另一方面,Mini SD、Micro SD功能與SD卡功能兼容,只要將其插入特定轉接卡中,即可當作標準SD卡來使用,這樣,Mini SD、Micro SD便可用于那些使用標準SD卡的數碼設備,這加速了Mini SD、Micro SD的市場普及。?
?????????????????
??
?
miniSD相對于標準SD,增加了2個NC引腳?
microSD相對于標準SD,減少了1個VSS引腳?
SDHC
目前市場上的SD、Mini SD、Micro SD卡遵循的是SD Spec Ver1.0或1.1規范,最大可能容量僅為2GB。2006年,SDA協會發布了SD Spec Ver2.0規范,符合此新規范的SD卡容量可達4GB或更高。?
符合2.0規范的SD卡,稱為SDHC(SD high capacity)卡。SDHC卡外形維持與SD卡一致,但是文件系統從FAT12、FAT16改為FAT32型;SDHC卡的最大容量可達32GB。除了SDHC卡外,還有Mini SDHC,Micro SDHC類型的卡。?
SDHC卡與標準SD卡不再兼容,必須符合SD Spec Ver2.0的設備才能支持SDHC卡,這樣的設備都會帶有SDHC logo。而支持SDHC卡的設備可以向下兼容標準SD卡。?
為了充分發揮SDHC卡的性能,保證兼容性,SDA協會為SDHC卡定義了3個速度等級:2,4,6;其含義是各等級分別可以忍受的寫速率至少是2MB/S,4MB/S,6MB/S.速度等級定義中使用的是數據寫速率,數據讀速率要比數據寫速率快。?
?
容量大于2GB的SDHC卡必須帶有SDHC符號和速度等級標記符號
二、microSD(TF)介紹
SD卡和Micro SD卡其實也就大小和引腳不一樣,它們的操作其實是一樣的,所以網上的SD卡讀寫代碼其實可以直接拿來用。關于SD卡和Micro SD卡的引腳定義和不同可見下兩表:
? ? 我們可以發現Micro SD卡只有8個引腳是因為比SD卡少了一個Vss。當然你也可以買個卡套套在Micro SD卡上,這樣一來大小就和SD卡一樣大,這時候卡套上的9個引腳就和SD卡一樣了,你可以完全當做SD卡來操作。
三、micorSD(TF)的驅動
上面Micro SD卡的硬件電路就好了,下面我們講講Micro SD卡的軟件驅動和指令集。
SD卡的命令格式如下,6字節共48位,傳輸時最高位(MSB)先傳輸:
? ? SD卡的command(命令)占6 bit,一般叫CMDx或ACMDx,比如CMD1就是1,CMD13就是13,ACMD41就是41,依此類推。Command Argument(命令參數)占4 byte,并不是所有命令都有參數,沒有參數的話該位一般就用置0。最后一個字節由7 bit CRC校驗位和1 bit停止位組成。在SPI模式下,CRC是被忽略的,可以都置1或置0.但是發送CMD0時要記得加上CRC,即最后1字節為0x95(因為發送CMD0時還未進入SPI模式,PS:CMD8也要,但一般大家都把發送CMD8省略了)。
? ? 每次發送完一次命令后,SD卡都會有回應。SD卡的回應有多種格式,1字節的R1,2字節的R2等,不過一般在SPI模式中我們只用到R1,下面介紹R1的格式:
? ? 關于SD卡SPI和command的發送要注意以下幾點:
? ? 1.SD卡的SPI總線,在讀入數據時SD卡的SPI是CLK的上升沿輸入鎖存,輸出數據也是在上升沿。?
? ? 2.向SD卡寫入一個CMD或者ACMD指令的過程是這樣的: 首先使CS為低電平,SD卡使能;其次在SD卡的Din寫入指令;寫入指令后還要附加8個填充時鐘,是SD卡完成內部操作;之后在SD卡的Dout上接受回應;回應接受完畢使CS為低電平,再附加8個填充時鐘。?
? ? 3.在SD卡的Din沒有數據寫入時,應使Din保持高電平。關于這一點我可吃透了苦頭,本來也記得要保持高電平的,結果不知怎的鬼使神差的置0拉低了。結果程序出現了各種奇怪的貌似偶然的錯誤,比如連續兩次復位會有一次失敗,單步調試成功全速運行又會失敗。總之在這個過程中我對時序進行各種改變,每次解決一個問題后又會有新的問題出現,多少次動搖了我對MicroSD卡和SD卡的操作是一樣的這個看法。因為這個低級的錯誤耽誤了我三四天,看來細心很重要啊!我已經不止一次因為不細心浪費大量時間了,希望大家也引以為戒。
好了,現在SD卡的命令和回應清楚了,我們下面講講SD卡的復位,初始化和讀寫方法。
復位方法:
1.拉高CS,發送至少74個clk周期來使SD卡達到正常工作電壓和進行同步
2.選低CS,發送CMD0,需要收到回應0x01表示成功進入idle狀態
3.拉高CS,發送8個時鐘
復位時序圖:
? ? 初始化:
? ? 復位成功后,SD卡就進入了SPI模式,接著應該進行初始化。初始化說白了有兩種方法:(1)發送CMD1,(2)發送CMD55+ACMD41。我從網上查的資料可以看到這種說法:如果是MMC卡就發CMD1,SD卡則發CMD55+ACMD41。但是關于Micro SD卡要發哪種卻講的不太清楚,網上用這兩種方法都有人成功過,但有的都成功不了。我自己也碰到了這種問題,剛開始拿了自己手機上的寫著Nokia的2GB的Micro SD卡(應該是雜牌的)初始化了兩天也沒成功,快要放棄的時候想起來為什么不換張試試呢,于是就找室友借了他的手機內存卡,是2GB的Apacer的Micro SD卡(當然也可能是雜牌的,室友買那卡的地方一般都是賣各種廉價電子產品的,大家都知道是雜牌的),結果一試就成功了。后來我用了令一種方法發現也可以初始化,也就是說兩種方法都可以初始化成功。但我的那種怎么就不行呢?難道不是所有Micro SD卡都支持SPI模式。我在網上百度了半天也不能確定是不是所有Micro SD卡都支持SPI模式。但我想,現在Micro SD卡的生產公司很多,而且你也并不能保證你的Micro SD卡不是雜牌的。你并不知道生產廠家進行了那些改變,因為確實有些廠家生產的SD卡精簡了一些命令。所以初始化的時候建議兩種都試一下,不過我記得SD卡的說明書上推薦使用第二種方法。
? ? 下面是初始化方法:
? ? (1)使用CMD1
? ? 發送CMD1,收到0x00表示成功
? ? 時序圖如下:
? ? (2)使用CMD55+ACMD41
? ? 1.發送CMD55(表示使用ACMDx類命令),收到0x01
? ? 2.發送ACMD41,收到0x00表示成功
? ? 記住SD卡的初始化速度不能大于400kHz,所以一開始復位和初始化時spi的速率要設置低一點。
? ? 讀單塊和多塊:
? ? SD卡讀單塊和多塊的命令分別為CMD17和CMD18,他們的參數即要讀的區域的開始地址。因為考慮到一般SD卡的讀寫要求地址對齊,所以一般我們都將地址轉為塊,并以扇區(塊)(512Byte)為單位進行讀寫,比如讀扇區0參數就為0,讀扇區1參數就為1<<9(即地址512),讀扇區2參數就為2<<9(即地址1024),依此類推。
? ? 讀單塊方法:
? ? 1.發送CMD17,收到0x00表示成功
? ? 2.連續讀直到讀到開始字節0xFE
? ? 3.讀512個字節
? ? 4.讀兩個CRC字節
? ? 讀單塊時序圖:
? ? 讀多塊方法:
? ? 1.發送CMD18讀,收到0x00表示成功
? ? 2.連續讀直到讀到開始字節0xFE
? ? 3.讀512字節
? ? 4.讀兩個CRC字節
? ? 5.如果還想讀下一扇區,重復2-4
? ? 6.發送CMD12來停止讀多塊操作
? ? 寫單塊和多塊:
? ? SD卡用CMD24和CMD25來寫單塊和多塊,參數的定義和讀操作是一樣的。
? ? 寫單塊方法:
? ? 1.發送CMD24,收到0x00表示成功
? ? 2.發送若干時鐘
? ? 3.發送寫單塊開始字節0xFE
? ? 4.發送512個字節數據
? ? 5.發送2字節CRC(可以均為0xff)
? ? 6.連續讀直到讀到XXX00101表示數據寫入成功
? ? 7.繼續讀進行忙檢測(讀到0x00表示SD卡正忙),當讀到0xff表示寫操作完成
? ? 寫單塊時序圖:
? ? 寫多塊方法:
? ? 1.發送CMD25,收到0x00表示成功
? ? 2.發送若干時鐘
? ? 3.發送寫多塊開始字節0xFC
? ? 4.發送512字節數據
? ? 5.發送兩個CRC(可以均為0xff)
? ? 6.連續讀直到讀到XXX00101表示數據寫入成功
? ? 7.繼續讀進行忙檢測,直到讀到0xFF表示寫操作完成
? ? 8.如果想讀下一扇區重復2-7步驟
? ? 9.發送寫多塊停止字節0xFD來停止寫操作
? ? 10.進行忙檢測直到讀到0xFF
注:以上部分內容引薦其他網上內容
總結
以上是生活随笔為你收集整理的micro SD(TF)卡详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查看手机绑定过的网站或者APP:注销
- 下一篇: Csdn修改账户手机绑定问题