SD卡引腳及spi模式基本操作過程
《SD卡引腳及spi模式基本操作過程》由會員分享,可在線閱讀,更多相關(guān)《SD卡引腳及spi模式基本操作過程(13頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
SD 卡引腳及 spi 模式基本操作過程 摘自網(wǎng)絡(luò) 對于 SD 卡的硬件結(jié)構(gòu) 在官方的文檔上有很詳細(xì)的介紹 如 SD 卡內(nèi)的存儲器結(jié)構(gòu) 存儲單元組織方式等內(nèi)容 要實(shí)現(xiàn)對它的讀寫 最核心的是它的時(shí)序 筆者在經(jīng)過了實(shí)際 的測試后 使用 51 單片機(jī)成功實(shí)現(xiàn)了對 SD 卡的扇區(qū)讀寫 并對其讀寫速度進(jìn)行了評估 下面先來講解 SD 卡的讀寫時(shí)序 SD 卡的引腳定義 SD 卡引腳功能詳述 SD 模式 SPI 模式引腳 編號 名稱 類型 描述 名稱 類型 描述 1 CD DAT3 IO 或 PP 卡檢測 數(shù)據(jù)線 3 CS I 片選 2 CMD PP 命令 回應(yīng) DI I 數(shù)據(jù)輸入 3 VSS1 S 電源地 VSS S 電源地 4 VDD S 電源 VDD S 電源 5 CLK I 時(shí)鐘 SCLK I 時(shí)鐘 6 VSS2 S 電源地 VSS2 S 電源地 7 DAT0 IO 或 PP 數(shù)據(jù)線 0 DO O 或 PP 數(shù)據(jù)輸出 8 DAT1 IO 或 PP 數(shù)據(jù)線 1 RSV 9 DAT2 IO 或 PP 數(shù)據(jù)線 2 RSV 注 S 電源供給 I 輸入 O 采用推拉驅(qū)動(dòng)的輸出 PP 采用推拉驅(qū)動(dòng)的輸入輸出 SD 卡 SPI 模式下與單片機(jī)的連接圖 SD 卡支持兩種總線方式 SD 方式與 SPI 方式 其中 SD 方式采用 6 線制 使用 CLK CMD DAT0 DAT3 進(jìn)行數(shù)據(jù)通信 而 SPI 方式采用 4 線制 使用 CS CLK DataIn DataOut 進(jìn)行數(shù)據(jù)通信 SD 方式時(shí)的數(shù)據(jù)傳輸速度與 SPI 方式要快 采用單片機(jī)對 SD 卡進(jìn)行讀寫時(shí)一般都采用 SPI 模式 采用不同的初始化方式可以使 SD 卡工作于 SD 方式或 SPI 方式 這里只對其 SPI 方式進(jìn)行介紹 SPI 方式驅(qū)動(dòng) SD 卡的方法 SD 卡的 SPI 通信接口使其可以通過 SPI 通道進(jìn)行數(shù)據(jù)讀寫 從應(yīng)用的角度來看 采 用 SPI 接口的好處在于 很多單片機(jī)內(nèi)部自帶 SPI 控制器 不光給開發(fā)上帶來方便 同時(shí) 也見降低了開發(fā)成本 然而 它也有不好的地方 如失去了 SD 卡的性能優(yōu)勢 要解決這 一問題 就要用 SD 方式 因?yàn)樗峁└蟮目偩€數(shù)據(jù)帶寬 SPI 接口的選用是在上電初 始時(shí)向其寫入第一個(gè)命令時(shí)進(jìn)行的 以下介紹 SD 卡的驅(qū)動(dòng)方法 只實(shí)現(xiàn)簡單的扇區(qū)讀寫 1 命令與數(shù)據(jù)傳輸 1 命令傳輸 SD 卡自身有完備的命令系統(tǒng) 以實(shí)現(xiàn)各項(xiàng)操作 命令格式如下 命令的傳輸過程采用發(fā)送應(yīng)答機(jī)制 過程如下 每一個(gè)命令都有自己命令應(yīng)答格式 在 SPI 模式中定義了三種應(yīng)答格式 如下表所示 字節(jié) 位 含義 7 開始位 始終為 0 6 參數(shù)錯(cuò)誤 5 地址錯(cuò)誤 4 擦除序列錯(cuò)誤 3 CRC 錯(cuò)誤 2 非法命令 1 擦除復(fù)位 1 0 閑置狀態(tài) 字節(jié) 位 含義 7 開始位 始終為 0 6 參數(shù)錯(cuò)誤 5 地址錯(cuò)誤 4 擦除序列錯(cuò)誤 3 CRC 錯(cuò)誤 2 非法命令 1 擦除復(fù)位 1 0 閑置狀態(tài) 7 溢出 CSD 覆蓋 6 擦除參數(shù) 5 寫保護(hù)非法 4 卡 ECC 失敗 3 卡控制器錯(cuò)誤 2 未知錯(cuò)誤 1 寫保護(hù)擦除跳過 鎖 解鎖失敗 2 0 鎖卡 字節(jié) 位 含義 7 開始位 始終為 0 6 參數(shù)錯(cuò)誤 5 地址錯(cuò)誤 4 擦除序列錯(cuò)誤 3 CRC 錯(cuò)誤 1 2 非法命令 1 擦除復(fù)位 0 閑置狀態(tài) 2 5 全部 操作條件寄存器 高位在前 寫命令的例程 C 程序 向 SD 卡中寫入命令 并返回回應(yīng)的第二個(gè)字節(jié) unsigned char Write Command SD unsigned char CMD unsigned char tmp unsigned char retry 0 unsigned char i 禁止 SD 卡片選 SPI CS 1 發(fā)送 8 個(gè)時(shí)鐘信號 Write Byte SD 0 xFF 使能 SD 卡片選 SPI CS 0 向 SD 卡發(fā)送 6 字節(jié)命令 for i 0 i 0 x06 i Write Byte SD CMD 獲得 16 位的回應(yīng) Read Byte SD read the first byte ignore it do 讀取后 8 位 tmp Read Byte SD retry while tmp 0 xff return tmp 初始化 SD 卡的初始化是非常重要的 只有進(jìn)行了正確的初始化 才能進(jìn)行后面的各項(xiàng)操作 在初始化過程中 SPI 的時(shí)鐘不能太快 否則會造初始化失敗 在初始化成功后 應(yīng)盡量 提高 SPI 的速率 在剛開始要先發(fā)送至少 74 個(gè)時(shí)鐘信號 這是必須的 在很多讀者的實(shí) 驗(yàn)中 很多是因?yàn)槭韬隽诉@一點(diǎn) 而使初始化不成功 隨后就是寫入兩個(gè)命令 CMD0 與 CMD1 使 SD 卡進(jìn)入 SPI 模式 初始化時(shí)序圖 初始化例程 C 程序 初始化 SD 卡到 SPI 模式 unsigned char SD Init unsigned char retry temp unsigned char i unsigned char CMD 0 x40 0 x00 0 x00 0 x00 0 x00 0 x95 SD Port Init 初始化驅(qū)動(dòng)端口 Init Flag 1 將初始化標(biāo)志置 1 for i 0 isector count sectorBuffer dat 6 vinf sector count sector count sectorBuffer dat 7 vinf sector count sector count sectorBuffer dat 8 獲取 multiplier vinf sector multiply sectorBuffer dat 9 vinf sector multiply sector multiply sectorBuffer dat 10 獲取 SD 卡的容量 vinf size MB vinf sector count 9 vinf sector multiply get the name of the card Read CID SD sectorBuffer dat vinf name 0 sectorBuffer dat 3 vinf name 1 sectorBuffer dat 4 vinf name 2 sectorBuffer dat 5 vinf name 3 sectorBuffer dat 6 vinf name 4 sectorBuffer dat 7 vinf name 5 0 x00 end flag 以上程序?qū)⑿畔⒀b載到一個(gè)結(jié)構(gòu)體中 這個(gè)結(jié)構(gòu)體的定義如下 typedef struct SD VOLUME INFO SD SD Card info unsigned int size MB unsigned char sector multiply unsigned int sector count unsigned char name 6 VOLUME INFO TYPE 扇區(qū)讀 扇區(qū)讀是對 SD 卡驅(qū)動(dòng)的目的之一 SD 卡的每一個(gè)扇區(qū)中有 512 個(gè)字節(jié) 一次扇區(qū) 讀操作將把某一個(gè)扇區(qū)內(nèi)的 512 個(gè)字節(jié)全部讀出 過程很簡單 先寫入命令 在得到相應(yīng) 的回應(yīng)后 開始數(shù)據(jù)讀取 扇區(qū)讀的時(shí)序 扇區(qū)讀的程序例程 C 程序 unsigned char SD Read Sector unsigned long sector unsigned char buffer unsigned char retry 命令 16 unsigned char CMD 0 x51 0 x00 0 x00 0 x00 0 x00 0 xFF unsigned char temp 地址變換 由邏輯塊地址轉(zhuǎn)為字節(jié)地址 sector sector 24 CMD 2 sector CMD 3 sector 將命令 16 寫入 SD 卡 retry 0 do 為了保證寫入命令 一共寫 100 次 temp Write Command MMC CMD retry if retry 100 return READ BLOCK ERROR block write Error while temp 0 Read Start Byte form MMC SD Card FEh Start Byte Now data is ready you can read it out while Read Byte MMC 0 xfe readPos 0 SD get data 512 buffer 512 字節(jié)被讀出到 buffer 中 return 0 其中 SD get data 函數(shù)如下 獲取數(shù)據(jù)到 buffer 中 void SD get data unsigned int Bytes unsigned char buffer unsigned int j for j 0 j Bytes j buffer Read Byte SD 扇區(qū)寫 扇區(qū)寫是 SD 卡驅(qū)動(dòng)的另一目的 每次扇區(qū)寫操作將向 SD 卡的某個(gè)扇區(qū)中寫入 512 個(gè)字節(jié) 過程與扇區(qū)讀相似 只是數(shù)據(jù)的方向相反與寫入命令不同而已 扇區(qū)寫的時(shí)序 扇區(qū)寫的程序例程 C 程序 寫 512 個(gè)字節(jié)到 SD 卡的某一個(gè)扇區(qū)中去 返回 0 說明寫入成功 unsigned char SD write sector unsigned long addr unsigned char Buffer unsigned char tmp retry unsigned int i 命令 24 unsigned char CMD 0 x58 0 x00 0 x00 0 x00 0 x00 0 xFF addr addr 24 CMD 2 addr CMD 3 addr 寫命令 24 到 SD 卡中去 retry 0 do 為了可靠寫入 寫 100 次 tmp Write Command SD CMD retry if retry 100 return tmp send commamd Error while tmp 0 在寫之前先產(chǎn)生 100 個(gè)時(shí)鐘信號 for i 0 i 100 i Read Byte SD 寫入開始字節(jié) Write Byte MMC 0 xFE 現(xiàn)在可以寫入 512 個(gè)字節(jié) for i 0 i 512 i Write Byte MMC Buffer CRC Byte Write Byte MMC 0 xFF Dummy CRC Write Byte MMC 0 xFF CRC Code tmp Read Byte MMC read response if tmp return WRITE BLOCK ERROR Error 等到 SD 卡不忙為止 因?yàn)閿?shù)據(jù)被接受后 SD 卡在向儲存陣列中編程數(shù)據(jù) while Read Byte MMC 0 xff 禁止 SD 卡 SPI CS 1 return 0 寫入成功 此上內(nèi)容在筆者的實(shí)驗(yàn)中都已調(diào)試通過 單片機(jī)采用 STC89LE 單片機(jī) SD 卡的初 始化電壓為 2 0V 3 6V 操作電壓為 3 1V 3 5V 因此不能用 5V 單片機(jī) 或進(jìn)行分壓處 理 工作于 22 1184M 的時(shí)鐘下 由于所采用的單片機(jī)中沒硬件 SPI 采用軟件模擬 SPI 因此讀寫速率都較慢 如果要半 SD 卡應(yīng)用于音頻 視頻等要求高速場合 則需要選 用有硬件 SPI 的控制器 或使用 SD 模式 當(dāng)然這就需要各位讀者對 SD 模式加以研究 有了 SPI 模式的基礎(chǔ) SD 模式應(yīng)該不是什么難事- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
15 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- SD 引腳 spi 模式 基本 操作過程
鏈接地址:http://kudomayuko.com/p-10027954.html