1.SDIO
SDIO全稱是安全數(shù)字輸入/輸出接口晌区,多媒體卡(MMC)眷篇、SD卡当船、SDI/O卡都有SDIO接口巩踏。
SD卡(Secure Digital Memory Card)即:安全數(shù)碼卡佳吞;?????SD卡按容量分類踱启,可以分為3類:SDSC卡续扔、SDHC卡答倡、SDXC卡
SD卡優(yōu)點(diǎn):
①高容量疮丛,最大可達(dá)2TB(目前已有512GB的SD卡)幔嫂。
②高安全性辆它。
③高速,目前已有讀取速度近100MB/S的SD卡履恩。
④體積小巧锰茉,標(biāo)準(zhǔn)SD卡大小只有一張郵票大小,重量?jī)H2g切心。
⑤接口簡(jiǎn)單飒筑,支持SPI和SDIO兩種訪問(wèn)模式。
注意:TF卡+卡套绽昏,組合起來(lái)也可以當(dāng)SD卡用协屡,不過(guò),很大一部分TF卡而涉,不支持SPI訪問(wèn)模式著瓶。所以,SPI驅(qū)動(dòng)SD卡的時(shí)候啼县,盡量選擇大卡(SD卡)材原,而不要選擇TF卡。
SD命令有4種類型:
????無(wú)響應(yīng)廣播命令(bc)季眷,發(fā)送到所有卡余蟹,不返回任務(wù)響應(yīng);
????帶響應(yīng)廣播命令(bcr)子刮,發(fā)送到所有卡威酒,同時(shí)接收來(lái)自所有卡響應(yīng);
????尋址命令(ac)挺峡,發(fā)送到選定卡葵孤,DAT線無(wú)數(shù)據(jù)傳輸;
????尋址數(shù)據(jù)傳輸命令(adtc)橱赠,發(fā)送到選定卡尤仍,DAT線有數(shù)據(jù)傳輸。
要實(shí)現(xiàn)SDIO驅(qū)動(dòng)SD卡狭姨,最重要的步驟就是SD卡的初始化
????? 從SD卡初始化流程可知宰啦,不管什么卡(這里我們將卡分為4類:SD2.0高容量卡(SDHC,最大32G)饼拍,SD2.0標(biāo)準(zhǔn)容量卡(SDSC赡模,最大2G),SD1.x卡和MMC卡)师抄,首先我們要執(zhí)行的是卡上電(設(shè)置SDIO_POWER[1:0]=11)漓柑,上電后發(fā)送CMD0,對(duì)卡進(jìn)行軟復(fù)位,之后發(fā)送CMD8命令欺缘,用于區(qū)分SD卡2.0栋豫,只有2.0及以后的卡才支持CMD8命令,MMC卡和V1.x的卡谚殊,是不支持該命令的丧鸯。
?????? CMD3,用于設(shè)置卡相對(duì)地址(RCA嫩絮,必須為非0)丛肢,對(duì)于SD卡(非MMC卡),在收到CMD3后剿干,將返回一個(gè)新的RCA給主機(jī)蜂怎,方便主機(jī)尋址。RCA的存在允許一個(gè)SDIO接口掛多個(gè)SD卡置尔,通過(guò)RCA來(lái)區(qū)分主機(jī)要操作的是哪個(gè)卡杠步。對(duì)于MMC卡,則不是由SD卡自動(dòng)返回RCA榜轿,而是主機(jī)主動(dòng)設(shè)置MMC卡的RCA幽歼,即通過(guò)CMD3帶參數(shù)(高16位用于RCA設(shè)置),實(shí)現(xiàn)RCA設(shè)置谬盐。同樣MMC卡也支持一個(gè)SDIO接口掛多個(gè)MMC卡甸私,不同于SD卡的是所有的RCA都是由主機(jī)主動(dòng)設(shè)置的,而MMC卡的RCA則是SD卡發(fā)給主機(jī)的飞傀。
?????? 在獲得卡RCA之后皇型,我們便可以發(fā)送CMD9(帶RCA參數(shù)),獲得SD卡的CSD寄存器內(nèi)容砸烦,從CSD寄存器弃鸦,我們可以得到SD卡的容量和扇區(qū)大小等十分重要的信息。CSD寄存器幢痘。
??????? 最后通過(guò)CMD7命令唬格,選中我們要操作的SD卡,即可開(kāi)始對(duì)SD卡的讀寫操作了
一般SD卡在接收到命令行雪隧,都會(huì)有一個(gè)應(yīng)答(CMD0例外)西轩,這個(gè)應(yīng)答我們也稱之為響應(yīng)员舵。STM32的SDIO接口脑沿,支持2種響應(yīng)類型:短響應(yīng)(48位)和長(zhǎng)響應(yīng)(136位)。
2.FATFS
FF_USE_STRFUNC設(shè)為1:開(kāi)啟字符串功能
FF_USE_MKFS設(shè)為1:開(kāi)啟格式化功能
FF_CODE_PAGE設(shè)為936:簡(jiǎn)體中文
FF_MIN_SS马僻、FF_MAX_SS設(shè)為512:扇區(qū)大小512
FF_FS_TINY設(shè)為1:文件對(duì)象(FIL)不再包括數(shù)據(jù)緩沖區(qū)庄拇,而是使用FatFs中的公用緩沖區(qū),適用于RAM偏小的情況。
FF_FS_NORTC設(shè)為1:禁用RTC(時(shí)間戳)功能措近,因?yàn)閟tm32不具備獲取時(shí)間的功能