0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

我們看看UFS中命令或請(qǐng)求是怎么執(zhí)行的

SSDFans ? 來源:未知 ? 作者:李倩 ? 2018-06-08 15:29 ? 次閱讀

UFS中流淌的數(shù)據(jù)包叫做UPIU(UFS Protocol Information Unit,UFS協(xié)議信息單元),它是固定格式的數(shù)據(jù)結(jié)構(gòu),用以傳輸應(yīng)用層發(fā)來的命令或者請(qǐng)求,以及跟它們相關(guān)的數(shù)據(jù)或者狀態(tài)信息。它就是SATA中的FIS,PCIe中的TLP。我們看看UFS中命令或請(qǐng)求是怎么執(zhí)行的。

UFS采用“客戶-服務(wù)器”或者說主從的命令架構(gòu),UFS主機(jī)(Client,命令發(fā)起者,Initiator,他們都是一個(gè)意思)發(fā)送命令或者請(qǐng)求(Request)給UFS設(shè)備(服務(wù)器,Target),然后UFS設(shè)備執(zhí)行命令并返回命令狀態(tài)(Response)。

一個(gè)命令或者請(qǐng)求的執(zhí)行包含下面幾個(gè)階段:

命令階段:主機(jī)發(fā)起命令或請(qǐng)求給設(shè)備,這是“因”;

數(shù)據(jù)階段:傳輸跟命令相關(guān)的數(shù)據(jù),比如讀寫命令,都涉及到數(shù)據(jù)的傳輸;有些命令不涉及數(shù)據(jù)的傳輸,所以這個(gè)階段并不是總是存在的,跟具體命令和請(qǐng)求相關(guān)。

狀態(tài)階段:設(shè)備執(zhí)行完命令,必須給主機(jī)返回命令執(zhí)行狀態(tài)信息。這個(gè)是“果”,必不可少的。在PCIe中,有Posted和Non-posted的TLP。對(duì)前者,命令執(zhí)行者無需返回命令執(zhí)行狀態(tài)給命令發(fā)起者,對(duì)后者,命令執(zhí)行者必須返回狀態(tài)給命令發(fā)起者。對(duì)UFS來說,它的命令總是non-posted,即設(shè)備必須返回命令狀態(tài)給主機(jī)。

在命令執(zhí)行過程中,無論是處在哪個(gè)階段,UFS主機(jī)和設(shè)備間都是通過UPIU進(jìn)行信息的交互。

1. UFS主機(jī)通過命令或者請(qǐng)求UPIU發(fā)命令請(qǐng)求給設(shè)備;

2. UFS主機(jī)或者設(shè)備通過UPIU傳輸數(shù)據(jù);

3. UFS設(shè)備通過UPIU返回命令狀態(tài)信息給主機(jī)。

下面我們看看UFS當(dāng)中都有哪些UPIU。

命令或者請(qǐng)求UPIU

前一章看到,應(yīng)用層包括UFS命令、設(shè)備管理器和任務(wù)管理器三個(gè)模塊,傳輸層根據(jù)不同模塊發(fā)來的命令或者請(qǐng)求,分別產(chǎn)生不同類型的UPIU。

UFS命令模塊發(fā)送簡(jiǎn)化版本的SCSI命令,當(dāng)傳輸層收到命令請(qǐng)求后,它會(huì)生成:COMMAND UPIU,把命令封裝起來。

應(yīng)用層通過任務(wù)管理器來管理任務(wù)隊(duì)列,比如終止(Abort)和查詢命令隊(duì)列中的命令。當(dāng)傳輸層收到來自任務(wù)管理器中的請(qǐng)求后,它會(huì)生成:TASK MANAGEMENT REQUEST UPIU,把請(qǐng)求封裝起來。

UFS通過設(shè)備管理器來管理UFS設(shè)備,比如設(shè)置和查詢UFS設(shè)備的配置(Configuration)。當(dāng)傳輸層收到來自設(shè)備管理器發(fā)來的請(qǐng)求后,它會(huì)生成:QUERY REQUEST UPIU,把請(qǐng)求封裝起來。

數(shù)據(jù)傳輸相關(guān)UPIU

當(dāng)主機(jī)發(fā)送了類似讀命令給設(shè)備之后,設(shè)備需要返回?cái)?shù)據(jù)給主機(jī),設(shè)備通過DATA IN UPIU向主機(jī)傳輸數(shù)據(jù)。

當(dāng)主機(jī)發(fā)送了類似寫命令給設(shè)備之后,主機(jī)需要往設(shè)備寫數(shù)據(jù),主機(jī)通過DATA OUT UPIU向設(shè)備傳輸數(shù)據(jù)。

UFS的主機(jī)是個(gè)暖男,它在向設(shè)備寫數(shù)據(jù)的時(shí)候,會(huì)考慮到設(shè)備這個(gè)時(shí)候能不能接收數(shù)據(jù)(因?yàn)樵O(shè)備可能這個(gè)時(shí)候沒有足夠的空間接收主機(jī)數(shù)據(jù)),它在向設(shè)備發(fā)了寫命令之后,不會(huì)立刻把數(shù)據(jù)傳輸給設(shè)備,而是在那里等設(shè)備的通知。當(dāng)設(shè)備準(zhǔn)備好接收數(shù)據(jù),以及接收多少數(shù)據(jù),設(shè)備通過READY TO TRANSFER UPIU (RTT)告知主機(jī)。當(dāng)主機(jī)接收到該RTT后,才開始按照RTT的信息傳輸數(shù)據(jù)。至于每次傳輸數(shù)據(jù)的多少,RTT中包含這信息,主機(jī)根據(jù)RTT進(jìn)行傳輸。

所以,主機(jī)只有在收到設(shè)備的RTT,才能發(fā)DATA OUT UPIU!

注意,讀命令無需這種機(jī)制。因?yàn)樵O(shè)備從閃存中獲得數(shù)據(jù)后,是設(shè)備控制數(shù)據(jù)的傳輸。對(duì)主機(jī)來說,它在發(fā)讀命令之前,已經(jīng)準(zhǔn)備好足夠的空間用以接收數(shù)據(jù),所以不存在主機(jī)沒有空間接收數(shù)據(jù)的情況。

狀態(tài)UPIU

前面看到,主機(jī)有三種請(qǐng)求:SCSI命令,任務(wù)管理器發(fā)出的Task Management Request,以及設(shè)備管理器發(fā)出的Query request。針對(duì)不同的命令或者請(qǐng)求,設(shè)備在執(zhí)行完相應(yīng)的任務(wù)后,分別返回對(duì)應(yīng)的狀態(tài)UPIU給主機(jī)。

其它UPIU

除了以上常規(guī)的UPIU,還有其它一些UPIU作為他用。

設(shè)備上電后,主機(jī)檢測(cè)是否與之連接,會(huì)發(fā)NOP OUT UPIU給設(shè)備。我們平時(shí)想看看跟某個(gè)電腦或者網(wǎng)站能否連接上,會(huì)發(fā)一個(gè)ping命令。NOP OUT UPIU跟ping命令作用類似。

當(dāng)設(shè)備收到NOP OUT UPIU后,會(huì)返回NOP IN UPIU。主機(jī)收到該UPIU后,確認(rèn)與設(shè)備連接,然后可以進(jìn)行后續(xù)操作。

最后一個(gè)UPIU就是REJECT UPIU。當(dāng)設(shè)備收到一個(gè)無效的UPIU時(shí),它會(huì)發(fā)REJECT UPIU拒絕無效的UPIU。

UPIU匯總

偷個(gè)懶,我就直接把UFS spec這張表貼這里。數(shù)了數(shù),一共12個(gè)UPIU。經(jīng)過我之前的解釋,讀者現(xiàn)在應(yīng)該清楚每個(gè)UPIU的作用了。

讀寫命令中UPIU交互例子

前面我們都是單個(gè)來看UPIU,現(xiàn)在我們以讀寫命令為例,看看他們是如何組合完成命令處理的。

首先是一個(gè)“主機(jī)往設(shè)備讀取96KB數(shù)據(jù)”的例子。

首先,主機(jī)發(fā)送讀96KB數(shù)據(jù)的命令給設(shè)備,然后設(shè)備執(zhí)行命令,分了三批把數(shù)據(jù)返回給主機(jī),最后返回命令執(zhí)行狀態(tài)給主機(jī)。

然后是一個(gè)“主機(jī)往設(shè)備寫64KB數(shù)據(jù)”的例子。

主機(jī)發(fā)送寫64KB數(shù)據(jù)的命令給設(shè)備,然后在那里等設(shè)備響應(yīng)。很快,設(shè)備說,你可以傳24KB數(shù)據(jù)下來了,于是主機(jī)寫24KB數(shù)據(jù)給設(shè)備;接著,設(shè)備又來通知說可以繼續(xù)傳32KB數(shù)據(jù),主機(jī)照做。最后,設(shè)備通知說可以把最后8KB數(shù)據(jù)也傳過來,主機(jī)于是寫最后8KB數(shù)據(jù)。最后,主機(jī)收到設(shè)備命令執(zhí)行完成的響應(yīng)。

我們看到,主機(jī)必須等收到RTT后才能啟動(dòng)數(shù)據(jù)傳輸!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 管理器
    +關(guān)注

    關(guān)注

    0

    文章

    246

    瀏覽量

    18546
  • 數(shù)據(jù)包
    +關(guān)注

    關(guān)注

    0

    文章

    263

    瀏覽量

    24412
  • UFS
    UFS
    +關(guān)注

    關(guān)注

    6

    文章

    104

    瀏覽量

    24077

原文標(biāo)題:蛋蛋讀UFS之三:UFS數(shù)據(jù)包UPIU

文章出處:【微信號(hào):SSDFans,微信公眾號(hào):SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linuxxargs命令的使用方法

    xargs命令從標(biāo)準(zhǔn)輸入另一個(gè)命令的輸出讀取文本行,并將其轉(zhuǎn)換為命令執(zhí)行。
    發(fā)表于 11-25 15:14 ?7095次閱讀
    Linux<b class='flag-5'>中</b>xargs<b class='flag-5'>命令</b>的使用方法

    請(qǐng)問Z-Stack Home中發(fā)送端的命令請(qǐng)求是如何對(duì)應(yīng)接收端的回調(diào)函數(shù)的?

    本帖最后由 一只耳朵怪 于 2018-5-24 14:26 編輯 我在學(xué)習(xí)Z-Stack Home1.2.1協(xié)議棧時(shí),有如下兩個(gè)問題,望各位指教,謝謝!1. 不太明白發(fā)送端的命令請(qǐng)求是
    發(fā)表于 05-22 07:59

    UFS Card是什么?

    SD UHS-II Card在高階手機(jī)的應(yīng)用, CPU 大都已支援 UFS Interface, 可以直接接 eUFS 顆粒. 另外 UFS Card的介面可以透過 USB 的介面實(shí)現(xiàn), 隨然受限於
    發(fā)表于 09-17 09:05

    掃描請(qǐng)求是否在中央(TX)外圍(RX)模塊上產(chǎn)生任何事件?

    掃描請(qǐng)求是否在中央(TX)外圍(RX)模塊上產(chǎn)生任何事件?有人能告訴我更多關(guān)于掃描請(qǐng)求格式的信息嗎?除了“它存在”以外,我一直在尋找更多的信息。
    發(fā)表于 09-23 09:19

    UFS電源管理的相關(guān)資料推薦

    轉(zhuǎn)載:蛋蛋讀UFS之十:UFS電源管理 FS是手機(jī)存儲(chǔ)設(shè)備,因此對(duì)功耗要求很高。我們看看UFS的電源管理。三個(gè)供電電壓,VCC,VCCQ和
    發(fā)表于 11-12 06:16

    手機(jī)研發(fā)必須了解的UFS相關(guān)知識(shí)

    。  再形象一點(diǎn),我們以搬運(yùn)貨物的例子來比較一下eMMC和UFS命令執(zhí)行方式:  現(xiàn)在的手機(jī),應(yīng)用非常豐富,你要一邊斗地主,一邊聽歌,還要聊微信,多線程操作。由于全雙工和
    發(fā)表于 03-29 11:08

    USB主機(jī)如何識(shí)別USB設(shè)備及請(qǐng)求命令

    標(biāo)準(zhǔn)的USB設(shè)備請(qǐng)求命令是用在控制傳輸的“初始設(shè)置步驟”里的數(shù)據(jù)包階段(即DATA0,由八個(gè)字節(jié)構(gòu)成),請(qǐng)看回問答四的內(nèi)容。標(biāo)準(zhǔn)USB設(shè)備請(qǐng)求命令
    發(fā)表于 07-16 10:36 ?7756次閱讀

    什么是UFS?為什么說UFS是手機(jī)存儲(chǔ)的未來?

    UFS支持命令隊(duì)列,就是主機(jī)一下可以發(fā)很多個(gè)命令下去,然后UFS設(shè)備支持并行和亂序執(zhí)行,誰先完成誰先返回狀態(tài)。這種
    的頭像 發(fā)表于 06-04 15:38 ?6.4w次閱讀

    看看UFS的電源管理

    除此之外,M-PHY還有一種更加省電的狀態(tài),那就是HIBERN8 (Hibernate,休眠狀態(tài)),這種狀態(tài)下,M-PHY極為省電。UFS主機(jī)和UFS設(shè)備不可能一直交互數(shù)據(jù),總有閑下來的時(shí)候。當(dāng)
    的頭像 發(fā)表于 07-05 16:53 ?9374次閱讀
    來<b class='flag-5'>看看</b><b class='flag-5'>UFS</b>的電源管理

    UFS系列十:UFS電源管理

    轉(zhuǎn)載:蛋蛋讀UFS之十:UFS電源管理 FS是手機(jī)存儲(chǔ)設(shè)備,因此對(duì)功耗要求很高。我們看看UFS的電源管理。三個(gè)供電電壓,VCC,VCCQ和
    發(fā)表于 11-07 09:06 ?22次下載
    <b class='flag-5'>UFS</b>系列十:<b class='flag-5'>UFS</b>電源管理

    LabVIEW執(zhí)行系統(tǒng)命令VI介紹

    LabVIEW自帶一個(gè)執(zhí)行系統(tǒng)命令VI(System Exec.vi),位于函數(shù)選板的“互連接口”>>“庫與可執(zhí)行程序”>>“執(zhí)行系統(tǒng)命令
    的頭像 發(fā)表于 04-25 11:47 ?9470次閱讀
    LabVIEW<b class='flag-5'>中</b><b class='flag-5'>執(zhí)行</b>系統(tǒng)<b class='flag-5'>命令</b>VI介紹

    為什么shell腳本執(zhí)行命令要加exec?這個(gè)exec有什么作用呢?

    正常情況下,如果我們想要在shell腳本執(zhí)行一個(gè)命令,我們只用將該命令原樣寫到這個(gè)shell腳
    的頭像 發(fā)表于 08-21 09:10 ?3228次閱讀
    為什么shell腳本<b class='flag-5'>中</b><b class='flag-5'>執(zhí)行命令</b>要加exec?這個(gè)exec有什么作用呢?

    linuxsource命令的用法

    配置文件執(zhí)行腳本。 source命令的語法為: source filename . filename 其中,filename是腳本文件的路徑。 當(dāng)source
    的頭像 發(fā)表于 11-08 14:35 ?2360次閱讀

    uboot命令執(zhí)行過程是什么

    U-boot是通過執(zhí)行u-boot提供的命令來加載Linux內(nèi)核的,其中 命令bootm的功能 即為從memory啟動(dòng)Linux內(nèi)核映像文件。 在講解bootm加載內(nèi)核之前,先來看看u
    的頭像 發(fā)表于 12-04 17:31 ?830次閱讀

    bootm命令執(zhí)行流程

    Bootm命令用來從memory啟動(dòng)內(nèi)核,bootm命令執(zhí)行流程如下圖所示。 在串口終端輸入bootm命令后,執(zhí)行do_bootm函數(shù)來完
    的頭像 發(fā)表于 12-04 17:33 ?1188次閱讀
    bootm<b class='flag-5'>命令</b>的<b class='flag-5'>執(zhí)行</b>流程