日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]SD卡是嵌入式設(shè)備中很常用的一種存儲(chǔ)設(shè)備,體積小,容量大,通訊簡(jiǎn)單,電路簡(jiǎn)單所以受到很多設(shè)備廠商的歡迎,主要用來記錄設(shè)備運(yùn)行過程中的各種信息,以及程序的各種配置信息,很是方便,有這樣幾點(diǎn)是需要知道的SD卡是基于fl

SD卡是嵌入式設(shè)備中很常用的一種存儲(chǔ)設(shè)備,體積小,容量大,通訊簡(jiǎn)單,電路簡(jiǎn)單所以受到很多設(shè)備廠商的歡迎,主要用來記錄設(shè)備運(yùn)行過程中的各種信息,以及程序的各種配置信息,很是方便,有這樣幾點(diǎn)是需要知道的

SD卡是基于flash的存儲(chǔ)卡。

SD卡和MMC卡的區(qū)別在于初始化過程不同。SD卡并不是我們通常意義上的手機(jī)擴(kuò)展卡,那種卡叫做TF卡,但是通訊以及驅(qū)動(dòng)模式是類似的.

SD卡的通信協(xié)議包括SD和SPI兩類,SD卡上電之后默認(rèn)處于SD狀態(tài)。

SD卡使用卡內(nèi)智能控制模塊進(jìn)行FLASH操作控制,包括協(xié)議、安全算法、

數(shù)據(jù)存取、ECC算法、缺陷處理和分析、電源管理、時(shí)鐘管理。這些都不需要用戶關(guān)系,這是SD卡廠商做的事情

驅(qū)動(dòng)SD卡主要要實(shí)現(xiàn)讀扇區(qū),寫扇區(qū),初始化,獲取SD卡相關(guān)配置信息這幾個(gè)就可以了,

另外.SD卡本身只是一種數(shù)據(jù)介質(zhì),它不含有文件系統(tǒng),文件系統(tǒng)是一種文件的組織格式,是獨(dú)立于存儲(chǔ)介質(zhì)的一種規(guī)范


標(biāo)準(zhǔn)SD卡引腳序列


SD卡引腳功能表


TF卡引腳排序


TF卡引腳功能表

由此可見,TF卡比SD卡少了一個(gè)VSS引腳,也就是少了一個(gè)供電引腳

另外電路設(shè)計(jì)時(shí)若SD卡使用SPI模式,那么不用的幾根數(shù)據(jù)線應(yīng)加上上拉電阻,否者會(huì)因?yàn)檫@幾根數(shù)據(jù)線的電流震蕩引起電流損耗,造成電路上的不穩(wěn)定

SD卡電路SPI驅(qū)動(dòng)模式

SD卡內(nèi)部有五個(gè)我們可以讀取的寄存器,分別如下

要讀取這些信息就需要與卡通訊,SD通訊是用命令+數(shù)據(jù)的形式進(jìn)行的,命令格式如下


也就是說,一次SD卡命令發(fā)送一共要發(fā)送6個(gè)字節(jié),對(duì)于SPI通訊而言,就是SPI總線上傳送六個(gè)字節(jié)

字節(jié)1的最高2位固定為01,低6位為命令號(hào)(比如CMD16,

為10000即16進(jìn)制的0X10,完整的CMD16,第一個(gè)字節(jié)為01010000,即0X10+0X40)。

字節(jié)2~5為命令參數(shù),有些命令是沒有參數(shù)的。對(duì)于沒有參數(shù)的命令默認(rèn)發(fā)送0即可

字節(jié)6的高七位為CRC值,最低位恒定為1,crc計(jì)算遵循以下規(guī)律


GX為生成多項(xiàng)式,具體計(jì)算方法請(qǐng)查看CRC計(jì)算相關(guān),不過有一點(diǎn)好處就是,在SPI驅(qū)動(dòng)模式下,不需要CRC校驗(yàn)(默認(rèn)SD卡在SPI模式下不開啟CRC校驗(yàn),在SD模式下默認(rèn)開始CRC校驗(yàn)),所以我們只需要對(duì)CMD0進(jìn)行CRC就可以了,后面的CRC都可以不管(因?yàn)樵贑MD0之前是SD模式,所以第一個(gè)命令需要,切換之后就不用了),而CMD0的CRC為0x95(加上了之后的一位1)

注:SPI模式下打開crc校驗(yàn)需要用到CMD59的保留命令,請(qǐng)查閱相關(guān)資料

SD卡的命令表如下所示(以下僅寫出SPI模式的CMD)


CMD0復(fù)位SD卡,重置所有卡到Idle狀態(tài),參數(shù)為0

CMD1設(shè)置SD卡到ACTIVATE模式,也就是推出IDLE模式


CMD8發(fā)送接口狀態(tài)命令

CMD9讀取CSD寄存器

CMD10讀取CID寄存器


CMD12在多塊讀取的時(shí)候請(qǐng)求停止讀取

CMD13讀取SD卡狀態(tài)寄存器


CMD16設(shè)置單個(gè)扇區(qū)的大小一般都設(shè)置為512字節(jié)一個(gè)扇區(qū)

CMD17讀取扇區(qū)命令

CMD18讀取多個(gè)扇區(qū)知道發(fā)送停止命令


CMD24寫扇區(qū)命令

CMD25寫多個(gè)扇區(qū)命令


CMD27編輯CSD位

CMD28設(shè)置地址組保護(hù)位。寫保護(hù)由卡配置數(shù)據(jù)的WP_GRP_SIZE指定

CMD29清除保護(hù)位


CMD30要求卡發(fā)送寫保護(hù)狀態(tài),參數(shù)中有要查詢的地址


CMD32設(shè)置要擦除的第一個(gè)寫數(shù)據(jù)塊地址

CMD33設(shè)置要擦除的最后一個(gè)寫數(shù)據(jù)塊地址


CMD38擦除所有選中的塊


CMD42設(shè)置SD卡的解鎖或者上鎖

CMD55告訴SD卡下一個(gè)命令式卡應(yīng)用命令,不是標(biāo)準(zhǔn)命令


CMD56應(yīng)用相關(guān)的數(shù)據(jù)塊讀寫命令


CMD58讀取OCR信息

CMD59設(shè)置crc校驗(yàn)的使能與關(guān)閉(前面說到過)


ACMD13發(fā)送SD卡狀態(tài)


ACMD18保留作為SD安全應(yīng)用(也就是這命令沒用)


ACMD22發(fā)送寫數(shù)據(jù)塊的數(shù)目。響應(yīng)為32位+CRC

ACMD23設(shè)置寫前預(yù)擦除的數(shù)據(jù)塊數(shù)目(用來加速多數(shù)據(jù)塊寫操作)?!?”=默認(rèn)(一個(gè)塊)(1)

不管是否使用ACMD23,在多數(shù)據(jù)塊寫操作中都需要STOP_TRAN(CMD12)命令


ACMD25 26 38保留作為安全應(yīng)用


ACMD41要求訪問的卡發(fā)送它的操作條件寄存器(OCR)內(nèi)容

ACMD42連接[1]/斷開[0]卡上CD/DAT3(pin 1]的50K歐姆上拉電阻。上拉電阻可用來檢測(cè)卡

ACMD43-49保留作為安全應(yīng)用

ACMD51讀取SD配置寄存器SCR

ACMD命令,全稱應(yīng)該是application CMD,所以使用ACMD都需要在發(fā)送CMD55之后

發(fā)出命令后會(huì)收到相應(yīng)的響應(yīng),所有響應(yīng)通過CMD線傳輸,響應(yīng)以MSB開始,不同類型的響應(yīng)長(zhǎng)度根據(jù)類型不同而不同。

響應(yīng)以起始位開始(通常為“0”),接著這是傳輸方向的位(卡為0)。除了R3外其他

響應(yīng)都有CRC。每個(gè)響應(yīng)都以結(jié)束位(通常為“1”)結(jié)束。,SD卡響應(yīng)格式有多種

1.R1響應(yīng)



2.R1b響應(yīng)


多了一個(gè)忙數(shù)據(jù)

3.R2響應(yīng)


4.R3響應(yīng)(針對(duì)于read ocr的響應(yīng)CMD58)


5.響應(yīng)R4和R5都是正對(duì)于SD mode的響應(yīng)

6.針對(duì)CMD8命令的響應(yīng)R7

SD卡的初始化以及識(shí)別過程(為了方便起見,我們只檢測(cè)響應(yīng)的R1狀態(tài))

1.初始化與SD卡連接的硬件條件(MCU的SPI配置,IO口配置);

2.上電延時(shí)(>74個(gè)CLK)(為了讓卡正常啟動(dòng))

3.復(fù)位卡(CMD0),進(jìn)入IDLE狀態(tài),檢測(cè)R1的最低位,是否為閑置狀態(tài)

4.發(fā)送CMD8,檢查是否支持2.0協(xié)議,因?yàn)檫@個(gè)命令是在2.0的協(xié)議里面才添加的

5.根據(jù)不同協(xié)議檢查SD卡(命令包括:CMD55、CMD41、CMD58和CMD1等);

6.取消片選,發(fā)多8個(gè)CLK,結(jié)束初始化

具體請(qǐng)查看下圖


以下是網(wǎng)絡(luò)上找到的一份經(jīng)我修改之后的SD卡驅(qū)動(dòng),不完全符合SD卡標(biāo)準(zhǔn)驅(qū)動(dòng),但是我用著一直還蠻正常,大家有興趣可以看看改改

Spisd.c

#include"spisd.h"

//預(yù)定義SD卡類型

u8SD_Type=0;//SD卡的類型

//這部分應(yīng)根據(jù)具體的連線來修改!

#defineSD_CSPAout(4)//SD卡片選引腳

//data:要寫入的數(shù)據(jù)

//返回值:讀到的數(shù)據(jù)

staticu8SdSpiReadWriteByte(u8data)

{

returnSpi1ReadWriteByte(data);

}

//SD卡初始化的時(shí)候,需要低速

staticvoidSdSpiSpeedLow(void)

{

Spi1SetSpeed(SPI_SPEED_256);//設(shè)置到低速模式用于初始化,最高spi速度為400k

}

//SD卡正常工作的時(shí)候,可以高速了

staticvoidSdSpiSpeedHigh(void)

{

Spi1SetSpeed(SPI_SPEED_4);//設(shè)置到高速模式初始化完成之后進(jìn)行,最高可到25M,不過一般不用

}

staticvoidSdIOInit(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化A4

SD_CS=1;

Spi1Init();//初始化SPI接口

SdSpiSpeedLow();//初始化設(shè)置為低速

}

//等待卡準(zhǔn)備好

//返回值:0,準(zhǔn)備好了;其他,錯(cuò)誤代碼

staticu8SdWaitReady(void)

{

u32t=0;

do

{

if(SdSpiReadWriteByte(0XFF)==0XFF)return0;//OK

t++;

}while(t<0XFFFFFF);//等待

return1;

}

//取消選擇,釋放SPI總線

voidSD_DisSelect(void)

{

SD_CS=1;

SdSpiReadWriteByte(0xff);//提供額外的8個(gè)時(shí)鐘

}

//選擇sd卡,并且等待卡準(zhǔn)備OK

//返回值:0,成功;1,失敗;

u8SdSelect(void)

{

SD_CS=0;

if(SdWaitReady()==0)return0;//等待成功

SD_DisSelect();

return 1;//等待失敗

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在嵌入式系統(tǒng)開發(fā)中,自動(dòng)初始化機(jī)制是一種重要的設(shè)計(jì)思想,它極大地簡(jiǎn)化了系統(tǒng)啟動(dòng)和配置過程,提高了代碼的可維護(hù)性和可移植性。本文將深入探討嵌入式系統(tǒng)中的自動(dòng)初始化機(jī)制,包括其原理、實(shí)現(xiàn)方式以及代碼示例。

關(guān)鍵字: 嵌入式系統(tǒng) 初始化

定義一個(gè)變量,就是在內(nèi)存中為你定義的這個(gè)變量開辟一段內(nèi)存空間,如果這個(gè)變量沒有初始化,那么系統(tǒng)會(huì)隨機(jī)給這個(gè)變量賦一個(gè)值,這個(gè)值我一般稱它為"垃圾數(shù)"。沒有初始化的變量我認(rèn)為它是沒有意義的,是在浪費(fèi)內(nèi)存,就比如人剛出生的時(shí)...

關(guān)鍵字: 變量 初始化 賦值

  前不久蘋果發(fā)布的新MacBook Pro僅有一個(gè)Thunderblot接口,也去掉了SD卡槽,這讓很多用戶十分抓狂。應(yīng)該是早已預(yù)料到這種情況,蘋果對(duì)背后的決定作了很多解釋,并且對(duì)這種選擇很自

關(guān)鍵字: macbook pro sd卡

有時(shí)應(yīng)用需要檢查USB設(shè)備的加載與卸除消息,如U盤的插上與拔出。一種辦法是以輪詢的方式調(diào)用設(shè)備接口嘗試訪問設(shè)備,但這樣的做法效率很低,并且實(shí)時(shí)性不高。本文將介紹更為通用的方法,通過系統(tǒng)API函數(shù)

關(guān)鍵字: api函數(shù) sd卡 USB u盤

索尼在電視領(lǐng)域一直以追求高質(zhì)量的理念進(jìn)行研發(fā),索尼電視也在消費(fèi)者中擁有這很好的口碑,選擇其產(chǎn)品的也不在少數(shù)。但是有很多用戶反映,發(fā)現(xiàn)系統(tǒng)限制,無法進(jìn)行第三方軟件的安裝,這顯然無法滿足用戶的需求。

關(guān)鍵字: sd卡 索尼 索尼電視

SDA協(xié)會(huì)今天正式發(fā)布了SD Express存儲(chǔ)卡的新一代標(biāo)準(zhǔn)規(guī)范SD 8.0,過引入PCIe 4.0總線協(xié)議,可獲得最高接近4GB/s的傳輸速度,媲美旗艦級(jí)SSD固態(tài)硬盤。 2017年的SD 6.0

關(guān)鍵字: 4.0 8.0 pcie sd sd卡 存儲(chǔ)卡

大家好,如果你懶得單獨(dú)備份你的應(yīng)用程序、數(shù)據(jù)、聯(lián)系人、SMS、日歷、書簽、通話記錄等,那么這對(duì)你來說是一個(gè)非常有用的應(yīng)用程序。

關(guān)鍵字: Android sd卡 備份

小編為大家總結(jié)了一篇基于 STM32 和 CAN 總線的溫度監(jiān)控系統(tǒng)的設(shè)計(jì),通過上位機(jī)與下位機(jī)的通信,實(shí)現(xiàn)對(duì)溫度數(shù)據(jù)的監(jiān)控,并經(jīng)初步實(shí)驗(yàn)達(dá)到了設(shè)計(jì)的要求。1 系統(tǒng)總體方案概述

關(guān)鍵字: can can總線 sd卡 嵌入式開發(fā) 電源模塊

SDA協(xié)會(huì)去年發(fā)布了SD 7.0標(biāo)準(zhǔn)規(guī)范,引入PCIe,定義了全新的SD Express存儲(chǔ)卡規(guī)格,現(xiàn)在Realtek(瑞昱)展示了第一款符合SD 7.0規(guī)范的主控制器“RTS5261”,相關(guān)產(chǎn)品也不

關(guān)鍵字: express realtek sd sd卡 主控 存儲(chǔ)卡 瑞昱

6月6日消息,在今年的WWDC 2019上,蘋果宣布將會(huì)讓全新的iPadOS支持USB-C的驅(qū)動(dòng)器,用戶可以直接將閃存盤或移動(dòng)硬盤等設(shè)備連接到iPad上,方便傳送文件。 據(jù)悉,此次增加的新功能包括:直

關(guān)鍵字: ipad sd卡 安卓 蘋果
關(guān)閉