專利名稱:數(shù)據(jù)傳送的方法、裝置與系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及總線數(shù)據(jù)傳送,特別是關(guān)于在主機(jī)與裝置之間的數(shù)據(jù)傳送方法、 裝置與系統(tǒng)。
背景技術(shù):
以封包(packet)傳送數(shù)據(jù)是當(dāng)今流數(shù)據(jù)傳送總線所使用的常用技術(shù)。為了 獲得高效的總線利用,多個(gè)數(shù)據(jù)封包被打包(pack)成一傳輸數(shù)據(jù)(data transmission)。為達(dá)到裝置存儲器資源管理以及避免不必要的存儲器濫用,使用 特定的硬件,例如隊(duì)列管理單元(queue management unit,以下簡稱為QMU), 來剖析(parse)傳送的數(shù)據(jù)以及存儲封包至相應(yīng)的緩沖器,而不是使用軟件指 令來剖析傳送的數(shù)據(jù)至緩沖器。然而, 一旦主機(jī)與QMU之間的同步丟失,傳送 的封包就不能正確地分配至相應(yīng)的緩沖器。
舉例來說,如果在封包頭(packetheader)內(nèi)指示數(shù)據(jù)封包的封包長度的長 度域(length field)由于異常總線情況(例如總線錯(cuò)誤)而出錯(cuò)(corrupt),傳 送中止(abort)或者相似錯(cuò)誤導(dǎo)致的同步丟失以及/或者封包損壞,由于封包之 間的邊界由長度域定義,所以QMU將不能正確地從傳輸數(shù)據(jù)中分離封包。
因此,當(dāng)異??偩€情況發(fā)生時(shí),正確地重新傳送損壞的封包十分重要。
發(fā)明內(nèi)容
本發(fā)明為了在異??偩€情況發(fā)生時(shí),實(shí)現(xiàn)正確地總線數(shù)據(jù)傳送,提供了一 種數(shù)據(jù)傳送方法、裝置與系統(tǒng)。
本發(fā)明所披露的一種數(shù)據(jù)傳送方法,所述方法在主機(jī)與裝置之間經(jīng)由總線 傳送數(shù)據(jù),所述方法包含從主機(jī)接收一列數(shù)據(jù)封包,并且存儲接收到的數(shù)據(jù) 封包至裝置內(nèi)的緩沖單元;判定是否發(fā)生預(yù)設(shè)錯(cuò)誤;當(dāng)預(yù)設(shè)錯(cuò)誤發(fā)生時(shí),鎖定 裝置的緩沖單元,以停止接收數(shù)據(jù)封包;以及依據(jù)來自主機(jī)的解鎖請求,解鎖 裝置的緩沖單元,以繼續(xù)接收后續(xù)的數(shù)據(jù)封包。本發(fā)明另一實(shí)施方式提供一種數(shù)據(jù)傳送系統(tǒng),包含主機(jī),提供一列數(shù)據(jù)
封包;總線;以及裝置,經(jīng)由總線耦接到主機(jī),具有緩沖單元,并且從主機(jī)接
收數(shù)據(jù)封包,以及存儲接收到的數(shù)據(jù)封包至緩沖單元,決定是否發(fā)生預(yù)設(shè)錯(cuò)誤,
當(dāng)預(yù)設(shè)錯(cuò)誤發(fā)生時(shí),鎖定裝置的緩沖單元,以停止接收數(shù)據(jù)封包;以及依據(jù)來 自主機(jī)的解鎖請求,解鎖裝置的緩沖單元,以繼續(xù)接收后續(xù)的數(shù)據(jù)封包。
本發(fā)明又一實(shí)施方式提供一種數(shù)據(jù)傳送方法,所述方法在主機(jī)與裝置之間 經(jīng)由總線傳送數(shù)據(jù),所述方法包含傳送一列數(shù)據(jù)封包,每一數(shù)據(jù)封包包含封 包頭;接收主機(jī)傳送的數(shù)據(jù)封包,并且存儲接收到的數(shù)據(jù)封包至裝置內(nèi)的緩沖 單元;判定是否發(fā)生預(yù)設(shè)錯(cuò)誤;當(dāng)預(yù)設(shè)錯(cuò)誤發(fā)生時(shí),鎖定裝置的緩沖單元,以 停止接收數(shù)據(jù)封包;判定是否接收到由裝置觸發(fā)用以通知發(fā)生預(yù)設(shè)錯(cuò)誤的一信 號;發(fā)出一解鎖請求至裝置,用以解鎖裝置的緩沖單元;以及繼續(xù)傳送后續(xù)的 數(shù)據(jù)封包至裝置。
本發(fā)明又一實(shí)施方式提供一種數(shù)據(jù)傳送裝置,用于處理異??偩€情況,所 述裝置包含緩沖單元,用以接收一列數(shù)據(jù)封包,并且存儲接收到的數(shù)據(jù)封包; 其中當(dāng)至少一個(gè)預(yù)設(shè)錯(cuò)誤發(fā)生時(shí),鎖定緩沖單元,以停止接收數(shù)據(jù)封包;以及 其中緩沖單元依據(jù)來自主機(jī)的解鎖命令而解鎖,以繼續(xù)接收后續(xù)數(shù)據(jù)封包。
本發(fā)明提供的數(shù)據(jù)傳送方法、裝置與系統(tǒng),可幫助裝置從錯(cuò)誤情況中快速 恢復(fù),并且減少系統(tǒng)復(fù)雜度。
圖1是依據(jù)本發(fā)明的一個(gè)實(shí)施方式的數(shù)據(jù)傳送系統(tǒng)的簡要示意圖。 圖2是數(shù)據(jù)傳送的一個(gè)實(shí)施方式的簡要示意圖。
圖3是依據(jù)本發(fā)明的實(shí)施方式的接收到的數(shù)據(jù)封包的封包頭的數(shù)據(jù)格式的 簡要示意圖。
圖4是依據(jù)本發(fā)明的實(shí)施方式的在主機(jī)與裝置之間總線數(shù)據(jù)傳送的方法的 流程圖。
圖5A至5D是依據(jù)本發(fā)明的總線數(shù)據(jù)傳送的方法的實(shí)施方式的簡要示意圖。
具體實(shí)施例方式
以下是根據(jù)多個(gè)圖式對本發(fā)明的較佳實(shí)施方式進(jìn)行詳細(xì)描述,本領(lǐng)域技術(shù)人員閱讀后應(yīng)可明確了解本發(fā)明的目的。
圖1是依據(jù)本發(fā)明的一個(gè)實(shí)施方式的數(shù)據(jù)傳送系統(tǒng)的簡要示意圖。在圖1
中,傳送系統(tǒng)10包含主機(jī)20,裝置30以及總線40,例如安全數(shù)字輸入/輸出 總線(Secure Digital Input/Output bus, SDIO bus )、通用串行總線(Universal Serial Bus , USB)或者相似的串行總線。其中裝置30包含錯(cuò)誤檢測器32、緩沖 單元(例如先進(jìn)先出緩沖器)34 、 QMU36 、先進(jìn)高性能總線(advanced High-performance Bus,圖式中簡稱為AHB)、寄存器39以及緩沖隊(duì)列38。其 中總線40耦接于主機(jī)20與裝置30之間來實(shí)現(xiàn)兩者的數(shù)據(jù)傳送。主機(jī)20可將 一列數(shù)據(jù)封包打包成一個(gè)傳輸數(shù)據(jù),然后經(jīng)由總線40傳送打包的數(shù)據(jù)封包至裝 置30。每一數(shù)據(jù)封包包含封包頭來提供關(guān)于所述數(shù)據(jù)封包的信息,例如數(shù)據(jù)封 包的長度與類型。
圖2是數(shù)據(jù)傳送的一個(gè)實(shí)施方式的簡要示意圖。在圖2中,繪示了三個(gè)傳 輸數(shù)據(jù)T1, T2與T3,傳輸數(shù)據(jù)T1, T2與T3連續(xù)地被傳送。每一傳輸數(shù)據(jù)可包 含不同數(shù)目的數(shù)據(jù)封包或者不同大小的數(shù)據(jù)封包或者數(shù)據(jù)塊(data block)。 每一數(shù)據(jù)塊可包含多個(gè)數(shù)據(jù)封包,其中數(shù)據(jù)塊的結(jié)束以"塊末端(end of block )" 標(biāo)簽來定義。每一數(shù)據(jù)封包可具有封包頭與封包數(shù)據(jù),其中封包頭包含封包長 度、序列編號與封包類型等信息。封包頭將在以下段落中詳細(xì)描述。此外,圖2 具體標(biāo)出了序列編號分別為①、②、③的三個(gè)數(shù)據(jù)封包。冗余數(shù)據(jù)塊(Redundant data block)在數(shù)據(jù)塊之間插入。每一lt據(jù)塊可包含一循環(huán)冗余校-瞼(cycl ic redundancy check,以下簡稱為CRC)值,并且如果CRC沖全查其CRC值失敗,凄t 據(jù)塊被定義為出錯(cuò)。
圖3是依據(jù)本發(fā)明的實(shí)施方式的接收到的數(shù)據(jù)封包的封包頭300的數(shù)據(jù)格 式的簡要示意圖。如圖3所示,封包頭300可包含位于比特B0-B11的封包長度 域"長度"來指示數(shù)據(jù)封包的長度,位于比特B12-B20的序列編號域"序列編 號"來指示數(shù)據(jù)封包的唯一序列編號,位于比特B21-B23的傳送類型域"傳送 類型"來指示數(shù)據(jù)封包的傳送類型,以及位于比特B24-B31的校驗(yàn)和域"校驗(yàn) 和"來指示數(shù)據(jù)封包的校驗(yàn)和值。封包長度域"長度"可用來決定數(shù)據(jù)封包之 間的邊界。在傳送之前,每一數(shù)據(jù)封包依據(jù)傳送順序被設(shè)定唯一的序列編號, 因此所述序列編號可用來指示各個(gè)數(shù)據(jù)封包。舉例來說,請參照圖2,具有序列 編號②的數(shù)據(jù)封包在具有序列編號①的數(shù)據(jù)封包之后傳送,并且在具有序列編 號③的數(shù)據(jù)封包之前傳送。"傳送類型',域是用來決定數(shù)據(jù)封包的分配隊(duì)列,稍后供QMU36使用。舉例來說,數(shù)據(jù)封包的傳送類型可為數(shù)據(jù)封包的類型或者 優(yōu)先級。具有相同的傳送類型的數(shù)據(jù)封包將被存儲至相同的緩沖隊(duì)列,而具有 不同的傳送類型的數(shù)據(jù)封包將被存儲至不同的緩沖隊(duì)列。"校驗(yàn)和"域可指示 封包頭信息的校驗(yàn)和并且可因此用來保護(hù)封包頭避免出錯(cuò)。"校驗(yàn)和,,域稍后 被錯(cuò)誤檢測器32用來判定是否發(fā)生校驗(yàn)和錯(cuò)誤。
裝置30可經(jīng)由總線40接收數(shù)據(jù)封包,然后存儲以及分配接收到的數(shù)據(jù)封 包至相應(yīng)的緩沖隊(duì)列。舉例來說,每一接收到的數(shù)據(jù)封包可依據(jù)其封包長度或 者優(yōu)先級設(shè)定被分配至相應(yīng)的緩沖隊(duì)列。
裝置30中每一緩沖隊(duì)列可具有相同或者不同的大小或者優(yōu)先級。Q而36耦 接至多個(gè)緩沖隊(duì)列38,依據(jù)每一接收到的數(shù)據(jù)封包的封包頭來剖析與分配接收 到的數(shù)據(jù)封包至相應(yīng)的緩沖隊(duì)列38。錯(cuò)誤檢測器32耦接至緩沖單元34,并且 能夠依據(jù)相應(yīng)的請求(例如,分別依據(jù)鎖定命令或者解鎖命令)來鎖定(lock) 或者解鎖(unlock)緩沖單元34。在本實(shí)施方式中,當(dāng)預(yù)設(shè)錯(cuò)誤發(fā)生時(shí),錯(cuò)誤 檢測器32可產(chǎn)生鎖定命令。 一旦緩沖單元34被鎖定,裝置30停止從主機(jī)20 接收數(shù)據(jù)封包,因此來自主機(jī)20的數(shù)據(jù)封包被阻止進(jìn)入緩沖單元34。在緩沖單 元34被鎖定后,裝置30執(zhí)行相對應(yīng)于鎖定命令的鎖定程序。鎖定程序可包含, 例如,清空(clear )裝置緩沖單元并且通過發(fā)送至主機(jī)20的一個(gè)觸發(fā)信號(例 如中斷信號)來通知主機(jī)20的步驟。在其它的實(shí)施方式中,鎖定程序可包含清 空裝置緩沖單元、重新設(shè)定QMU至初始狀態(tài)以及通過傳送至主機(jī)20的觸發(fā)信號 來通知主才幾20的步驟。
當(dāng)從主機(jī)20接收到打包在傳輸數(shù)據(jù)中的一列數(shù)據(jù)封包時(shí),錯(cuò)誤檢測器32 首先檢查接收到的數(shù)據(jù)封包(例如檢查每一數(shù)據(jù)封包的封包頭或者每一數(shù)據(jù)塊 的CRC值),并且判定是否發(fā)生一個(gè)預(yù)設(shè)錯(cuò)誤。舉例來說,所述預(yù)設(shè)錯(cuò)誤可為 任何種類的總線情況異常,例如指示總線錯(cuò)誤的CRC錯(cuò)誤、軟件錯(cuò)誤、主機(jī)產(chǎn) 生的特定命令(例如中止當(dāng)前傳送的中止命令)、或者指示接收到的數(shù)據(jù)封包 已損壞的數(shù)據(jù)封包的校驗(yàn)和錯(cuò)誤。換言之,所述預(yù)設(shè)錯(cuò)誤可為主機(jī)與裝置之間 同步丟失以及由于封包頭出錯(cuò)導(dǎo)致的數(shù)據(jù)封包損壞。錯(cuò)誤檢測器32可檢查在接 收到的數(shù)據(jù)封包的封包頭(如圖3所示)的"校驗(yàn)和"域的校驗(yàn)和值,以判定 接收到的數(shù)據(jù)封包的校驗(yàn)和是否正確。如果校驗(yàn)和正確,即接收到的數(shù)據(jù)封包 正確,接收到的數(shù)據(jù)封包被允許存儲至緩沖單元34以及進(jìn)一步傳遞至QMU36。 否則,判定接收到的數(shù)據(jù)封包的校驗(yàn)和錯(cuò)誤指示數(shù)據(jù)封包已損壞。類似地,錯(cuò)
8誤檢測器32可檢查具有多個(gè)數(shù)據(jù)封包的數(shù)據(jù)塊的CRC值,以判定接收到的數(shù)據(jù) 塊的CRC值是否正確。如果CRC正確,即接收到的數(shù)據(jù)塊正確,接收到的數(shù)據(jù) 封包被允許存儲至緩沖單元34以及進(jìn)一步傳遞至QMU36。否則,判定發(fā)生總線 錯(cuò)誤。
如果有任何的數(shù)據(jù)封包被存儲至緩沖單元34, Q麗36從緩沖單元34獲取數(shù) 據(jù)封包,通過檢查每一存儲的數(shù)據(jù)封包的封包頭來剖析獲取的數(shù)據(jù)封包并且將 數(shù)據(jù)封包存儲至相應(yīng)的緩沖隊(duì)列。具體來說,參見圖3, QMU36可依據(jù)封包長度 域"長度"來決定數(shù)據(jù)封包的長度并且決定數(shù)據(jù)封包之間的邊界,并且可依據(jù) "傳送類型"域,經(jīng)由Q固36與緩沖隊(duì)列38之間的內(nèi)部總線,例如先進(jìn)高性能 總線(advanced High-performance Bus,圖式中簡稱為AHB),來將凄t據(jù)封包存 儲至相應(yīng)的緩沖隊(duì)列38。在一個(gè)數(shù)據(jù)封包被成功地接收以及剖析之后,QMU36 可進(jìn)一步記錄成功接收的數(shù)據(jù)封包的序列編號至寄存器39。寄存器39耦接至 QMU36,用以在接收到的數(shù)據(jù)封包被成功地傳遞至QMU36之后,記錄上一個(gè)接收 到的數(shù)據(jù)封包的序列編號。換言之,寄存器39記錄上一個(gè)接收到的數(shù)據(jù)封包的 序列編號。
主機(jī)20可在接收到指示預(yù)設(shè)錯(cuò)誤已發(fā)生的信號(例如由裝置30觸發(fā)的中 斷信號)之后,進(jìn)一步發(fā)出一個(gè)解鎖請求以解鎖緩沖單元34,并且發(fā)出請求來 獲得裝置30上一個(gè)接收到的數(shù)據(jù)封包的序列編號。在獲得上一個(gè)接收到的數(shù)據(jù) 封包的序列編號之后,主機(jī)20可根據(jù)上一個(gè)接收到的數(shù)據(jù)封包的序列編號來選 擇后續(xù)重新傳送的數(shù)據(jù)封包,其中首先重新傳送的后續(xù)的數(shù)據(jù)封包以一個(gè)封包 頭開始。
圖4是依據(jù)本發(fā)明的實(shí)施方式的在主機(jī)與裝置之間總線數(shù)據(jù)傳送的方法的 流程圖,其中主機(jī)傳送數(shù)據(jù)封包的流程在圖4的左側(cè),而裝置接收數(shù)據(jù)封包的 流程在圖4的右側(cè)。如圖4的左側(cè)所示,在主機(jī)中,數(shù)據(jù)封包被準(zhǔn)備并且連續(xù) 地傳送至裝置(步驟S450 )。然后,判定是否接收到指示預(yù)設(shè)錯(cuò)誤(例如封包 損壞或者由CRC錯(cuò)誤導(dǎo)致同步丟失)的中斷信號(步驟S460 )。如果沒有接收 到這樣的中斷信號(在步驟S460中結(jié)果為否),流程返回步驟S450從而主機(jī) 繼續(xù)傳送數(shù)據(jù)封包至裝置。如果接收到中斷信號(在步驟S460中結(jié)果為是), 即緩沖單元(例如先進(jìn)先出緩沖器)被鎖定,因此主機(jī)發(fā)出一個(gè)解鎖命令以解 鎖緩沖單元并且發(fā)出請求以獲得裝置上一個(gè)接收到的數(shù)據(jù)封包的序列編號至裝 置(步驟S470 )。主機(jī)可從裝置的寄存器獲得上一個(gè)接收到的數(shù)據(jù)封包的序列編號。在接收到請求上一個(gè)接收到的數(shù)據(jù)封包的序列編號的請求后,裝置從寄存器獲得上一個(gè)接收到的數(shù)據(jù)封包的序列編號并且將獲得的序列編號發(fā)送至主機(jī)。在這個(gè)例子中,主機(jī)可依據(jù)上一個(gè)接收到的數(shù)據(jù)封包的序列編號來選#^重新傳送的后續(xù)數(shù)據(jù)封包,其中首先重新傳送的后續(xù)數(shù)據(jù)封包以 一個(gè)封包頭開始。舉例來說,主機(jī)可重新安排數(shù)據(jù)傳送,以使得在具有獲得的序列編號的數(shù)據(jù)封包隨后的數(shù)據(jù)封包首先被傳送,并且使用重新安排的傳輸數(shù)據(jù)來繼續(xù)數(shù)據(jù)傳送。如圖4的右側(cè)所示,在裝置中,來自主機(jī)的數(shù)據(jù)封包連續(xù)地被接收(步驟
S410)。然后,判定是否發(fā)生一個(gè)預(yù)設(shè)錯(cuò)誤,例如由CRC錯(cuò)誤導(dǎo)致的同步丟失或者封包損壞(步驟S420 )。如果沒有所述錯(cuò)誤發(fā)生(在步驟S420中結(jié)果為否),流程返回到步驟S410以從主機(jī)連續(xù)地接收數(shù)據(jù)封包。如果發(fā)生一個(gè)預(yù)設(shè)錯(cuò)誤(在步驟S420中結(jié)果為是),緩沖單元被鎖定而執(zhí)行一個(gè)鎖定程序(步驟S430 ),從而停止從主機(jī)接收數(shù)據(jù)封包。所述鎖定程序可包含,舉例來說,清空裝置緩沖單元的步驟,重新設(shè)定QMU至初始狀態(tài)的步驟以及通過觸發(fā)一個(gè)中斷信號至主機(jī)來通知主機(jī)20預(yù)設(shè)錯(cuò)誤已發(fā)生的步驟。在鎖定程序被執(zhí)行以及已觸發(fā)中斷信號至主機(jī)后,判定鎖定的緩沖單元是否被解鎖(步驟S440 )。需注意的是當(dāng)接收到主機(jī)發(fā)送的解鎖命令時(shí),鎖定的緩沖單元(例如先進(jìn)先出緩沖器)可被解鎖。如果緩沖單元依然被鎖定,即主機(jī)還沒有發(fā)出解鎖命令(步驟S440結(jié)果為否),緩沖單元保持鎖定直到主機(jī)發(fā)出解鎖命令以解鎖鎖定的緩沖單元。如果鎖定的裝置緩沖單元被解鎖,即接收到從主機(jī)發(fā)出的解鎖命令(步驟S440的結(jié)果為是),則代表主機(jī)已獲知發(fā)生了預(yù)設(shè)錯(cuò)誤并且主機(jī)正準(zhǔn)備從數(shù)據(jù)封包出錯(cuò)點(diǎn)開始重新傳送后續(xù)的數(shù)據(jù)封包。因此,流程回到步驟S410,以繼續(xù)接收具有在上一個(gè)接收到的數(shù)據(jù)封包的序列編號之后的序列編號的數(shù)據(jù)封包。主機(jī)可依據(jù)獲得的序列編碼來準(zhǔn)備接下來的傳輸數(shù)據(jù)以重新傳送數(shù)據(jù)封包,其中首先傳送的數(shù)據(jù)封包以 一個(gè)封包頭開始,以使裝置接收封包頭并且剖析封包頭以分配凄史據(jù)封包至相應(yīng)的緩沖隊(duì)列。
圖5A至5D是依據(jù)本發(fā)明的總線數(shù)據(jù)傳送的方法的實(shí)施方式的簡要示意圖。如圖5A所示,假設(shè)在傳送第一傳輸數(shù)據(jù)Tl時(shí),由于CRC錯(cuò)誤(總線錯(cuò)誤)導(dǎo)致同步丟失/數(shù)據(jù)封包損壞發(fā)生。由于主機(jī)可異步傳送傳輸數(shù)據(jù),即使在傳送第一傳輸數(shù)據(jù)Tl中同步丟失/封包損壞發(fā)生,由于傳輸數(shù)據(jù)已經(jīng)在主機(jī)(例如總線驅(qū)動(dòng)器)中排序并且等待主機(jī)(例如主機(jī)驅(qū)動(dòng)器)來傳送,主機(jī)不能停止傳送后續(xù)的兩個(gè)傳輸數(shù)據(jù)T2與T3至裝置。如圖5B所示,當(dāng)裝置中的錯(cuò)誤檢測器
10判定預(yù)設(shè)錯(cuò)誤(例如總線錯(cuò)誤)發(fā)生時(shí),緩沖單元(例如裝置先進(jìn)先出緩沖器)
被鎖定以阻止任何的后續(xù)數(shù)據(jù)進(jìn)入緩沖單元。然后,緩沖單元被清空,QMU被重
新設(shè)定到初始狀態(tài),并且用以指示發(fā)生預(yù)設(shè)錯(cuò)誤的中斷信號被觸發(fā)至主機(jī)以通
知主機(jī)。如圖5C所示,如上所述,在接收到主機(jī)發(fā)出的解鎖命令之前,即使在傳送第一傳輸數(shù)據(jù)Tl中發(fā)生同步丟失/封包損壞,主機(jī)不能夠停止后續(xù)的兩個(gè)傳輸數(shù)據(jù),從而后續(xù)的兩個(gè)傳輸數(shù)據(jù)T2與T3 ^^然被傳送至裝置。然而,由于緩沖單元被鎖定,被傳送的傳輸數(shù)據(jù)不能夠進(jìn)入緩沖單元。如圖5D所示,在觸發(fā)中斷信號至主機(jī)從而主機(jī)獲知預(yù)設(shè)錯(cuò)誤(例如同步丟失/封包損壞)已發(fā)生后,主機(jī)發(fā)出解鎖命令以指示誤差檢測器解鎖被鎖定的緩沖單元,發(fā)出請求命令至QMU36以獲得上一個(gè)接收到的數(shù)據(jù)封包的序列編號,并且依據(jù)獲得的序列編號來準(zhǔn)備下一個(gè)傳輸數(shù)據(jù)以重新傳送后續(xù)的數(shù)據(jù)封包,其中首先重新傳送的傳輸數(shù)據(jù)的數(shù)據(jù)封包以一封包頭開始。須注意的是,后續(xù)重新傳送的數(shù)據(jù)封包可依據(jù)獲得的序列編號來選擇。舉例來說,后續(xù)重新傳送的數(shù)據(jù)封包可從具有獲得的序列編號后續(xù)的序列編號的數(shù)據(jù)封包開始,或者從具有獲得的序列編號的數(shù)據(jù)封包之后的另 一數(shù)據(jù)封包開始。
在另一實(shí)施方式中,預(yù)設(shè)錯(cuò)誤可為由主機(jī)驅(qū)動(dòng)器導(dǎo)致的軟件錯(cuò)誤,例如傳送至裝置的數(shù)據(jù)封包的總體數(shù)量超過緩沖隊(duì)列所提供的數(shù)據(jù)緩沖器的總體數(shù)量。當(dāng)預(yù)設(shè)錯(cuò)誤為軟件錯(cuò)誤時(shí),裝置也可鎖定緩沖單元并觸發(fā)中斷信號來通知主機(jī)。在其它實(shí)施方式中,預(yù)設(shè)錯(cuò)誤可為主機(jī)發(fā)出的特定命令用以中止當(dāng)前數(shù)據(jù)封包傳送,例如在安全數(shù)字輸入/輸出總線標(biāo)準(zhǔn)所使用的中止命令。相似地,當(dāng)接收到預(yù)設(shè)錯(cuò)誤(例如特定命令)時(shí),裝置也可鎖定緩沖單元并觸發(fā)中斷信號來通知主機(jī)。在兩種情況下,主機(jī)可在接收到中斷信號時(shí),決定是否重新傳送后續(xù)的數(shù)據(jù)封包并且使用如上所述的方法來解鎖緩沖單元以在主機(jī)與裝置之間繼續(xù)數(shù)據(jù)傳送。
在一些其它實(shí)施方式中,錯(cuò)誤檢測器32可設(shè)置在緩沖單元34中或者與緩沖單元34平行。當(dāng)錯(cuò)誤檢測器32在緩沖單元34中時(shí),數(shù)據(jù)封包由緩沖單元34接收。 一旦錯(cuò)誤檢測器32檢測到預(yù)設(shè)錯(cuò)誤發(fā)生,設(shè)置在緩沖單元34中的錯(cuò)誤檢測器32可產(chǎn)生鎖定命令來鎖定緩沖單元34以阻止接收數(shù)據(jù)封包,并且緩沖單元34依據(jù)鎖定命令被清空。當(dāng)錯(cuò)誤檢測器32與緩沖單元34平行時(shí),緩沖單元34與錯(cuò)誤檢測器32同時(shí)地接收到數(shù)據(jù)封包,并且如果預(yù)設(shè)錯(cuò)誤發(fā)生,錯(cuò)誤檢測器32反饋鎖定命令給緩沖單元34。在另一實(shí)施方式中,錯(cuò)誤檢測器32可設(shè)置在緩沖單元34接收數(shù)據(jù)封包之后,并且錯(cuò)誤4全測器32從緩沖單元34接收數(shù)據(jù)封包以檢查是否預(yù)設(shè)錯(cuò)誤發(fā)生。如果預(yù)設(shè)錯(cuò)誤發(fā)生,錯(cuò)誤檢測器32向后發(fā)出鎖定命令至緩沖單元34,并且緩沖單元34被鎖定且清空。需注意的是,本發(fā)明的實(shí)施方式僅僅提供如何設(shè)置錯(cuò)誤檢測器32與緩沖單元34的舉例說明,這并不能成為本發(fā)明的限制。依據(jù)本發(fā)明所提供的方法,當(dāng)在數(shù)據(jù)傳送中發(fā)生預(yù)設(shè)錯(cuò)誤時(shí),緩沖單元可被鎖定以阻止后續(xù)的數(shù)據(jù)進(jìn)入。此外,本發(fā)明的鎖定機(jī)制可幫助裝置從錯(cuò)誤情況中快速恢復(fù),并且提供減少系統(tǒng)復(fù)雜度的有利之處。另外,主機(jī)可解鎖被鎖定的緩沖單元,以確保主機(jī)可與裝置再次同步,從而提供了一種基于重新傳送機(jī)制的串流模式(streaming mode),以在主機(jī)與裝置之間重新同步并且有效地重新傳送損壞的數(shù)據(jù)封包。
以上所述僅為本發(fā)明的較佳實(shí)施方式,凡依本發(fā)明權(quán)利要求所做的均等變化與修飾,皆應(yīng)屬本發(fā)明的涵蓋范圍。
權(quán)利要求
1.一種數(shù)據(jù)傳送方法,所述方法用于在主機(jī)與裝置之間經(jīng)由總線傳送數(shù)據(jù),所述方法包含從所述主機(jī)接收一列數(shù)據(jù)封包,并且存儲接收到的所述數(shù)據(jù)封包至所述裝置內(nèi)的緩沖單元;判定是否發(fā)生預(yù)設(shè)錯(cuò)誤;當(dāng)所述預(yù)設(shè)錯(cuò)誤發(fā)生時(shí),鎖定所述裝置的所述緩沖單元,以停止接收數(shù)據(jù)封包;以及依據(jù)來自所述主機(jī)的解鎖請求,解鎖所述裝置的所述緩沖單元,以繼續(xù)接收后續(xù)的數(shù)據(jù)封包。
2. 如權(quán)利要求1所述的數(shù)據(jù)傳送方法,其特征在于,鎖定所述裝置的所述緩 沖單元的步驟更包含_清空所述緩沖單元;重新設(shè)定隊(duì)列管理單元至初始狀態(tài);以及 觸發(fā)信號至所述主機(jī),以通知所述主機(jī)所述預(yù)設(shè)錯(cuò)誤已發(fā)生。
3. 如權(quán)利要求2所述的數(shù)據(jù)傳送方法,其特征在于,進(jìn)一步包含 在所述主機(jī)接收到所述信號后,接收用以獲得上一個(gè)接收到的數(shù)據(jù)封包的序列編號的請求;以及發(fā)送上一個(gè)接收到的數(shù)據(jù)封包的序列編號至所述主機(jī)。
4. 如權(quán)利要求3所述的數(shù)據(jù)傳送方法,其特征在于,所述繼續(xù)接收后續(xù)數(shù)據(jù) 封包的步驟進(jìn)一步包含判定所述裝置的所述緩沖單元是否被解鎖;以及當(dāng)所述裝置的所述緩沖單元被解鎖時(shí),繼續(xù)接收所述后續(xù)的數(shù)據(jù)封包并且 存儲接收到的數(shù)據(jù)封包至所述i爰沖單元,其中接收到的所述后續(xù)的lt據(jù)封包是依據(jù)所述上一個(gè)接收到的數(shù)據(jù)封包的 所述序列編號來選擇,并且首先接收到的所述后續(xù)數(shù)據(jù)封包以封包頭開始。
5. 如權(quán)利要求1所述的數(shù)據(jù)傳送方法,其特征在于,所述預(yù)設(shè)4對吳是所述主 機(jī)與所述裝置之間的同步丟失、由于封包頭出錯(cuò)導(dǎo)致的數(shù)據(jù)封包損壞或者是所 述主機(jī)產(chǎn)生的特定命令。
6. —種數(shù)據(jù)傳送系統(tǒng),包含 主機(jī),提供一列數(shù)據(jù)封包; 總線;以及裝置,經(jīng)由所述總線耦接到所述主機(jī),具有緩沖單元,并且所述裝置從所 述主機(jī)接收所述數(shù)據(jù)封包,以及存儲接收到的所述數(shù)據(jù)封包至所述緩沖單元, 決定是否發(fā)生預(yù)設(shè)錯(cuò)誤,當(dāng)所述預(yù)設(shè)錯(cuò)誤發(fā)生時(shí),鎖定所述裝置的所述緩沖單 元,以停止接收數(shù)據(jù)封包;以及依據(jù)來自所述主機(jī)的解鎖請求,解鎖所述裝置 的所述緩沖單元,以繼續(xù)接收后續(xù)的數(shù)據(jù)封包。
7. 如權(quán)利要求6所述的數(shù)據(jù)傳送系統(tǒng),其特征在于,所述主機(jī)發(fā)出所述解鎖 請求以解鎖所述緩沖單元,并且在接收到指示所述預(yù)設(shè)錯(cuò)誤發(fā)生的信號后,發(fā) 出請求以獲得上一個(gè)接收到的數(shù)據(jù)封包的序列編號。
8. 如權(quán)利要求7所述的數(shù)據(jù)傳送系統(tǒng),其特征在于,所述主機(jī)進(jìn)一步依據(jù)所 述上一個(gè)接收到的數(shù)據(jù)封包的所述序列編號來選擇重新傳送的所述后續(xù)的數(shù)據(jù) 封包,其中首先重新傳送的所述后續(xù)的凝:據(jù)封包以封包頭開始。
9. 如權(quán)利要求6所述的數(shù)據(jù)傳送系統(tǒng),其特征在于,所述緩沖單元是先進(jìn)先 出緩沖器。
10. 如權(quán)利要求6所述的數(shù)據(jù)傳送系統(tǒng),其特征在于,所述總線是安全數(shù)字 輸入/輸出總線或通用串行總線。
11. 如權(quán)利要求6所述的數(shù)據(jù)傳送系統(tǒng),其特征在于,所述預(yù)設(shè)4fi吳是所述 主機(jī)與所述裝置之間的同步丟失或者是由于封包頭出錯(cuò)而導(dǎo)致的數(shù)據(jù)封包損 壞。
12. —種數(shù)據(jù)傳送方法,所述方法用于在主機(jī)與裝置之間經(jīng)由總線傳送數(shù)據(jù), 所述方法包含傳送一列數(shù)據(jù)封包,每一所述數(shù)據(jù)封包包含封包頭;接收所述主機(jī)傳送的所述數(shù)據(jù)封包,并且存儲接收到的所述數(shù)據(jù)封包至所 述裝置內(nèi)的緩沖單元;判定是否發(fā)生預(yù)設(shè)錯(cuò)誤;當(dāng)所述預(yù)設(shè)錯(cuò)誤發(fā)生時(shí),鎖定所述裝置的所述緩沖單元,以停止接收所述 數(shù)據(jù)封包;判定是否接收到由所述裝置觸發(fā)用以通知發(fā)生所述預(yù)設(shè)錯(cuò)誤的信號; 發(fā)出解鎖請求至所述裝置,用以解鎖所述裝置的所述緩沖單元;以及繼續(xù)傳送后續(xù)的lt據(jù)封包至所述裝置。
13. 如權(quán)利要求12所述的數(shù)據(jù)傳送方法,其特征在于,重新傳送的所述后續(xù)數(shù)據(jù)封包是依據(jù)上一個(gè)接收到的數(shù)據(jù)封包的序列編號來選擇,其中首先重新傳 送的所述后續(xù)數(shù)據(jù)封包以封包頭開始。
14. 如權(quán)利要求12所述的數(shù)據(jù)傳送方法,其特征在于,鎖定所述裝置的所述 緩沖單元的步驟進(jìn)一步包含清空所述緩沖單元;重新i殳定隊(duì)列管理單元至初始狀態(tài);以及觸發(fā)所述信號至所述主機(jī),以通知所述主機(jī)所述預(yù)設(shè)錯(cuò)誤已發(fā)生。
15. —種數(shù)據(jù)傳送裝置,用于處理一異??偩€情況,所述裝置包含 緩沖單元,用以4婁收一列數(shù)據(jù)封包,并且存儲接收到的所述數(shù)據(jù)封包; 其中當(dāng)至少一個(gè)預(yù)設(shè)錯(cuò)誤發(fā)生時(shí),所述緩沖單元被鎖定,以停止接收所述數(shù)據(jù)封包;以及其中所述緩沖單元依據(jù)來自主機(jī)的解鎖命令而解鎖,以繼續(xù)接收后續(xù)數(shù)據(jù) 封包。
16. 如權(quán)利要求15所述的數(shù)據(jù)傳送裝置,其特征在于,所述裝置更包含4^吳 檢測器耦接至所述緩沖單元,用以判定所述預(yù)設(shè)錯(cuò)誤是否發(fā)生以及用以鎖定或 者解鎖所述緩沖單元。
17. 如權(quán)利要求16所述的用數(shù)據(jù)傳送裝置,其特征在于,所述裝置進(jìn)一步包含多個(gè)緩沖隊(duì)列;以及隊(duì)列管理單元,耦接至所述多個(gè)緩沖隊(duì)列,用以依據(jù)每一接收到的數(shù)據(jù)封 包的封包頭,剖析并且分配接收到的所述數(shù)據(jù)封包至相對應(yīng)的緩沖隊(duì)列。
18. 如權(quán)利要求17所述的數(shù)據(jù)傳送裝置,其特征在于,所述裝置在所述緩沖 單元被鎖定后更清空所述緩沖單元、重新設(shè)定所述隊(duì)列管理單元至初始狀態(tài)、 以及觸發(fā)一個(gè)信號至所述主機(jī),以通知所述主機(jī)所述預(yù)設(shè)錯(cuò)誤已發(fā)生。
19. 如權(quán)利要求18所述的數(shù)據(jù)傳送裝置,其特征在于,所述裝置更接收重新 傳送的所述后續(xù)數(shù)據(jù)封包,并且其中首先重新傳送的所述后續(xù)數(shù)據(jù)封包以封包 頭開始。
20. 如權(quán)利要求17所述的數(shù)據(jù)傳送裝置,其特征在于,所述裝置更包含寄存 器,耦接至所述隊(duì)列管理單元,用以在接收到的數(shù)據(jù)封包成功地傳遞到所述隊(duì) 列管理單元之后,存儲上一個(gè)接收到的數(shù)據(jù)封包的序列編碼。
全文摘要
本發(fā)明是關(guān)于一種數(shù)據(jù)傳送方法、裝置與系統(tǒng),所述方法在主機(jī)與裝置之間經(jīng)由總線傳送數(shù)據(jù),所述方法包含從主機(jī)接收一列數(shù)據(jù)封包,并且存儲接收到的數(shù)據(jù)封包至裝置內(nèi)的緩沖單元;判定是否發(fā)生一個(gè)預(yù)設(shè)錯(cuò)誤;當(dāng)預(yù)設(shè)錯(cuò)誤發(fā)生時(shí),鎖定裝置的緩沖單元,以停止接收數(shù)據(jù)封包;以及依據(jù)來自主機(jī)的解鎖請求,解鎖裝置的緩沖單元,以繼續(xù)接收后續(xù)的數(shù)據(jù)封包。本發(fā)明提供的數(shù)據(jù)傳送方法、裝置與系統(tǒng),可幫助裝置從錯(cuò)誤情況中快速恢復(fù),并且降低系統(tǒng)復(fù)雜度。
文檔編號G06F13/38GK101634977SQ20091015791
公開日2010年1月27日 申請日期2009年7月16日 優(yōu)先權(quán)日2008年7月21日
發(fā)明者劉晉泰, 林主民, 林建光, 王傳弘 申請人:聯(lián)發(fā)科技股份有限公司