版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MicroSD卡(TF卡)spi模式實(shí)現(xiàn)方法
現(xiàn)在我們手機(jī)的內(nèi)存卡多為MicroSD卡,又叫TF卡,所以MicroSD卡比SD卡常見。自己曾經(jīng)也想寫寫SD卡的讀取程序,但又不想特地再去買個(gè)SD卡,這時(shí)想起手機(jī)內(nèi)存卡不是和SD卡很像嗎?在網(wǎng)上查了以后發(fā)現(xiàn)SD卡和MicroSD卡其實(shí)也就大小和引腳不一樣,它們的操作其實(shí)是一樣的,所以網(wǎng)上的SD卡讀寫代碼其實(shí)可以直接拿來用。關(guān)于SD卡和MicroSD卡的引腳定義和不同可見下兩表:
我們可以發(fā)現(xiàn)MicroSD卡只有8個(gè)引腳是因?yàn)楸萐D卡少了一個(gè)Vss。當(dāng)然你也可以買個(gè)卡套套在MicroSD卡上,這樣一來大小就和SD卡一樣大,這時(shí)候卡套上的9個(gè)引腳就和SD卡一樣了,你可以完全當(dāng)做SD卡來操作。
spi下電路的連接非常簡(jiǎn)單,接上電源線Vdd和地線Vss,再接上spi的CS,SCLK,DI(MOSI)和DO(MISO)就可以了,其他引腳可以放空。注意SD卡的電源和操作電壓都為2.7-3.6V,5V的單片機(jī)要進(jìn)行電平轉(zhuǎn)換或串電阻限流。還有記得SD卡的CS,SCLKh和DI要用10~100K的電阻上拉。我是套了卡套接的電路,因?yàn)镸icroSD卡的引腳太密了,不好焊接,SD卡相對(duì)引腳好焊。因?yàn)闆]有卡座,而且也沒專門的PCB我就直接焊到卡套上,誒犧牲了一個(gè)卡套。下面是我自己畫的電路圖:
上面MicroSD卡的硬件電路就好了,下面我們講講MicroSD卡的軟件驅(qū)動(dòng)和指令集。SD卡的命令格式如下,6字節(jié)共48位,傳輸時(shí)最高位(MSB)先傳輸:
SD卡的command(命令)占6bit,一般叫CMDx或ACMDx,比如CMD1就是1,CMD13就是13,ACMD41就是41,依此類推。CommandArgument(命令參數(shù))占4byte,并不是所有命令都有參數(shù),沒有參數(shù)的話該位一般就用置0。最后一個(gè)字節(jié)由7bitCRC校驗(yàn)位和1bit停止位組成。在SPI模式下,CRC是被忽略的,可以都置1或置0.但是發(fā)送CMD0時(shí)要記得加上CRC,即最后1字節(jié)為0x95(因?yàn)榘l(fā)送CMD0時(shí)還未進(jìn)入SPI模式,PS:CMD8也要,但一般大家都把發(fā)送CMD8省略了)。
每次發(fā)送完一次命令后,SD卡都會(huì)有回應(yīng)。SD卡的回應(yīng)有多種格式,1字節(jié)的R1,2字節(jié)的R2等,不過一般在SPI模式中我們只用到R1,下面介紹R1的格式:
關(guān)于SD卡SPI和command的發(fā)送要注意以下幾點(diǎn):
1.SD卡的SPI總線,在讀入數(shù)據(jù)時(shí)SD卡的SPI是CLK的上升沿輸入鎖存,輸出數(shù)據(jù)也是在上升沿。
2.向SD卡寫入一個(gè)CMD或者ACMD指令的過程是這樣的:首先使CS為低電平,SD卡使能;其次在SD卡的Din寫入指令;寫入指令后還要附加8個(gè)填充時(shí)鐘,是SD卡完成內(nèi)部操作;之后在SD卡的Dout上接受回應(yīng);回應(yīng)接受完畢使CS為低電平,再附加8個(gè)填充時(shí)鐘。
3.在SD卡的Din沒有數(shù)據(jù)寫入時(shí),應(yīng)使Din保持高電平。關(guān)于這一點(diǎn)我可吃透了苦頭,本來也記得要保持高電平的,結(jié)果不知怎的鬼使神差的置0拉低了。結(jié)果程序出現(xiàn)了各種奇怪的貌似偶然的錯(cuò)誤,比如連續(xù)兩次復(fù)位會(huì)有一次失敗,單步調(diào)試成功全速運(yùn)行又會(huì)失敗。總之在這個(gè)過程中我對(duì)時(shí)序進(jìn)行各種改變,每次解決一個(gè)問題后又會(huì)有新的問題出現(xiàn),多少次動(dòng)搖了我對(duì)MicroSD卡和SD卡的操作是一樣的這個(gè)看法。因?yàn)檫@個(gè)低級(jí)的錯(cuò)誤耽誤了我三四天,看來細(xì)心很重要?。∥乙呀?jīng)不止一次因?yàn)椴患?xì)心浪費(fèi)大量時(shí)間了,希望大家也引以為戒。好了,現(xiàn)在SD卡的命令和回應(yīng)清楚了,我們下面講講SD卡的復(fù)位,初始化和讀寫方法。復(fù)位方法:1.拉高CS,發(fā)送至少74個(gè)clk周期來使SD卡達(dá)到正常工作電壓和進(jìn)行同步2.選低CS,發(fā)送CMD0,需要收到回應(yīng)0x01表示成功進(jìn)入idle狀態(tài)3.拉高CS,發(fā)送8個(gè)時(shí)鐘復(fù)位時(shí)序圖:
初始化:
復(fù)位成功后,SD卡就進(jìn)入了SPI模式,接著應(yīng)該進(jìn)行初始化。初始化說白了有兩種方法:(1)發(fā)送CMD1,(2)發(fā)送CMD55+ACMD41。我從網(wǎng)上查的資料可以看到這種說法:如果是MMC卡就發(fā)CMD1,SD卡則發(fā)CMD55+ACMD41。但是關(guān)于MicroSD卡要發(fā)哪種卻講的不太清楚,網(wǎng)上用這兩種方法都有人成功過,但有的都成功不了。我自己也碰到了這種問題,剛開始拿了自己手機(jī)上的寫著Nokia的2GB的MicroSD卡(應(yīng)該是雜牌的)初始化了兩天也沒成功,快要放棄的時(shí)候想起來為什么不換張?jiān)囋嚹兀谑蔷驼沂矣呀枇怂氖謾C(jī)內(nèi)存卡,是2GB的Apacer的MicroSD卡(當(dāng)然也可能是雜牌的,室友買那卡的地方一般都是賣各種廉價(jià)電子產(chǎn)品的,大家都知道是雜牌的),結(jié)果一試就成功了。后來我用了令一種方法發(fā)現(xiàn)也可以初始化,也就是說兩種方法都可以初始化成功。但我的那種怎么就不行呢?難道不是所有MicroSD卡都支持SPI模式。我在網(wǎng)上百度了半天也不能確定是不是所有MicroSD卡都支持SPI模式。但我想,現(xiàn)在MicroSD卡的生產(chǎn)公司很多,而且你也并不能保證你的MicroSD卡不是雜牌的。你并不知道生產(chǎn)廠家進(jìn)行了那些改變,因?yàn)榇_實(shí)有些廠家生產(chǎn)的SD卡精簡(jiǎn)了一些命令。所以初始化的時(shí)候建議兩種都試一下,不過我記得SD卡的說明書上推薦使用第二種方法。
下面是初始化方法:
(1)使用CMD1
發(fā)送CMD1,收到0x00表示成功
時(shí)序圖如下:
(2)使用CMD55+ACMD41
1.發(fā)送CMD55(表示使用ACMDx類命令),收到0x01
2.發(fā)送ACMD41,收到0x00表示成功
記住SD卡的初始化速度不能大于400kHz,所以一開始復(fù)位和初始化時(shí)spi的速率要設(shè)置低一點(diǎn)。
讀單塊和多塊:
SD卡讀單塊和多塊的命令分別為CMD17和CMD18,他們的參數(shù)即要讀的區(qū)域的開始地址。因?yàn)榭紤]到一般SD卡的讀寫要求地址對(duì)齊,所以一般我們都將地址轉(zhuǎn)為塊,并以扇區(qū)(塊)(512Byte)為單位進(jìn)行讀寫,比如讀扇區(qū)0參數(shù)就為0,讀扇區(qū)1參數(shù)就為1<<9(即地址512),讀扇區(qū)2參數(shù)就為2<<9(即地址1024),依此類推。
讀單塊方法:
1.發(fā)送CMD17,收到0x00表示成功
2.連續(xù)讀直到讀到開始字節(jié)0xFE
3.讀512個(gè)字節(jié)
4.讀兩個(gè)CRC字節(jié)
讀單塊時(shí)序圖:
讀多塊方法:
1.發(fā)送CMD18讀,收到0x00表示成功
2.連續(xù)讀直到讀到開始字節(jié)0xFE
3.讀512字節(jié)
4.讀兩個(gè)CRC字節(jié)
5.如果還想讀下一扇區(qū),重復(fù)2-4
6.發(fā)送CMD12來停止讀多塊操作
寫單塊和多塊:
SD卡用CMD24和CMD25來寫單塊和多塊,參數(shù)的定義和讀操作是一樣的。
寫單塊方法:
1.發(fā)送CMD24,收到0x00表示成功
2.發(fā)送若干時(shí)鐘
3.發(fā)送寫單塊開始字節(jié)0xFE
4.發(fā)送512個(gè)字節(jié)數(shù)據(jù)
5.發(fā)送2字節(jié)CRC(可以均為0xff)
6.連續(xù)讀直到讀到XXX00101表示數(shù)據(jù)寫入成功
7.繼續(xù)讀進(jìn)行忙檢測(cè)(讀到0x00表示SD卡正忙),當(dāng)讀到0xff表示寫操作完成
寫單塊時(shí)序圖:
寫多塊方法:
1.發(fā)送CMD25,收到0x00表示成功
2.發(fā)送若干時(shí)鐘
3.發(fā)送寫多塊開始字節(jié)0xFC
4.發(fā)送512字節(jié)數(shù)據(jù)
5.發(fā)送兩個(gè)CRC(可以均為0xff)
6.連續(xù)讀直到讀到XXX00101表示數(shù)據(jù)寫入成功
7.繼續(xù)讀進(jìn)行忙檢測(cè),直到讀到0xFF表示寫操作完成
8.如果想讀下一扇區(qū)重復(fù)2-7步驟
9.發(fā)送寫多塊停止字節(jié)0xFD來停止寫操作
10.進(jìn)行忙檢測(cè)直到讀到0xFF
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Grid Coffee品牌介紹模版
- 二年級(jí)品德與社會(huì)下冊(cè) 向人民英雄敬禮教案1 未來版
- 2024年高中生物 第2章 動(dòng)物和人體生命活動(dòng)的調(diào)節(jié) 第2節(jié) 通過激素的調(diào)節(jié)(Ⅱ)教案 新人教版必修3
- 2023七年級(jí)生物下冊(cè) 第四單元 生物圈中的人 第11章 人體代謝廢物的排出11.1 人體產(chǎn)生的代謝廢物教案 (新版)北師大版
- 2024-2025學(xué)年高中化學(xué) 第1章 第3節(jié) 原子結(jié)構(gòu)與元素性質(zhì) 第1課時(shí) 電離能及其變化規(guī)律教案 魯科版選修3
- 2024-2025學(xué)年高中語文 3 柳子厚墓志銘教案 語文版選修《唐宋八大家散文鑒賞》
- 告別母校 課件
- 亡羊補(bǔ)牢圖片 課件
- 第一單元(復(fù)習(xí))-三年級(jí)語文上冊(cè)單元復(fù)習(xí)(統(tǒng)編版)
- 2024年全球供應(yīng)鏈重組:挑戰(zhàn)與機(jī)遇
- 《小學(xué)數(shù)學(xué)萬能說課稿》
- 新概念二單詞表
- 全國(guó)職業(yè)院校技能大賽高職組(酒水服務(wù)賽項(xiàng))備賽試題庫(含答案)
- GA 667-2020防爆炸透明材料
- 幼兒園《警察職業(yè)介紹》PPT
- 民航服務(wù)心理學(xué)課程標(biāo)準(zhǔn)-
- 《premiere視頻編輯》課程標(biāo)準(zhǔn)
- 物業(yè)管理服務(wù)的整體設(shè)想及策劃
- 招標(biāo)拍賣掛牌出讓國(guó)有土地使用權(quán)規(guī)范(試行) 3.98元
- 《莊子》全譯(原文+注釋+譯文).
評(píng)論
0/150
提交評(píng)論