深入理解SD卡:協(xié)議

Overview

深入理解SD卡系列文章將介紹SD卡,涉及SD卡的協(xié)議及驅(qū)動(dòng)代碼。我們學(xué)習(xí)SD卡目的是為了理解SD卡的驅(qū)動(dòng)代碼,修改它,最終解決工作中遇到的SD卡相關(guān)的問題。本系列文章的目標(biāo)是理解SD,包括協(xié)議和驅(qū)動(dòng)代碼。在學(xué)習(xí)任何設(shè)備驅(qū)動(dòng)時(shí),有個(gè)東西我們是無(wú)法繞過的,那就是協(xié)議,本文講的就是SD卡的協(xié)議。

學(xué)習(xí)SD卡協(xié)議,可以讓我們更好的了解SD卡的運(yùn)作機(jī)制。在最開始學(xué)習(xí)SD卡的時(shí)候,我們只需要對(duì)SD卡的協(xié)議有個(gè)大概了解,能基本滿足我們看懂SD卡驅(qū)動(dòng)代碼就行。如果之后在閱讀SD卡驅(qū)動(dòng)代碼有不理解的地方,可以回過頭來(lái)翻翻SD協(xié)議文檔。建議在讀SD驅(qū)動(dòng)源碼和學(xué)習(xí)SD卡協(xié)議之間交替進(jìn)行,互相驗(yàn)證。

關(guān)于SD卡,有個(gè)叫SD卡協(xié)會(huì)的組織,這個(gè)組織規(guī)定了各種涉及SD卡的協(xié)議,并發(fā)布協(xié)議文檔。這些SD卡協(xié)議文檔,最重要的有兩種文檔:SD Specifications Part 1 Physical Layer Simplified Specification 和SD Specifications Part A2 SD Host Controller Simplified Specification。

個(gè)人理解,定協(xié)議的目的就是為了使某個(gè)事物標(biāo)準(zhǔn)化,標(biāo)準(zhǔn)化后,可以方便大家協(xié)作,簡(jiǎn)化工作量,提高效率,避免重復(fù)工作導(dǎo)致的浪費(fèi)。Physical Layer Simplified Specification(以下簡(jiǎn)稱:卡協(xié)議)規(guī)定了SD卡的物理規(guī)格和SD卡使用的命令協(xié)議,像Sandisk、Kingston這類SD卡制造商必須遵守該協(xié)議。假設(shè)Sandisk開發(fā)了一款SD卡沒有遵循該協(xié)議,而是自己內(nèi)部新搞了一套協(xié)議,這樣市面上就沒有設(shè)備能使用該款SD卡。除非有人專門開發(fā)一個(gè)驅(qū)動(dòng)去適配該款SD卡,但是這樣很浪費(fèi)人力。如果每個(gè)SD卡廠商都使用自己的協(xié)議,那么每支持一款SD卡,都需要重新寫一套代碼去適配它,那這工作量就很恐怖了。

類似的,SD Host Controller Simplified Specification(以下簡(jiǎn)稱:主機(jī)協(xié)議)用來(lái)標(biāo)準(zhǔn)化SD主機(jī)控制器,針對(duì)的是SD卡主機(jī)控制器廠商。這個(gè)協(xié)議不是強(qiáng)制的,在我們閱讀SD驅(qū)動(dòng)代碼的時(shí)候,如果涉及到SD卡主機(jī)控制的代碼,我們可能需要翻一下這篇文檔,或者查閱SD卡主機(jī)控制器廠商提供給我們的文檔(一般都是各大cpu芯片廠商提供給我們開發(fā)者文檔)。

本文的講解的是卡協(xié)議,接下來(lái),會(huì)有一些的英文夾雜在中文里面,因?yàn)橛行┟~,還是原汁原味的好,我翻譯出來(lái),沒了那種韻味,水平有限,望大家諒解。

System Features

本大章節(jié)講解SD的一些基本特征,包括SD卡的物理規(guī)格、容量、速度等方面。

Form-factor

目前市面上按物理規(guī)格來(lái)看,常見的SD卡有三種:

  • 標(biāo)準(zhǔn)的SD卡,這種卡比較大,在有些相機(jī)或者PC電腦上會(huì)使用;
  • 第二種是miniSD,這種卡我沒怎么使用,不作詳述;
  • 最后一種是叫TF卡,也稱mirco SD,這種卡比較小,是我們最常接觸的,像我們的手機(jī)里面使用的就是這種卡。很多人基本上都管我們手機(jī)使用的那種卡叫SD卡,這樣的叫法實(shí)際上不夠準(zhǔn)確,更準(zhǔn)確應(yīng)該是叫TF卡,但是不管怎樣,都沒人會(huì)去計(jì)較,能理解就行。

本文中,如果我說SD卡,都是泛指這三類SD卡,除非特意說明。并且如果特指,我會(huì)使用標(biāo)準(zhǔn)SD卡或者TF卡等名稱代替。

Capacity of Memory

SD卡按容量(Capacity)分類,可以分為標(biāo)準(zhǔn)容量卡、高容量卡,擴(kuò)展容量卡,詳細(xì)如下:

  1. Standard Capacity SD Memory Card (SDSC): 這種卡容量小于等于2GB
  2. High Capacity SD Memory Card (SDHC): 這種卡容量大于2GB,小于等于32GB
  3. Extended Capacity SD Memory Card (SDXC):這種卡容量大于32GB, 小于等于2TB

如果你買了一張16G或者32G的SD卡,你會(huì)發(fā)現(xiàn)SD卡上面印有"HC"字樣,代表該卡是SDHC卡,同理,64G的SD卡上面印著"XC",表示SDXC卡。

Voltage range

SD卡按供電范圍劃分,分兩種:

  1. High Voltage SD Memory Card: 操作的電壓范圍在2.7-3.6V
  2. UHS-II SD Memory Card: 操作的電壓范圍VDD1: 2.7-3.6V, VDD2: 1.70-1.95V

UHS-II類型的卡參考協(xié)議文檔: SD Specifications Part 1 UHS-II Simplified Addendum

Bus Speed Mode (using 4 parallel data lines)

SD卡按總線速度模式來(lái)分,有下面幾種:

  1. Default Speed mode: 3.3V供電模式,頻率上限25MHz,速度上限 12.5MB/sec
  2. High Speed mode: 3.3V供電模式,頻率上限50MHz,速度上限 25MB/sec
  3. SDR12: UHS-I卡, 1.8V供電模式,頻率上限25MHz,速度上限 12.5MB/sec
  4. SDR25: UHS-I卡, 1.8V供電模式,頻率上限50MHz,速度上限 25MB/sec
  5. SDR50: UHS-I卡, 1.8V供電模式,頻率上限100MHz,速度上限 50MB/sec
  6. SDR104: UHS-I卡, 1.8V供電模式,頻率上限208MHz,速度上限 104MB/sec
  7. DDR50: UHS-I卡, 1.8V供電模式,頻率上限50MHz,性能上限 50MB/sec
  8. UHS156: UHS-II RCLK Frequency Range 26MHz - 52MHz, up to 1.56Gbps per lane.

SDR(Single Date Rate), 一個(gè)周期只能采集一次數(shù)據(jù),即一個(gè)bit,由于SD卡是4條數(shù)據(jù)線并行傳輸,所以一個(gè)周期能傳輸4bit,如果頻率是50MHz(即1秒傳輸次數(shù)為50 000 000),那么1秒能傳輸?shù)臄?shù)據(jù)量為25MB(這里1MB為1 000 000 Byte)。所以這就是為什么各種SDR模式里面,頻率上限是速度上限的兩倍。而對(duì)于DDR(Double Data Rate),在時(shí)鐘上升沿和下降沿都可以采集數(shù)據(jù),也就是單一周期內(nèi)可讀取或?qū)懭?次,因此4條并行數(shù)據(jù)線在一個(gè)周期內(nèi)能傳輸8bit。

Speed Class

SD卡按照讀寫性能劃分,有5種規(guī)格,每種規(guī)格后面的數(shù)字象征最小的讀寫速度:

  • Class 0 - 這種卡沒有性能要求
  • Class 2 - 要求在 Default Speed mode 下,性能至少要達(dá)到(大于等于) 2MB/sec
  • Class 4 - 要求在 Default Speed mode 下,性能至少要達(dá)到 4MB/sec
  • Class 6 - 要求在 Default Speed mode 下,性能至少要達(dá)到 6MB/sec
  • Class 10 - 要求在 High Speed mode 下,性能至少要達(dá)到 10MB/sec

廠商賣的SD卡上面基本上都會(huì)印著一個(gè)用圓圈包圍起來(lái)的數(shù)字10,表示該卡是Class 10 類型的卡。

Bus Protocol

在SD Bus上,有三種transaction:

  • Command: 一個(gè)命令代表著將開始一個(gè)操作。命令通過CMD線傳輸,方向從host到card。
  • Response: 響應(yīng)是card對(duì)前一次host發(fā)送的命令的執(zhí)行情況的反饋。也是通過CMD線傳輸,方向從card到host。
  • Data: 數(shù)據(jù)是通過4條data線傳輸?shù)?,方向可以從card到host,也可以從host到card。

不管Command,還是Response或者Data,都開始于一個(gè)start bit (bit值0),結(jié)束于一個(gè)end bit(bit值1)。

關(guān)于這塊的內(nèi)容不做過多解釋了,詳情自行閱讀"Physical Layer Simplified Specification Version 4.10"文檔 "3.6 Bus Protocl" 章節(jié)的內(nèi)容。

Registers

下圖是SD卡的體系架構(gòu),可以看到內(nèi)部包含了一系列的寄存器:

<div style="text-align:center" markdown="1">


SD Memory Card Architecture

</div>

各個(gè)寄存器的詳細(xì)信息如下:

SD Memory Card Registers

OCR register

OCR寄存器保存著SD卡的工作電壓范圍。如果OCR寄存器的某位為1,表示卡支持該位對(duì)應(yīng)的電壓。最后一位表示卡上電后的狀態(tài)(是否處于”忙狀態(tài)”),如果該位為0,表示忙,如果為1,表示處于空閑狀態(tài)。

OCR Register Definition

CID register

CID是一個(gè)128 bits的寄存器,該寄存器包含一個(gè)卡的標(biāo)識(shí)信息。

The CID Fields

CSD Register

卡的描述數(shù)據(jù)寄存器(CSD)包含了訪問該卡數(shù)據(jù)時(shí)的必要配置信息,比如the data format, error correction type, maximum data access time, device size 等等。

The CSD Register Fields (CSD Version 2.0)

RCA register

卡的相對(duì)地址,該16位卡地址寄存器保存了卡在識(shí)別過程中發(fā)布的地址。該地址用于在主機(jī)識(shí)別卡后,利用該地址與卡進(jìn)行通信。該寄存器只有在SD模式下才有效。

SCR register

SD配置寄存器提供SD卡的特殊特性信息,其大小為64位。該寄存器由廠商編程,主機(jī)不能對(duì)它進(jìn)行編程。

The SCR Fields

UHS

UHS(Ultra High Speed)是與SDXC同時(shí)推出的SD卡總線標(biāo)準(zhǔn)。此標(biāo)準(zhǔn)適用于SDHC和SDXC。

UHS-I最高傳輸速度(理論值)為104MB/s。英文字母I代表該設(shè)備(SD卡或讀卡器)支持UHS-I接口。英文字母U,包含數(shù)目字1,代表該設(shè)備讀寫速度達(dá)U1。

UHS-II最高傳輸速度達(dá)312MB/s,是UHS-I的三倍。

設(shè)備(如智能手機(jī))必須支持UHS,才能保證達(dá)到U1或U3最低寫入速度。

下面介紹UHS-I初始化的命令序列流程。

Command Sequence to Use UHS-I
  • 上電后,卡會(huì)處于3.3V signaling模式下。第一個(gè)CMD0命令會(huì)選擇bus模式:SD模式或者SPI模式。只有在SD模式下,才能進(jìn)入1.8V signaling模式。一旦卡進(jìn)入1.8V signal模式,卡不能切換到SPI模式或者3.3V signal模式,除非重新上電。
  • 收到CMD0命令后,卡將進(jìn)入空閑狀態(tài)(Idle state),但是仍然工作在SDR12時(shí)序下。UHS-I只提供了SD模式,沒有提供SPI模式。
  • 由于更高的總線速度需要低水平的signaling,對(duì)SDR50、DDR50和SDR104模式,UHS-I提供的signaling為1.8V。host會(huì)給卡提供3.3V的電壓,并且提供1.8V signaling水平的電壓給SDCLK、CMD和DAT[3:0]線,這幾個(gè)都是從3.3V的電源線轉(zhuǎn)換過來(lái)的。為了避免主機(jī)與卡之間的電壓不匹配,signaling水平在初始化時(shí)的電壓轉(zhuǎn)換序列中就已經(jīng)被改變了。主機(jī)和卡通過ACMD41命令來(lái)確認(rèn)雙方是否支持1.8V signaling模式。如果主機(jī)和卡都支持1.8V signaling模式,這就意味著UHS-I卡可用。
  • UHS-I只能使用4-bit的bus模式,CMD42是個(gè)例外。如果卡被鎖住了,就需要通過發(fā)送CMD42命令(1-bit模式)解鎖,然后發(fā)送ACMD6命令將bus模式切換到4-bit。
  • 在卡解鎖的情況下,CMD19命令執(zhí)行在1.8V signaling的傳輸狀態(tài)。其他情況,CMD19都會(huì)被當(dāng)做非法命令。

SD Memory Card Functional Description

對(duì)SD卡與主機(jī)(host)來(lái)說,有兩種操作模式:

  • Card identification mode: 對(duì)卡reset重置后,主機(jī)進(jìn)入卡識(shí)別模式,對(duì)卡來(lái)說,在reset后,除非收到CMD3命令,否則卡一直處于該模式下。
  • Data transfer mode: 當(dāng)卡第一次發(fā)布它的RCA后,該卡將處于數(shù)據(jù)傳輸模式。而對(duì)主機(jī)來(lái)說,在它識(shí)別了bus線上的所有卡后,進(jìn)入該模式。

Card identification mode

Operating Condition Validation

SD卡識(shí)別模式流程圖如下:

SD Memory Card State Diagram (card identification mode)
  1. 在主機(jī)與卡通信之前,主機(jī)不清楚卡支持的電壓范圍,并且卡也不知道是否支持主機(jī)提供的供電電壓。主機(jī)會(huì)以默認(rèn)電壓發(fā)送一個(gè)reset指令(CMD0),并且主機(jī)默認(rèn)卡能支持該命令。然后,為了確認(rèn)電壓,主機(jī)接下來(lái)會(huì)發(fā)送一個(gè)CMD8命令。

  2. 為了驗(yàn)證SD卡接口的操作條件,主機(jī)通過發(fā)送SEND_IF_COND (CMD8)命令,去獲取SD卡支持的工作電壓范圍。SD卡通過檢測(cè)CMD8的參數(shù)部分來(lái)檢查主機(jī)使用的工作電壓,主機(jī)通過分析卡CMD8的response參數(shù)來(lái)確認(rèn)SD卡是否可以在所給電壓下工作,如果SD卡可以在指定電壓下工作,則它的response里面會(huì)包含cmd8參數(shù)里面提供的電壓 。如果不支持所給電壓,則SD卡不會(huì)給出任何響應(yīng)信息,并繼續(xù)處于IDLE狀態(tài)。如果要初始化SDHC和SDXC,在第一次發(fā)送ACMD41命令前,必須先發(fā)送CMD8。

  3. SD_SEND_OP_COND (ACMD41)命令來(lái)識(shí)別或者拒絕不匹配host主機(jī)供電電壓范圍的卡。如果SD卡在主機(jī)規(guī)定的電壓范圍內(nèi)不能實(shí)現(xiàn)數(shù)據(jù)傳輸,卡將放棄下一步的總線操作而進(jìn)入不活動(dòng)狀態(tài)(Inactive State)。

  4. 主機(jī)發(fā)送ACMD41命令時(shí),可以通過將該命令所帶的OCR參數(shù)設(shè)置為0,用來(lái)查詢卡支持的工作電壓范圍。當(dāng)ACMD41被用于查詢時(shí),卡將忽略掉ACMD41里面的HCS參數(shù)。主機(jī)在查詢到卡的工作電壓后,也許會(huì)將該電壓作為接下來(lái)發(fā)送的ACMD41命令的參數(shù)。

  5. 在整個(gè)初始化過程中,主機(jī)不允許改變正在操作的電壓范圍。

Card Initialization and Identification Process

Card Initialization and Identification Flow (SD mode)
  1. 當(dāng)總線被激合后,主機(jī)就開始處理卡的初始化和識(shí)別。在主機(jī)發(fā)送SD_SEND_OP_COND(ACMD41)命令開始處理SD卡初始化時(shí),主機(jī)會(huì)在ACMD41的參數(shù)中設(shè)置它的操作條件和設(shè)置OCR中的HCS位。HCS位被設(shè)置為1表示主機(jī)支持SDHC或者SDXC。HCS被設(shè)置為0表示主機(jī)不支持SDHC和SDXC。

  2. 卡利用OCR里面的busy位來(lái)通知主機(jī)ACMD41的初始化已經(jīng)完成。如果busy位為0,表示卡還在初始化,如果busy位為1,說明初始化已經(jīng)完成。主機(jī)會(huì)在1s的時(shí)間內(nèi),重復(fù)不斷地發(fā)送ACMD41命令,直到busy位被置1為止??ㄖ挥性诘谝淮问盏皆O(shè)置電壓的ACMD41命令時(shí),才會(huì)去檢查操作條件和OCR中的HCS位。并且在重復(fù)發(fā)送ACMD41命令的這段時(shí)間里,主機(jī)不應(yīng)該發(fā)送任何命令,除了CMD0。

  3. 如果卡能正確響應(yīng)CMD8,之后,卡對(duì)ACMD41命令的響應(yīng)會(huì)包含一個(gè)CCS字段,CCS在卡返回ready時(shí)(busy位置1)有效。CCS=0表示卡是SDSC,CCS=1表示卡是SDHC或者SDXC。

  4. 在ACMD41之后,主機(jī)會(huì)發(fā)送 ALL_SEND_CID (CMD2),獲取卡的CID。在卡發(fā)送它的CID之后,卡進(jìn)入識(shí)別狀態(tài)(Identification State)。

  5. 接著,主機(jī)發(fā)送CMD3 (SEND_RELATIVE_ADDR),請(qǐng)求卡發(fā)布卡的RCA。RCA是一個(gè)比CID短的,并且將來(lái)在數(shù)據(jù)傳輸模式中使用的地址。

Data Transfer Mode

因?yàn)橐恍┛ㄔ谧R(shí)別模式(Identification Mode)下,對(duì)操作頻率有限制,所以在識(shí)別模式結(jié)束前,主機(jī)的頻率需要一直保持在 fOD。在數(shù)據(jù)傳輸模式(Data Transfer Mode),主機(jī)頻率在fpp范圍內(nèi)是可執(zhí)行的。

主機(jī)必須發(fā)送SEND_CSD(CMD9)來(lái)獲得卡規(guī)格數(shù)據(jù)寄存器(CSD)內(nèi)容,獲取像塊大小、卡容量這類信息。

SET_DSR(CMD4)廣播命令配置所有識(shí)別到的卡的驅(qū)動(dòng)階段。它對(duì)DSR寄存器進(jìn)行編程以適應(yīng)應(yīng)用的總線布局(長(zhǎng)度)、總線上卡的數(shù)目和數(shù)據(jù)傳輸頻率。clock rate也是在這個(gè)時(shí)候從fOD切到fpp。對(duì)卡和主機(jī)來(lái)說,SET_DSR(CMD4)命令是個(gè)可選。

CMD7用于選擇卡,并且將卡帶入傳輸狀態(tài)(Transfer State)。在同一個(gè)時(shí)間內(nèi),只有一張卡能進(jìn)入傳輸狀態(tài)。當(dāng)發(fā)送的CMD7的RCA地址參數(shù)為"0x0000",所有卡將跳回到準(zhǔn)備狀態(tài)(Stand-by State )。

SD卡數(shù)據(jù)傳輸模式的流程圖如下:

SD Memory Card State Diagram (data transfer mode)

對(duì)已經(jīng)擁有RCA的卡來(lái)說,對(duì)它發(fā)送identification commands(比如ACMD41、CMD2),它將不會(huì)有任何回應(yīng)。在數(shù)據(jù)傳輸模式下,主機(jī)與被選中的卡(使用定向命令)之間的數(shù)據(jù)傳輸都是點(diǎn)對(duì)點(diǎn)的。通過cmd線,所有定向命令(addressed commands)都會(huì)收到一個(gè)用于確認(rèn)的response。

下面是數(shù)據(jù)傳輸模式下關(guān)于數(shù)據(jù)傳輸?shù)囊恍┛偨Y(jié):

  • 在任何時(shí)候,所有的讀命令集在執(zhí)行過程中都可以被stop command (CMD12)打斷。cmd12命令將會(huì)使數(shù)據(jù)傳輸終止,并且使卡退回到傳輸狀態(tài)(Transfer State)。讀命令集包括:block read(CMD17), multiple block read(CMD18), send write protect(CMD30), send SCR(ACMD51) 和 general command in read mode (CMD56)。
  • 在任何時(shí)候,所有的寫命令集在執(zhí)行過程中都可以被stop command (CMD12)打斷。寫命令集包括: block write(CMD24 and CMD25), program CSD(CMD27), lock/unlock command(CMD42)和general command in write mode(CMD56)。
  • 一旦數(shù)據(jù)傳輸完成,卡就會(huì)退出數(shù)據(jù)寫狀態(tài),并且進(jìn)入正在編程狀態(tài)(Programming State)(傳輸成功),或者進(jìn)入傳輸狀態(tài)(傳輸失?。?。
  • 如果一個(gè)塊寫操作被打斷,但是最后一個(gè)block的塊長(zhǎng)度和CRC有效的話,這塊數(shù)據(jù)也將會(huì)被編程到卡里。
  • 卡也許會(huì)對(duì)塊寫操作提供緩存,這意味著,在一個(gè)block還在被編程的情況下,下一個(gè)block可以被發(fā)送這個(gè)卡里面。如果所有的寫緩存都已經(jīng)滿了的話,只要卡還在正在編程狀態(tài),DAT0線就會(huì)一直保持在拉低狀態(tài)。
  • 對(duì)寫CSD、寫保護(hù)和擦除操作來(lái)說,卡不會(huì)提供緩存。這意味著,在卡正忙于處理這其中任何一個(gè)命令時(shí),卡不會(huì)接收任何發(fā)送到卡的數(shù)據(jù)。只要卡還在忙,DAT0線就會(huì)拉低,并且處于正在編程狀態(tài)(Programming State)。
  • 當(dāng)卡正在編程時(shí),不允許任何一個(gè)參數(shù)設(shè)置命令集(Parameter set commands)。參數(shù)設(shè)置命令集包括: set block length(CMD16), erase block start(CMD32)和erase block end(CMD33)。
  • 當(dāng)卡正在編程時(shí),不允許任何一個(gè)讀命令集。
  • 當(dāng)將其他的卡從準(zhǔn)備狀態(tài)(Stand-by)切換到傳輸狀態(tài)(使用CMD7),不會(huì)中斷當(dāng)前卡的擦除或者編程操作。當(dāng)前卡將會(huì)切換到斷開狀態(tài)(Disconnect State),并且釋放數(shù)據(jù)線。
  • 當(dāng)卡正在編程或者待編程時(shí),對(duì)其重置(發(fā)送CMD0或者CMD15),將會(huì)導(dǎo)致操作終止,并且可能會(huì)導(dǎo)致卡內(nèi)的數(shù)據(jù)內(nèi)容被破壞。因此主機(jī)有責(zé)任去禁止這樣的操作。

至此,本文關(guān)于SD卡協(xié)議的內(nèi)容就介紹到這里。通過本文,可以對(duì)SD卡有個(gè)大概的了解,尤其是關(guān)于SD卡初始化這段內(nèi)容。就SD卡協(xié)議這方面來(lái)說,了解一些基本的東西就行。在我們今后在遇到SD問題時(shí)需要時(shí),可以翻出來(lái)看一下。水平有限,有些地方可能會(huì)出現(xiàn)錯(cuò)誤,望各位能指出來(lái),希望能和各位共同探討技術(shù)方面的內(nèi)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容