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