<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 電源與新能源 > 設計應用 > AT89S52單片機和FAT16文件的SD卡讀寫(xiě)設計

AT89S52單片機和FAT16文件的SD卡讀寫(xiě)設計

作者: 時(shí)間:2014-01-16 來(lái)源:網(wǎng)絡(luò ) 收藏
個(gè)數、磁盤(pán)介質(zhì)描述、分配單元大小等重要參數。

本文引用地址:http://dyxdggzs.com/article/226899.htm

DBR之后是FAT(File Allocation Table,文件分配記錄表),記錄文件在磁盤(pán)上的存儲位置。在Windows系統中,文件存儲的單位是簇而不是字節,1個(gè)文件不是連續地存放于磁盤(pán)的某一區域,而往往分成若干段,像鏈子一樣存放。FAT表記錄了每個(gè)文件的起始簇號、后繼簇號和終止簇號。FAT表中的每個(gè)表項對應數據存儲區中的1個(gè)簇,由于FAT表對文件管理的重要性,FAT表有1個(gè)備份。

DIR是根目錄區,緊接著(zhù)第2個(gè)FAT表(FAT2)之后,記錄著(zhù)根目錄下每個(gè)文件的起始簇號、大小等屬性。操作系統根據DIR中文件的起始簇號和大小,結合FAT表來(lái)定位文件。文件系統中1個(gè)文件的存儲示意圖如圖5所示。

AT89S52單片機和FAT16文件的SD卡讀寫(xiě)設計3.2 SD卡指令規范

通過(guò)相應指令與SD卡進(jìn)行交互。SD卡有特定的指令格式,都是6字節長(cháng),最高有效位(MSB)傳輸優(yōu)先,如圖6所示。

AT89S52單片機和FAT16文件的SD卡讀寫(xiě)設計

SD卡指令的最高2位“01”是SD卡指令的開(kāi)始標志,最后1位“1”是結束標志。6位的指令是SD卡的指令序號,例如CMD17的6位指令即17的二進(jìn)制表示010001。指令參數占4字節,具體內容參照SD卡規范。7位CRC校檢的生成多項式為G(x)=x7+x3+1。事實(shí)上SD卡在進(jìn)入SPI模式后,不再通過(guò)CRC碼來(lái)確認指令的傳輸正確與否,指令中的7為CRC校檢,只在SD模式下起作用。因此僅SD卡上電后的第1條切換SPI模式指令CMd0 需要校檢碼,而此校檢碼是固定的0x95,其他指令的CRC均置1即可。SD卡響應有4種格式,不同指令對應不同響應,具體內容可參看SD卡規范。

3.3 SD卡讀寫(xiě)驅動(dòng)

3.3.1 SPI時(shí)序模擬

用軟件來(lái)模擬SPI總線(xiàn)的具體方法是:將SCK的初始狀態(tài)置0,允許接收后(即CS置0)將SCK置1,這樣由DI線(xiàn)輸出1位數據到SD卡;接著(zhù)再將SCK置0,由DO線(xiàn)從SD卡讀1位數據。至此,模擬1位數據輸入輸出完成。此后再將SCK置1,依次循環(huán)8次,完成SPI總線(xiàn)1字節數據的輸入輸出。

以下是本系統軟件模擬SPI時(shí)序的匯編代碼。以通用寄存器A作為函數參數,實(shí)現將寄存器A中的數據通過(guò)SPI總線(xiàn)發(fā)送出去,并將從SPI總線(xiàn)讀到的數據存到寄存器A中。

AT89S52單片機和FAT16文件的SD卡讀寫(xiě)設計

3.3.2 SD卡的初始化

SD卡的初始化流程如圖7所示。SD卡上電延時(shí)74個(gè)時(shí)鐘周期后,單片機向SD卡發(fā)送復位命令CMDO,使SD卡進(jìn)入SPI模式。之后循環(huán)發(fā)送激活SD卡指令CMD1,直到接收到SD卡響應的第0位為0。

AT89S52單片機和FAT16文件的SD卡讀寫(xiě)設計3.3.3 SD卡數據塊的讀寫(xiě)

完成SD卡的初始化后,就可以對SD卡進(jìn)行讀寫(xiě)操作。讀寫(xiě)操作都是通過(guò)指令來(lái)完成的:?jiǎn)螇K寫(xiě)命令CMD24,多塊寫(xiě)命令CMD25;單塊讀命令 CMD17,多塊讀命令CMD18。單塊讀寫(xiě)時(shí),數據塊的長(cháng)度為512字節,多塊讀寫(xiě)時(shí)SD卡收到1個(gè)停止命令CMD12后停止讀寫(xiě)。圖8、圖9分別是單塊讀、寫(xiě)SD卡的軟件流程。

AT89S52單片機和FAT16文件的SD卡讀寫(xiě)設計

3.4 文件讀寫(xiě)

按照文件系統的文件組織規范,編寫(xiě)讀文件函數和寫(xiě)文件函數。FAT16文件讀寫(xiě)的軟件流程如圖10所示。

AT89S52單片機和FAT16文件的SD卡讀寫(xiě)設計



關(guān)鍵詞: AT89S52 單片機 FAT16

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>