本公開總體涉及儲(chǔ)存設(shè)備。
背景技術(shù):
總線是在儲(chǔ)存設(shè)備之間傳輸數(shù)據(jù)的通信系統(tǒng)。總線可以是在多個(gè)線路上并行地?cái)y帶數(shù)據(jù)字的并行總線或者是以位串行形式攜帶數(shù)據(jù)的串行總線。在總線上的多個(gè)儲(chǔ)存設(shè)備同時(shí)傳送數(shù)據(jù)的情況下可能發(fā)生沖突,這可能導(dǎo)致總線上的數(shù)據(jù)的損壞。試圖避免這樣的沖突,儲(chǔ)存設(shè)備可以配置有支持各種仲裁方案的專用硬件。
技術(shù)實(shí)現(xiàn)要素:
在一個(gè)示例中,一種方法包括由儲(chǔ)存設(shè)備的控制器在數(shù)據(jù)線上傳送第一位。該方法還包括響應(yīng)于在所述數(shù)據(jù)線上傳送所述第一位,由控制器確定所述數(shù)據(jù)線的線路電平。該方法還包括響應(yīng)于確定所述數(shù)據(jù)線的線路電平,由控制器確定所述數(shù)據(jù)線的線路電平是否對應(yīng)于所述第一位,以及響應(yīng)于確定所述數(shù)據(jù)線的線路電平不對應(yīng)于所述第一位,由所述控制器確定在所述數(shù)據(jù)線上發(fā)生沖突。
在另一示例中,一種儲(chǔ)存設(shè)備包括邏輯上被劃分成多個(gè)塊的多個(gè)存儲(chǔ)設(shè)備以及控制器。所述控制器被配置為在數(shù)據(jù)線上傳送第一位,并且響應(yīng)于在所述數(shù)據(jù)線上傳送所述第一位,確定所述數(shù)據(jù)線的線路電平。所述控制器還被配置為響應(yīng)于確定所述數(shù)據(jù)線的線路電平,確定所述數(shù)據(jù)線的線路電平是否對應(yīng)于所述第一位,并且響應(yīng)于確定所述數(shù)據(jù)線的線路電平不對應(yīng)于所述第一位,確定在所述數(shù)據(jù)線上發(fā)生沖突。
在另一示例中,一種編碼有指令的非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述指令在被執(zhí)行時(shí)使儲(chǔ)存設(shè)備的一個(gè)或多個(gè)處理器在數(shù)據(jù)線上傳送第一位,并且響應(yīng)于在所述數(shù)據(jù)線上傳送所述第一位,確定所述數(shù)據(jù)線的線路電平。所述指令還將儲(chǔ)存設(shè)備的一個(gè)或多個(gè)處理器配置為響應(yīng)于確定所述數(shù)據(jù)線的線路電平,確定所述數(shù)據(jù)線的線路電平是否對應(yīng)于所述第一位,并且響應(yīng)于確定所述數(shù)據(jù)線的線路電平不對應(yīng)于所述第一位,確定在所述數(shù)據(jù)線上發(fā)生沖突。
在另一示例中,一種系統(tǒng)包括用于在數(shù)據(jù)線上傳送第一位的部件,用于響應(yīng)于在所述數(shù)據(jù)線上傳送所述第一位而確定所述數(shù)據(jù)線的線路電平的部件,用于響應(yīng)于確定所述數(shù)據(jù)線的線路電平而確定所述數(shù)據(jù)線的線路電平是否對應(yīng)于所述第一位的部件,以及用于響應(yīng)于確定所述數(shù)據(jù)線的線路電平不對應(yīng)于所述第一位而確定在所述數(shù)據(jù)線上發(fā)生沖突的部件。
附圖說明
圖1是圖示根據(jù)本公開的一個(gè)或多個(gè)技術(shù)的多個(gè)儲(chǔ)存設(shè)備可以與主機(jī)設(shè)備交互的示例儲(chǔ)存環(huán)境的概念和示意框圖。
圖2是圖示根據(jù)本公開的一個(gè)或多個(gè)技術(shù)的儲(chǔ)存設(shè)備可以與主機(jī)設(shè)備交互的示例儲(chǔ)存環(huán)境的概念和示意框圖。
圖3是圖示根據(jù)本發(fā)明的一個(gè)或多個(gè)技術(shù)的至少一個(gè)處理器可以實(shí)現(xiàn)沖突檢測的示例技術(shù)的概念圖。
圖4是圖示根據(jù)本公開的一個(gè)或多個(gè)技術(shù)的至少一個(gè)處理器可以實(shí)現(xiàn)沖突檢測的示例技術(shù)的流程圖。
具體實(shí)施方式
本公開的技術(shù)可以使得無專用硬件的設(shè)備能夠檢測共享總線上的沖突。例如,從設(shè)備可以向共享總線寫入并確定共享總線的線路電平,以確定該線路電平是否為期望線路電平。如果該線路電平不是期望線路電平,則從設(shè)備可以確定存在沖突并且中止總線上的進(jìn)一步通信,直到下個(gè)開始條件。更具體地,本公開的技術(shù)可以使得儲(chǔ)存設(shè)備的控制器能夠執(zhí)行代碼,該代碼使控制器讀取共享總線的系統(tǒng)總線數(shù)據(jù)線,確定系統(tǒng)總線數(shù)據(jù)線的當(dāng)前線路電平,將當(dāng)前線路電平與期望線路電平相比較,并且如果當(dāng)前線路電平與期望線路電平足夠不同,則確定發(fā)生沖突。以這種方式,無專用沖突檢測硬件的從設(shè)備可以被配置為檢測沖突,這可以使得多個(gè)設(shè)備能夠在單個(gè)共享總線上操作,同時(shí)保持?jǐn)?shù)據(jù)完整性。
圖1是圖示根據(jù)本公開的一個(gè)或多個(gè)技術(shù)的多個(gè)儲(chǔ)存設(shè)備可以與主機(jī)設(shè)備102交互的示例儲(chǔ)存環(huán)境10的概念和示意框圖。儲(chǔ)存環(huán)境10可以包括通過總線108連接到主儲(chǔ)存設(shè)備104和多個(gè)從儲(chǔ)存設(shè)備106a-106n(統(tǒng)稱為“從儲(chǔ)存設(shè)備106”)的主機(jī)設(shè)備102。在一些示例中,總線108可以支持主機(jī)設(shè)備102與主儲(chǔ)存設(shè)備104和多個(gè)從儲(chǔ)存設(shè)備106之間的通信。在一些示例中,從儲(chǔ)存設(shè)備106可以共享總線108上的公共地址。在一些示例中,總線108可以符合nvmemi規(guī)范,諸如2015年11月17日在nvmexpress管理接口修訂本1.0中描述的nvmemi規(guī)范,其全部內(nèi)容通過引用據(jù)此并入本文。
主儲(chǔ)存設(shè)備104可以被配置為控制從儲(chǔ)存設(shè)備106。例如,主儲(chǔ)存設(shè)備104可以經(jīng)由總線108向從儲(chǔ)存設(shè)備106傳送停止命令,其使從儲(chǔ)存設(shè)備106停止向總線108上傳送。在一些情況下,主儲(chǔ)存設(shè)備104可以經(jīng)由總線108向從儲(chǔ)存設(shè)備106傳送開始命令,其使一個(gè)或多個(gè)從儲(chǔ)存設(shè)備106開始向總線108上傳送。
主儲(chǔ)存設(shè)備104可以是適于儲(chǔ)存可以由主機(jī)設(shè)備102使用總線108訪問的數(shù)據(jù)的任何設(shè)備。在一些示例中,主儲(chǔ)存設(shè)備104可以包括非易失性存儲(chǔ)器陣列(例如,固態(tài)驅(qū)動(dòng)器(ssd))以儲(chǔ)存可以由主機(jī)設(shè)備102使用總線108訪問的數(shù)據(jù)。例如,主儲(chǔ)存設(shè)備104可以包括控制器、非易失性存儲(chǔ)器陣列、緩存以及接口。在一些示例中,主儲(chǔ)存設(shè)備104可以包括磁記錄(例如,硬盤驅(qū)動(dòng)器(hdd))以儲(chǔ)存可以由主機(jī)設(shè)備102使用總線108訪問的數(shù)據(jù)。例如,主儲(chǔ)存設(shè)備104可以包括控制器、疊瓦式磁記錄、緩存以及接口。
在一些示例中,主儲(chǔ)存設(shè)備104可以基本類似于從儲(chǔ)存設(shè)備106,除了主儲(chǔ)存設(shè)備104被當(dāng)作總線108上的主設(shè)備之外。例如,主儲(chǔ)存設(shè)備104可以生成能夠由從儲(chǔ)存設(shè)備106使用的時(shí)鐘信號。在一些情況下,主儲(chǔ)存設(shè)備104可以包括仲裁模塊。在一些示例中,主儲(chǔ)存設(shè)備104和從儲(chǔ)存設(shè)備106可以不同。例如,主儲(chǔ)存設(shè)備104可以省略仲裁模塊。在一些示例中,主儲(chǔ)存設(shè)備104可以符合系統(tǒng)管理(sm)總線(smbus),諸如2014年12月20日在系統(tǒng)管理接口論壇公司的“systemmanagementbus(smbus)specificationversion3.0”中描述的smbus,其全部內(nèi)容通過引用據(jù)此并入本文。例如,主儲(chǔ)存設(shè)備104可以被配置為與總線108上的其他主儲(chǔ)存設(shè)備一起執(zhí)行仲裁。
主機(jī)設(shè)備102可以利用主儲(chǔ)存設(shè)備104和從儲(chǔ)存設(shè)備106中包括的存儲(chǔ)設(shè)備來儲(chǔ)存和取回?cái)?shù)據(jù)。主機(jī)設(shè)備102可以包括任何計(jì)算設(shè)備,包括例如計(jì)算機(jī)服務(wù)器、網(wǎng)絡(luò)附屬儲(chǔ)存(nas)單元、臺(tái)式計(jì)算機(jī)、筆記本(例如,膝上型)計(jì)算機(jī)、平板計(jì)算機(jī)、機(jī)頂盒、諸如“智能”電話的移動(dòng)計(jì)算設(shè)備、電視、照相機(jī)、顯示設(shè)備、數(shù)字媒體播放器、視頻游戲機(jī)、視頻流式傳輸設(shè)備等。主機(jī)設(shè)備102可以包括處理單元,其可以指代能夠處理數(shù)據(jù)的任何形式的硬件,并且可以包括通用處理單元(諸如中央處理單元(cpu))、專用硬件(諸如專用集成電路(asic))、諸如現(xiàn)場可編程門陣列(fpga)的可配置硬件或者通過軟件指令、微代碼、固件等配置的任何其他形式的處理單元。
總線108可以包括用于在主機(jī)設(shè)備102、主儲(chǔ)存設(shè)備104與從儲(chǔ)存設(shè)備106之間傳送數(shù)據(jù)的數(shù)據(jù)線。例如,總線108可以包括串行數(shù)據(jù)線(sda)??偩€108可以符合任何合適的協(xié)議和標(biāo)準(zhǔn)。例如,總線108可以符合smbus。在一些情況下,總線108可以符合集成電路總線(i2c),諸如2014年4月4日由nxp半導(dǎo)體在“i2c-busspecificationandusermanual”(修訂本6)中描述的i2c,其全部內(nèi)容通過引用據(jù)此并入本文。在一些示例中,總線108可以包括用于對數(shù)據(jù)傳輸進(jìn)行定時(shí)的時(shí)鐘線。例如,總線108可以包括串行時(shí)鐘線(scl)。在一些示例中,時(shí)鐘線可以指示用于在數(shù)據(jù)線上傳輸數(shù)據(jù)的定時(shí)。例如,主機(jī)設(shè)備102可以在總線108的時(shí)鐘線上傳送的時(shí)鐘信號的上升沿期間讀取數(shù)據(jù)。
在一些示例中,每個(gè)從儲(chǔ)存設(shè)備106使用仲裁模塊110a-n(統(tǒng)稱為“仲裁模塊110”)中的相應(yīng)的一個(gè)來執(zhí)行沖突檢測。例如,從儲(chǔ)存設(shè)備106a的仲裁模塊110a可以檢測從儲(chǔ)存設(shè)備106之間的仲裁問題(例如,沖突)并且中止進(jìn)一步傳送,以防止總線108的數(shù)據(jù)損壞。在一些示例中,仲裁模塊110可以以軟件實(shí)現(xiàn)。例如,仲裁模塊110a可以包括在執(zhí)行時(shí)檢測沖突的固件。在一些示例中,仲裁模塊110可以與總線通信單元一起操作。例如,仲裁模塊110a的固件可以確定在總線108的數(shù)據(jù)線上是否發(fā)生沖突,并且總線通信單元可以確定何時(shí)在總線108的數(shù)據(jù)線上傳送數(shù)據(jù)(例如,總線108的時(shí)鐘線的上升沿)。
仲裁模塊110可以與總線108同步以確定何時(shí)傳送數(shù)據(jù)。在一些示例中,仲裁模塊110可以響應(yīng)于傳送緩沖器空事件而發(fā)起數(shù)據(jù)的傳送。例如,在接收到傳送緩沖器空事件的指示之后,仲裁模塊110a可以針對確認(rèn)而監(jiān)測總線108,并且在檢測到確認(rèn)的一個(gè)時(shí)鐘周期之后開始監(jiān)測總線108上的數(shù)據(jù)的傳送。以這種方式,仲裁模塊110可以與總線108同步以檢測沖突。
在與總線108同步之后,仲裁模塊110可以確定在總線108上是否發(fā)生沖突。例如,如果總線108上的線路電平(例如,邏輯‘1’)與期望線路電平(例如,輸出到傳送保持寄存器中的邏輯‘1’)不匹配,則仲裁模塊110a可以確定在總線108上發(fā)生沖突。在一些示例中,如果從儲(chǔ)存設(shè)備106中的多于一個(gè)的從儲(chǔ)存設(shè)備在總線108上傳送,則線路電平可能與期望線路電平不匹配。例如,如果仲裁模塊110a傳送邏輯‘1’,并且在相同的時(shí)鐘周期期間仲裁模塊110b傳送邏輯‘0’,則總線108上的線路電平可能指示邏輯‘0’。
如果在總線108上發(fā)生沖突,則從儲(chǔ)存設(shè)備106可以中止在總線108上傳送。例如,如果仲裁模塊110a確定在總線108上發(fā)生沖突,則仲裁模塊110a可以使從儲(chǔ)存設(shè)備106a中止在總線108上傳送。以這種方式,仲裁模塊110可以通過試圖訪問總線108并且響應(yīng)于檢測到總線108上的沖突而中止用于總線108上的傳送的輸出來執(zhí)行仲裁。
圖2是圖示根據(jù)本公開的一個(gè)或多個(gè)技術(shù)的從儲(chǔ)存設(shè)備107可以與主機(jī)設(shè)備102交互的示例儲(chǔ)存環(huán)境12的概念和示意框圖。如圖2所示,從儲(chǔ)存設(shè)備107可以包括控制器122、儲(chǔ)存元件126、緩存124以及接口120。在一些示例中,從儲(chǔ)存設(shè)備107可以包括為清楚起見在圖2中未示出的附加組件。例如,從儲(chǔ)存設(shè)備107可以包括功率輸送組件,包括例如電容器、超級電容器或電池;印刷電路板(pb),從儲(chǔ)存設(shè)備107的組件被機(jī)械地附接到該印刷電路板,并且該印刷電路板包括將從儲(chǔ)存設(shè)備107的組件電互連的導(dǎo)電跡線;諸如此類。
從儲(chǔ)存設(shè)備107可以經(jīng)由接口120可通信地耦合到主機(jī)設(shè)備102。接口120可以提供到主機(jī)設(shè)備102的機(jī)械連接、以及電連接、或者二者。例如,接口120可以被配置為連接到總線108的數(shù)據(jù)線。在一些情況下,接口120可以被配置為連接到總線108的時(shí)鐘線。接口120可以根據(jù)任何合適的協(xié)議來操作。例如,接口120可以根據(jù)非易失性存儲(chǔ)器(nvm)expresstm(nvme)來操作,諸如2015年10月23日的“nvmerevision1.2a”中描述的nvm子系統(tǒng),其全部內(nèi)容通過引用據(jù)此并入本文。在一些情況下,接口120可以根據(jù)以下協(xié)議中的一個(gè)或多個(gè)來操作:nvme、nvmemi、i2c、高級技術(shù)附件(ata)(例如,串行ata(sata)和并行ata(pata))、光纖通道、小型計(jì)算機(jī)系統(tǒng)接口(scsi)、串行連接的scsi(sas)、外圍組件互連(pci)和pci-express。接口120的電連接件(例如,數(shù)據(jù)總線、控制總線、時(shí)鐘總線等)可以電連接到控制器122,從而提供主機(jī)設(shè)備102與控制器122之間的電連接,允許數(shù)據(jù)在主機(jī)設(shè)備102與控制器122之間交換。
緩存124可以儲(chǔ)存用于傳送到總線108上的數(shù)據(jù)。例如,控制器122可以將數(shù)據(jù)寫入緩存124的傳送保持寄存器。然后,在稍后的時(shí)間(例如,在時(shí)鐘信號的上升時(shí)鐘沿期間),接口120可以將儲(chǔ)存在緩存124的傳送保持寄存器中的數(shù)據(jù)傳送到至主機(jī)設(shè)備102的總線108上。在一些示例中,緩存124可以包括易失性存儲(chǔ)器。在一些示例中,緩存124可以包括非易失性存儲(chǔ)器。例如,控制器122可以將緩存的信息儲(chǔ)存在緩存124中,直到緩存的信息被寫入儲(chǔ)存元件126。緩存124的示例包括但不限于隨機(jī)存取存儲(chǔ)器(ram)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、靜態(tài)ram(sram)和同步動(dòng)態(tài)ram(sdram(例如,ddr1、ddr2、ddr3、ddr3l、lpddr3、ddr4等))。
在一些示例中,儲(chǔ)存元件126可以包括存儲(chǔ)器陣列(例如,ssd)以儲(chǔ)存可以由主機(jī)設(shè)備102使用總線108訪問的數(shù)據(jù)。例如,控制器122可以響應(yīng)于通過總線108從主機(jī)設(shè)備102接收到命令來讀取和寫入儲(chǔ)存元件126的非易失性存儲(chǔ)器陣列。在一些示例中,儲(chǔ)存元件126可以包括磁記錄(例如hdd)以儲(chǔ)存可以由主機(jī)設(shè)備102使用總線108訪問的數(shù)據(jù)。例如,控制器122可以響應(yīng)于通過總線108從主機(jī)設(shè)備102接收到命令來讀取和寫入儲(chǔ)存元件126的疊瓦式磁記錄(smr)。在一些示例中,儲(chǔ)存元件126可以包括ssd元件和hdd元件的組合。例如,儲(chǔ)存元件126可以包括疊瓦式磁記錄和易失性存儲(chǔ)器陣列。在一些示例中,儲(chǔ)存元件126可以具有大的儲(chǔ)存容量,例如512mb、1gb、2gb、4gb、8gb、16gb、32gb、64gb、128gb、256gb、512gb、1tb、3tb等。
在一些示例中,控制器122可以包括寫入模塊142、讀取模塊140、仲裁模塊111以及總線通信單元150。在其他示例中,控制器122可以包括附加模塊或硬件單元,或者可以包括更少的模塊或硬件單元。控制器122可以包括微處理器、數(shù)字信號處理器(dsp)、專用集成電路(asic)、現(xiàn)場可編程門陣列(fpga)或者其他數(shù)字邏輯電路。
控制器122的讀取模塊140和寫入模塊142可以管理對儲(chǔ)存元件126的讀取和寫入。例如,響應(yīng)于寫入模塊142從主機(jī)設(shè)備102接收到指示從儲(chǔ)存設(shè)備107將數(shù)據(jù)儲(chǔ)存在儲(chǔ)存元件126中的命令,寫入模塊142可以確定儲(chǔ)存元件126的物理地址和/或軌道以儲(chǔ)存數(shù)據(jù)。
在寫入模塊142將數(shù)據(jù)寫入儲(chǔ)存元件126中之后,讀取模塊140可以從儲(chǔ)存元件126的物理地址和/或軌道取回?cái)?shù)據(jù)。例如,響應(yīng)于從儲(chǔ)存設(shè)備107從主機(jī)接收到指示從儲(chǔ)存設(shè)備107傳送儲(chǔ)存在儲(chǔ)存元件126中的數(shù)據(jù)的命令,讀取模塊140可以確定包含要傳送的數(shù)據(jù)的儲(chǔ)存元件126的物理地址和/或軌道。
在讀取模塊140從儲(chǔ)存元件126取回?cái)?shù)據(jù)之后,數(shù)據(jù)可以被傳送到至主機(jī)設(shè)備102的總線108上。例如,仲裁模塊111可以準(zhǔn)許寫入模塊142將數(shù)據(jù)輸出到緩存124的傳送保持寄存器上,并且如果總線108的線路電平與該數(shù)據(jù)的期望線路電平不匹配,則仲裁模塊111可以中止準(zhǔn)許寫入模塊142將數(shù)據(jù)輸出到緩存124的傳送保持寄存器上。
總線通信單元150可以確定何時(shí)在總線108的數(shù)據(jù)線上傳送數(shù)據(jù)。例如,總線通信單元150可以讀取儲(chǔ)存在緩存124的傳送保持寄存器中的數(shù)據(jù),并且在總線108的時(shí)鐘線的上升沿期間,將儲(chǔ)存在緩存124的傳送保持寄存器中的數(shù)據(jù)在總線108的數(shù)據(jù)線上串行地傳送。總線通信單元150可以包括微處理器、數(shù)字信號處理器(dsp)、專用集成電路(asic)、現(xiàn)場可編程門陣列(fpga)或者其他數(shù)字邏輯電路。
總線通信單元150可以讀取總線108上的數(shù)據(jù)。例如,總線通信單元150可以經(jīng)由總線108讀取來自主機(jī)設(shè)備102的對數(shù)據(jù)的請求。在一些示例中,總線通信單元150可以使用接口120來監(jiān)測總線108的時(shí)鐘線,以確定何時(shí)讀取數(shù)據(jù)。例如,總線通信單元150可以經(jīng)由接口120檢測總線108的時(shí)鐘線上的時(shí)鐘信號的上升沿,并且在時(shí)鐘信號的上升沿期間讀取總線108的數(shù)據(jù)線。
總線通信單元150可以確定傳送保持寄存器是否具有要在總線108上傳送的數(shù)據(jù)。例如,總線通信單元150可以檢測傳送標(biāo)志的狀態(tài),并且如果標(biāo)志是清除的(cleared),則確定傳送保持寄存器具有數(shù)據(jù)。在一些示例中,傳送標(biāo)志可以由仲裁模塊111、寫入模塊142等清除。
在傳送保持寄存器為空的情況下,總線通信單元150可以向仲裁模塊111發(fā)信號通知傳送保持寄存器為空。在一些示例中,總線通信單元150可以使用中斷來發(fā)信號通知傳送保持寄存器為空。例如,響應(yīng)于總線通信單元150確定緩存124的傳送緩沖器為空,總線通信單元150可以向仲裁模塊111輸出傳送緩沖器空事件中斷。
響應(yīng)于接收到緩存124的傳送保持寄存器為空的信號,寫入模塊142可以將數(shù)據(jù)輸出到緩存124的傳送保持寄存器中。例如,響應(yīng)于寫入模塊142從總線通信單元150接收到傳送緩沖器空事件的指示,寫入模塊142可以將數(shù)據(jù)的下個(gè)字節(jié)寫入緩存124的傳送保持寄存器中。
一旦寫入模塊142將數(shù)據(jù)輸出到緩存124的傳送保持寄存器中,則仲裁模塊111可以針對確認(rèn)而監(jiān)測總線108以與總線108同步。例如,仲裁模塊110可以確定在總線108的時(shí)鐘線的下個(gè)時(shí)鐘周期的上升沿期間,總線108的數(shù)據(jù)線對于線路電平是否指示邏輯‘1’。如果在總線108的時(shí)鐘線的下個(gè)時(shí)鐘周期期間線路電平指示邏輯‘1’,則仲裁模塊110可以確定在總線108上已發(fā)生確認(rèn)。
在發(fā)送緩存124的傳送保持寄存器為空的信號之后,總線通信單元150可以確定是否在總線108上成功接收數(shù)據(jù)。在一些示例中,總線通信單元150可以基于接收到的位數(shù)來確定是否成功接收數(shù)據(jù)。例如,如果正好傳輸一個(gè)字節(jié)的數(shù)據(jù),則總線通信單元150可以確定在總線108上成功接收數(shù)據(jù)。在一些示例中,總線通信單元150可以基于分組錯(cuò)誤檢查來確定是否成功接收數(shù)據(jù)。例如,如果總線通信單元150基于接收到數(shù)據(jù)計(jì)算校驗(yàn)和,該校驗(yàn)和等于與總線108上的數(shù)據(jù)一起傳送的校驗(yàn)和,則總線通信單元150可以確定在總線108上成功接收數(shù)據(jù)。
響應(yīng)于總線通信單元150確定在總線108上成功接收數(shù)據(jù),總線通信單元150可以傳送指示成功接收數(shù)據(jù)的確認(rèn)。例如,總線通信單元150可以經(jīng)由接口120檢測總線108的時(shí)鐘線上的時(shí)鐘信號的上升沿,并且在總線108的時(shí)鐘線的時(shí)鐘信號的上升沿期間讀取總線108的數(shù)據(jù)線的字節(jié)的最后一位。然后,在總線通信單元150確定成功接收數(shù)據(jù)之后,總線通信單元150可以經(jīng)由總線108在時(shí)鐘周期的上升沿期間傳送確認(rèn)。例如,總線通信單元150可以在總線108的時(shí)鐘線的下個(gè)時(shí)鐘周期的上升沿期間驅(qū)動(dòng)總線108的數(shù)據(jù)線以具有指示邏輯‘1’的線路電平。
在傳送確認(rèn)之后,總線通信單元150可以從傳送保持寄存器加載數(shù)據(jù)以在總線108上傳送,并且可以將加載的數(shù)據(jù)傳送到總線108上。例如,總線通信單元150可以讀取緩存124的傳送緩沖器中的下個(gè)字節(jié),并且可以在總線108的時(shí)鐘線的時(shí)鐘信號的上升沿期間在總線108的數(shù)據(jù)線上傳送該下個(gè)字節(jié)。
響應(yīng)于仲裁模塊111檢測到傳送到總線108上的確認(rèn)并且總線通信單元150將數(shù)據(jù)傳送到總線108上,仲裁模塊111可以確定與輸出到緩存124的傳送保持寄存器中的數(shù)據(jù)的位相對應(yīng)的線路電平。例如,仲裁模塊111可以使用接口120和/或總線通信單元150來檢測與該確認(rèn)相對應(yīng)的總線108的時(shí)鐘線上的時(shí)鐘周期(例如,上升沿、下降沿或者在上升沿與下降沿之間延伸的區(qū)域),并且可以使用接口120和/或總線通信單元150來讀取與緊接與該確認(rèn)相對應(yīng)的總線108的時(shí)鐘線上的時(shí)鐘沿之后的時(shí)鐘周期的時(shí)鐘周期(例如,上升沿、下降沿或者或者在上升沿與下降沿之間延伸的區(qū)域)相對應(yīng)的總線108的數(shù)據(jù)線上的線路電平。
響應(yīng)于確定與輸出到緩存124的傳送保持器寄存器中的數(shù)據(jù)的位相對應(yīng)的線路電平,仲裁模塊111可以將該線路電平與預(yù)期線路電平相比較以檢測總線108上的沖突。例如,仲裁模塊111可以將輸出到緩存124的傳送保持寄存器中的位的邏輯電平(例如,邏輯‘1’或‘0’)與在與該位相對應(yīng)的時(shí)鐘周期期間在總線108的數(shù)據(jù)線上檢測到的線路電平相比較。
如果線路電平與預(yù)期線路電平匹配,則仲裁模塊111可以確定在總線108上未發(fā)生沖突。例如,如果寫入模塊142將邏輯‘1’輸出到緩存124的傳送保持寄存器中并且接口120和/或總線通信單元150在總線108的數(shù)據(jù)線上檢測到邏輯‘1’線路電平,則仲裁模塊111可以確定在總線108上未發(fā)生沖突。
另一方面,如果線路電平與預(yù)期線路電平不匹配,則仲裁模塊111可以確定在總線108上發(fā)生沖突。例如,當(dāng)寫入模塊142將邏輯‘0’輸出到緩存124的傳送保持寄存器并且接口120和/或總線通信單元150在總線108的數(shù)據(jù)線上檢測到邏輯‘1’線路電平,則仲裁模塊111可以確定在總線108上發(fā)生沖突。
在仲裁模塊111確定在總線108上發(fā)生沖突的情況下,從儲(chǔ)存設(shè)備107可以中止在總線108的數(shù)據(jù)線上傳送,直到發(fā)生下個(gè)開始條件。例如,如果線路電平與期望線路電平不匹配,則仲裁模塊111可以使得寫入模塊142停止將數(shù)據(jù)輸出到緩存124的傳送保持寄存器中,直到發(fā)生下個(gè)開始條件。
總線通信單元150可以確定在總線108上是否發(fā)生開始條件。例如,當(dāng)主機(jī)設(shè)備102在時(shí)鐘線的第一時(shí)鐘周期(例如,上升沿)期間傳送停止命令(例如,將數(shù)據(jù)線驅(qū)動(dòng)到邏輯‘1’)時(shí),總線通信單元150可以確定總線108的數(shù)據(jù)線已經(jīng)被復(fù)位,并且響應(yīng)于確定數(shù)據(jù)線已被復(fù)位,當(dāng)主機(jī)設(shè)備102在時(shí)鐘線的第二時(shí)鐘周期期間傳送開始命令(例如,將數(shù)據(jù)線驅(qū)動(dòng)到邏輯‘0’)時(shí),總線通信單元150可以確定在總線108上發(fā)生開始條件。在一些情況下,當(dāng)從儲(chǔ)存設(shè)備107在時(shí)鐘線的第一時(shí)鐘周期(例如,上升沿)期間傳送否定確認(rèn)(nack或nak)命令時(shí),總線通信單元150可以確定總線108的數(shù)據(jù)線已被復(fù)位,并且響應(yīng)于確定數(shù)據(jù)線已經(jīng)被復(fù)位,當(dāng)主機(jī)設(shè)備102在時(shí)鐘線的第二時(shí)鐘周期期間傳送開始命令(例如,將數(shù)據(jù)線驅(qū)動(dòng)到邏輯‘0’)時(shí),總線通信單元150可以確定在總線108上發(fā)生開始條件。
響應(yīng)于確定在總線108上發(fā)生開始條件,仲裁模塊111可以使總線通信單元150重試經(jīng)由總線108向主機(jī)設(shè)備102傳送第一位。例如,仲裁模塊111可以準(zhǔn)許寫入模塊142將數(shù)據(jù)輸出到緩存124的傳送保持寄存器中,以使總線通信單元150在總線通信單元150確定總線108的數(shù)據(jù)線已經(jīng)被復(fù)位之后和/或在發(fā)生開始條件之后(以及在仲裁模塊111接收到傳送緩沖器空事件的另一指示之后)重試傳送第一位。
在仲裁模塊111確定在總線108上未發(fā)生沖突的情況下,仲裁模塊111可以繼續(xù)準(zhǔn)許寫入模塊142將數(shù)據(jù)(例如,第二位、第三位等)輸出到緩存124的傳送保持寄存器中。例如,仲裁模塊111可以將輸出到緩存124的傳送保持寄存器中的第二位的邏輯電平(例如,邏輯‘1’或‘0’)與在與第二位相對應(yīng)的時(shí)鐘周期(例如,與第一位相對應(yīng)的時(shí)鐘周期之后的一個(gè)時(shí)鐘周期)期間在總線108的數(shù)據(jù)線上檢測到的線路電平相比較。響應(yīng)于寫入模塊142將數(shù)據(jù)輸出到緩存124的傳送保持寄存器中,總線通信單元150可以繼續(xù)將數(shù)據(jù)傳送到總線108上,直到數(shù)據(jù)(例如,字節(jié))已被發(fā)送到主機(jī)設(shè)備102。
在總線通信單元150在總線108上傳送的情況下,總線通信單元150可以檢測在總線108上是否發(fā)生停止命令。例如,總線通信單元150可以經(jīng)由接口120檢測到總線108的數(shù)據(jù)線上的數(shù)據(jù)信號的從低到高的轉(zhuǎn)變,同時(shí)總線108的時(shí)鐘線上的時(shí)鐘信號為高。在一些示例中,可以由主儲(chǔ)存設(shè)備(例如,圖1的主儲(chǔ)存設(shè)備104)傳送停止命令。響應(yīng)于接收到停止命令,總線通信單元150可以中止在總線108上傳送,直到總線108已被復(fù)位和/或當(dāng)發(fā)生開始條件時(shí)。
圖3是圖示根據(jù)本發(fā)明的一個(gè)或多個(gè)技術(shù)的至少一個(gè)處理器可以實(shí)現(xiàn)沖突檢測的示例技術(shù)的概念圖。為了便于描述,將同時(shí)參考圖1的儲(chǔ)存環(huán)境10和圖2的控制器122來描述圖3的技術(shù)。盡管圖3將串行時(shí)鐘線圖示為時(shí)鐘線,但是可以使用任何合適的時(shí)鐘信號和協(xié)議。另外,盡管圖3將串行數(shù)據(jù)線圖示為數(shù)據(jù)線,但是可以使用任何合適的數(shù)據(jù)線和協(xié)議。應(yīng)當(dāng)理解,在一些示例中,主機(jī)數(shù)據(jù)線信號204和設(shè)備數(shù)據(jù)線信號206可以是相同的數(shù)據(jù)線信號,并且數(shù)據(jù)線信號的分離僅僅是為了進(jìn)一步圖示出如何可以由主機(jī)設(shè)備102和從儲(chǔ)存設(shè)備106a驅(qū)動(dòng)數(shù)據(jù)線信號。
主機(jī)設(shè)備102可以通過將主機(jī)數(shù)據(jù)線信號204從邏輯‘1’驅(qū)動(dòng)到邏輯‘0’來指示開始條件210,并且主機(jī)設(shè)備102可以隨后在主機(jī)數(shù)據(jù)線信號204上向從儲(chǔ)存設(shè)備106a發(fā)送數(shù)據(jù)。在傳送條件214,從儲(chǔ)存設(shè)備106a可以驅(qū)動(dòng)設(shè)備數(shù)據(jù)線信號206以指示確認(rèn)220,該確認(rèn)指示對從主機(jī)設(shè)備102發(fā)送的數(shù)據(jù)的成功接收。在一些示例中,確認(rèn)220可以在狀態(tài)(例如,傳送緩沖器空事件)期間,其可以由仲裁模塊(例如,圖2的111)用來與設(shè)備數(shù)據(jù)線信號206同步。接下來,在傳送條件214期間并且在確認(rèn)220之后,從儲(chǔ)存設(shè)備106a可以驅(qū)動(dòng)設(shè)備數(shù)據(jù)線信號206以傳送字節(jié)222。在一些示例中,仲裁模塊(例如,圖2的111)可以將設(shè)備數(shù)據(jù)線信號206與期望線路電平相比較,以確定是否發(fā)生沖突。如圖3所示,如果未發(fā)生沖突,則從儲(chǔ)存設(shè)備106a可以驅(qū)動(dòng)設(shè)備數(shù)據(jù)線信號206以繼續(xù)傳送數(shù)據(jù),直到主機(jī)設(shè)備102驅(qū)動(dòng)主機(jī)數(shù)據(jù)線信號204以指示停止條件216。
圖4是圖示根據(jù)本公開的一個(gè)或多個(gè)技術(shù)的至少一個(gè)處理器可以實(shí)現(xiàn)沖突檢測的示例技術(shù)的流程圖。為了便于描述,將同時(shí)參考圖1的儲(chǔ)存環(huán)境10和圖2的控制器122來描述圖4的技術(shù)。
仲裁模塊111可以接收傳送緩沖器空事件的指示(302)。例如,總線通信單元150可以向仲裁模塊111發(fā)送對應(yīng)于傳送緩沖器空事件的中斷。響應(yīng)于傳送緩沖器空事件的指示,寫入模塊142可以將數(shù)據(jù)輸出到傳送保持寄存器中(304)。例如,在仲裁模塊111接收到對應(yīng)于傳送緩沖器空事件的中斷之后,仲裁模塊111可以準(zhǔn)許寫入模塊142將數(shù)據(jù)輸出到緩存124的傳送保持寄存器中。接下來,仲裁模塊111可以確定何時(shí)由總線通信單元150在總線108上傳送確認(rèn)(306)。例如,在仲裁模塊111接收到對應(yīng)于傳送緩沖器空事件的中斷并且將數(shù)據(jù)寫入緩存124的傳送保持寄存器中之后,仲裁模塊111可以針對確認(rèn)而在總線108的時(shí)鐘線的上升沿期間監(jiān)測總線108的數(shù)據(jù)線。在一些情況下,可以由總線通信單元150響應(yīng)于檢測到在總線108上傳送的數(shù)據(jù)到從儲(chǔ)存設(shè)備107的成功接收而傳送確認(rèn)。然后,從儲(chǔ)存設(shè)備107可以在總線108的數(shù)據(jù)線上向主機(jī)設(shè)備102傳送第一位(308)。例如,總線通信單元150可以在總線108的數(shù)據(jù)線上向主機(jī)設(shè)備102傳送第一位,其與從緩存124的傳送保持寄存器讀取的第一位相對應(yīng)。接下來,仲裁模塊111可以基于何時(shí)在總線108的數(shù)據(jù)線上傳送確認(rèn),來確定總線108的數(shù)據(jù)線的線路電平(310)。例如,仲裁模塊111可以使用接口120和/或總線通信單元150檢測與該確認(rèn)相對應(yīng)的總線108的時(shí)鐘線上的時(shí)鐘沿(例如,上升沿),并且可以讀取與緊接與該確認(rèn)相對應(yīng)的總線108的時(shí)鐘線上的時(shí)鐘沿之后的時(shí)鐘周期的時(shí)鐘沿(例如,上升)相對應(yīng)的總線108的數(shù)據(jù)線上的線路電平。
如果線路電平對應(yīng)于第一位(316的“是”分支),則從儲(chǔ)存設(shè)備107可以確定未發(fā)生沖突(322)。例如,仲裁模塊111可以響應(yīng)于寫入模塊142將第一位作為邏輯‘0’輸出到緩存124的傳送保持寄存器并且確定對應(yīng)于第一位的線路電平指示邏輯‘0’,來確定未發(fā)生沖突。接下來,從儲(chǔ)存設(shè)備107可以在總線108的數(shù)據(jù)線上傳送第二位(324)。例如,寫入模塊142可以將第二位的值輸出到緩存124的傳送保持寄存器,并且總線通信單元150可以在總線108的數(shù)據(jù)線上向主機(jī)設(shè)備102傳送第二位。
另一方面,如果線路電平不對應(yīng)于第一位(316的“否”分支),則仲裁模塊111可以確定發(fā)生沖突(318)。例如,仲裁模塊111可以響應(yīng)于寫入模塊142將第一位作為邏輯‘1’輸出到緩存124的傳送保持寄存器并且確定對應(yīng)于第一位的線路電平指示邏輯‘0’,來確定發(fā)生沖突。響應(yīng)于確定已發(fā)生沖突,從儲(chǔ)存設(shè)備107可以中止總線108上的進(jìn)一步傳送。例如,仲裁模塊111可以停止準(zhǔn)許寫入模塊142將數(shù)據(jù)(例如,字節(jié)的第二位)輸出到緩存124的傳送保持寄存器,直到在重新開始發(fā)送數(shù)據(jù)(例如,重新啟動(dòng)到302)之前發(fā)生開始條件(320)。
本公開中描述的技術(shù)可以至少部分地以硬件、軟件、固件或其任何組合來實(shí)現(xiàn)。例如,所描述的技術(shù)的各個(gè)方面可以在一個(gè)或多個(gè)處理器內(nèi)實(shí)現(xiàn),包括一個(gè)或多個(gè)微處理器、數(shù)字信號處理器(dsp)、專用集成電路(asic)、現(xiàn)場可編程門陣列(fpga)或者任何其他等效集成或離散邏輯電路,以及這樣的組件的任何組合。術(shù)語“處理器”或“處理電路”通??梢灾复魏吻笆鲞壿嬰娐罚瑔为?dú)地或與其他邏輯電路組合,或者任何其他等效電路。包括硬件的控制單元還可以執(zhí)行本公開的一個(gè)或多個(gè)技術(shù)。
這樣的硬件、軟件和固件可以在相同的設(shè)備內(nèi)或者在單獨(dú)的設(shè)備內(nèi)實(shí)現(xiàn),以支持本公開中描述的各種技術(shù)。另外,任何所描述的單元、模塊或組件可以一起或單獨(dú)實(shí)現(xiàn)為離散但可互操作的邏輯設(shè)備。將不同特征描述為模塊或單元旨在突出不同的功能方面,并且不一定意味著這樣的模塊或單元必須由單獨(dú)的硬件、固件或軟件組件來實(shí)現(xiàn)。相反,與一個(gè)或多個(gè)模塊或單元相關(guān)聯(lián)的功能可以由單獨(dú)的硬件、固件或軟件組件來執(zhí)行,或者集成在公共或單獨(dú)的硬件、固件或軟件組件中。
本公開中描述的技術(shù)還可在包括編碼有指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的制品中實(shí)施或編碼。在包括計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的制品中嵌入或編碼的指令可以使一個(gè)或多個(gè)可編程處理器或者其他處理器實(shí)現(xiàn)在此描述的技術(shù)中的一個(gè)或多個(gè),諸如當(dāng)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中包括或編碼的指令由一個(gè)或多個(gè)處理器執(zhí)行時(shí)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以包括隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、可編程只讀存儲(chǔ)器(prom)、可擦除可編程只讀存儲(chǔ)器(eprom)、電可擦除可編程只讀存儲(chǔ)器(eeprom)、閃速存儲(chǔ)器、硬盤,壓縮盤rom(cd-rom)、軟盤、盒式磁帶、磁性介質(zhì)、光學(xué)介質(zhì)或者其他計(jì)算機(jī)可讀介質(zhì)。在一些示例中,制品可以包括一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。
在一些示例中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以包括非臨時(shí)性介質(zhì)。術(shù)語“非臨時(shí)性”可以表示存儲(chǔ)介質(zhì)未被包含在載波或傳播信號中。在某些示例中,非臨時(shí)性存儲(chǔ)介質(zhì)可以存儲(chǔ)可能隨時(shí)間改變的數(shù)據(jù)(例如,在ram或緩存中)。
已經(jīng)描述了各種示例。這些和其他示例都在所附權(quán)利要求的范圍內(nèi)。