<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              TF卡 MicroSD卡使用信息

              來源:CSDN 時間:2022-12-23 10:15:09

              TF卡 或者SD卡封裝,帶自談的

              SD卡介紹


              (相關資料圖)

              對于SD卡的硬件結構,在官方的文檔上有很詳細的介紹,如SD卡內的存儲器結構、存儲單元組織方式等內容。要實現對它的讀寫,最核心的是它的時序,筆者在經過了實際的測試后,使用51單片機成功實現了對SD卡的扇區讀寫,并對其讀寫速度進行了評估。下面先來講解SD卡的讀寫時序。

              覆寫保護開關

              在SD卡的右面通常有一個開關,即是覆寫保護開關,當覆寫保護開關撥下時,SD卡將受到覆寫保護,資料只能閱讀。當覆寫保護開關在上面位置,便可以覆寫資料。由于這保護開關是選擇性的,有些品牌的SD卡沒有此保護掣。

              驅動模式

              SD卡有兩種驅動模式:SPI模式與SDIO模式。它們所使用的接口信號是不同的。在SPI模式下,只會用到SD卡的4根信號線,即CS、DI、SCLK與DO(分別是SD卡的片選、數據輸入、時鐘與數據輸出)。

              傳輸模式

              SD卡共支持三種傳輸模式:SPI模式(獨立序列輸入和序列輸出),1位SD模式(獨立指令和數據通道,獨有的傳輸格式), 4位SD模式(使用額外的針腳以及某些重新設置的針腳。支持四位寬的并行傳輸)。

              (1) SD卡的引腳定義:及內部結構

              SD卡引腳功能詳述:

              雖然標準SD卡是九腳,但原理圖是SD卡座不是SD卡?。。栽韴D中一般都是11腳或更多。

              一般10腳是檢測卡是否插入,11腳是卡寫保護的檢測,再有其它引腳就是用于固定卡座的腳了,其實簡單應用這兩個腳都可以不要管的,這就是為什么SD卡原理圖中的引腳版本不同引腳數目也不同了。

              SDIO連接模式

              SPI連接模式

              注:S:電源供給  I:輸入 O:采用推拉驅動的輸出 PP:采用推拉驅動的輸入輸出

              SD卡支持兩種總線方式:SD方式與SPI方式。其中SD方式采用6線制,使用CLK、CMD、DAT0~DAT3進行數據通信。而SPI方式采用4線制,使用CS、CLK、DataIn、DataOut進行數據通信。SD方式時的數據傳輸速度與SPI方式要快,采用單片機對SD卡進行讀寫時一般都采用SPI模式。采用不同的初始化方式可以使SD卡工作于SD方式或SPI方式。這里只對其SPI方式進行介紹。

              (2)SPI方式驅動SD卡的方法SD卡的SPI通信接口使其可以通過SPI通道進行數據讀寫。從應用的角度來看,采用SPI接口的好處在于,很多單片機內部自帶SPI控制器,不光給開發上帶來方便,同時也見降低了開發成本。然而,它也有不好的地方,如失去了SD卡的性能優勢,要解決這一問題,就要用SD方式,因為它提供更大的總線數據帶寬。SPI接口的選用是在上電初始時向其寫入第一個命令時進行的。以下介紹SD卡的驅動方法,只實現簡單的扇區讀寫。 1) 命令與數據傳輸 1. 命令傳輸 SD卡自身有完備的命令系統,以實現各項操作。命令格式如下:

              命令的傳輸過程采用發送應答機制,過程如下:

              每一個命令都有自己命令應答格式。在SPI模式中定義了三種應答格式,如下表所示:

              寫命令的例程: //-----------------------------------------------------------------------------------------------   向SD卡中寫入命令,并返回回應的第二個字節 //----------------------------------------------------------------------------------------------- unsigned char Write_Command_SD(unsigned char *CMD) {undefined    unsigned char tmp;    unsigned char retry=0;    unsigned char i;

              //禁止SD卡片選    SPI_CS=1;    //發送8個時鐘信號    Write_Byte_SD(0xFF);    //使能SD卡片選    SPI_CS=0;

              //向SD卡發送6字節命令    for (i=0;i<0x06;i++)    {undefined       Write_Byte_SD(*CMD++);    }       //獲得16位的回應    Read_Byte_SD(); //read the first byte,ignore it.    do    {  //讀取后8位       tmp = Read_Byte_SD();       retry++;    }    while((tmp==0xff)&&(retry<100));    return(tmp); }

              2) 初始化 SD卡的初始化是非常重要的,只有進行了正確的初始化,才能進行后面的各項操作。在初始化過程中,SPI的時鐘不能太快,否則會造初始化失敗。在初始化成功后,應盡量提高SPI的速率。在剛開始要先發送至少74個時鐘信號,這是必須的。在很多讀者的實驗中,很多是因為疏忽了這一點,而使初始化不成功。隨后就是寫入兩個命令CMD0與CMD1,使SD卡進入SPI模式            初始化時序圖:

              初始化例程: //--------------------------------------------------------------------------     初始化SD卡到SPI模式 //-------------------------------------------------------------------------- unsigned char SD_Init() {     unsigned char retry,temp;    unsigned char i;    unsigned char CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95}; SD_Port_Init(); //初始化驅動端口       Init_Flag=1; //將初始化標志置1

              for (i=0;i<0x0f;i++)    {undefined       Write_Byte_SD(0xff); //發送至少74個時鐘信號    }      //向SD卡發送CMD0    retry=0;    do    { //為了能夠成功寫入CMD0,在這里寫200次      temp=Write_Command_SD(CMD);      retry++;      if(retry==200)      { //超過200次        return(INIT_CMD0_ERROR);//CMD0 Error!      }    }    while(temp!=1);  //回應01h,停止寫入       //發送CMD1到SD卡    CMD[0] = 0x41; //CMD1    CMD[5] = 0xFF;    retry=0;    do    { //為了能成功寫入CMD1,寫100次      temp=Write_Command_SD(CMD);      retry++;      if(retry==100)      { //超過100次        return(INIT_CMD1_ERROR);//CMD1 Error!      }    }    while(temp!=0);//回應00h停止寫入       Init_Flag=0; //初始化完畢,初始化標志清零       SPI_CS=1;  //片選無效    return(0); //初始化成功 } 3) 讀取CID CID寄存器存儲了SD卡的標識碼。每一個卡都有唯一的標識碼。 CID寄存器長度為128位。它的寄存器結構如下:

              它的讀取時序如下:

              與此時序相對應的程序如下: //------------------------------------------------------------------------------------     讀取SD卡的CID寄存器   16字節   成功返回0 //------------------------------------------------------------------------------------- unsigned char Read_CID_SD(unsigned char *Buffer) {undefined    //讀取CID寄存器的命令    unsigned char CMD[] = {0x4A,0x00,0x00,0x00,0x00,0xFF};    unsigned char temp;    temp=SD_Read_Block(CMD,Buffer,16); //read 16 bytes    return(temp); }

              4)讀取CSD CSD(Card-Specific Data)寄存器提供了讀寫SD卡的一些信息。其中的一些單元可以由用戶重新編程。具體的CSD結構如下:

              讀取CSD 的時序:

              相應的程序例程如下: //-----------------------------------------------------------------------------------------     讀SD卡的CSD寄存器   共16字節    返回0說明讀取成功 //----------------------------------------------------------------------------------------- unsigned char Read_CSD_SD(unsigned char *Buffer) {     //讀取CSD寄存器的命令    unsigned char CMD[] = {0x49,0x00,0x00,0x00,0x00,0xFF};    unsigned char temp;    temp=SD_Read_Block(CMD,Buffer,16); //read 16 bytes    return(temp); }

              4)

              讀取SD卡信息 綜合上面對CID與CSD寄存器的讀取,可以知道很多關于SD卡的信息,以下程序可以獲取這些信息。如下: //----------------------------------------------------------------------------------------------- //返回 //  SD卡的容量,單位為M //  sector count and multiplier MB are in u08 == C_SIZE / (2^(9-C_SIZE_MULT)) //  SD卡的名稱 //----------------------------------------------------------------------------------------------- void SD_get_volume_info() {       unsigned char i;     unsigned char c_temp[5];     VOLUME_INFO_TYPE SD_volume_Info,*vinf;     vinf=&SD_volume_Info; //Init the pointoer; /讀取CSD寄存器     Read_CSD_SD(sectorBuffer.dat); //獲取總扇區數  vinf->sector_count = sectorBuffer.dat[6] & 0x03;  vinf->sector_count <<= vinf-="">sector_count += sectorBuffer.dat[7];  vinf->sector_count <<= vinf-="">sector_count += (sectorBuffer.dat[8] & 0xc0) >> 6;  // 獲取multiplier  vinf->sector_multiply = sectorBuffer.dat[9] & 0x03;  vinf->sector_multiply <<= vinf-="">sector_multiply += (sectorBuffer.dat[10] & 0x80) >> 7; //獲取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] = 0x00; //end flag  }          以上程序將信息裝載到一個結構體中,這個結構體的定義如下: 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;

              TF卡介紹

              Micro SD Card,原名Trans-flashCard(TF卡),2004年正式更名為MicroSD Card,由SanDisk(閃迪)公司發明。MicroSD卡是一種極細小的快閃存儲器卡,其格式源自SanDisk創造,原本這種記憶卡稱為T-Flash,及后改稱為TransFlash;而重新命名為MicroSD的原因是因為被SD協會(SDA) 采立。

              它的體積為15mm x 11mm x1mm,差不多相等于手指甲的大小,是現時最細小的記憶卡。它也能通過SD轉接卡來接駁于SD卡插槽中使用?,F時MicroSD卡提供128MB、256MB、512MB、1G、2G、4G、8G、16G、32G、64G、128G的容量(MWC2014 世界移動通信大會期間,SanDisk(閃迪)打破了儲存卡最高64GB容量的傳統,正式發布了一款容量高達128GB的Micro SD XC 儲存卡。

              MicroSD的體積更小且可以轉換SD卡使用,TF卡的電路和引腳和SD卡是一樣的。

              TF卡的PCB封裝

              從下圖可以看出,靠近圓圈處的那個引腳沒有和TF相連。

              所以做TF封裝和電路,9腳懸空

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩