2013-07-30 15 views
2

我正在研究一個新的USB設備,並試圖瞭解如何跟蹤/管理數據切換。網絡上存在衝突的信息,但大多數觀點/經驗是,設備在枚舉後不會更改其數據切換,但某些安裝程序傳輸除外。請澄清當USB設備重置或更改它的數據切換

這似乎與我對規格的閱讀有衝突。

關於批量傳輸USB2.0規範第8.5.2節「主機始終使用配置事件將總線傳輸的第一個事務初始化爲DATA0 PID,第二個事務使用DATA1 PID,並且連續的數據傳輸交替對於剩餘的批量轉移。「

我沒有得到的東西(也許我誤解了它)是似乎沒有這樣的東西作爲批量傳輸,至少在協議的這個級別沒有;只有批量交易 - > IN/OUT-DATA0/1-HANDSHAKE ...如果是,數據切換何時根據8.5.2切換?

更進一步,在8.5.3節中它說:「SETUP總是使用DATA0 PID作爲SETUP事務的數據字段。」

並且在同一節中進一步指出:「狀態階段通過前一階段數據流方向的變化來描述,並始終使用DATA1 PID。」

現在,假設我回應中開始

SETUPTOKEN安裝程序轉移| DATA0 |握手,

那麼交易的一大堆開始

IN | DATA1 |握手結束在狀態階段之前使用IN | DATA1 | HANDSHAKE。

在這一點上,我希望我的數據切換爲0(發送DATA1和receivng的ACK我切換1在接下來的分組DATA0的預期切換到0後......我知道,我應該期待狀態階段,但我試圖表明這一點)。

現在的狀態階段之際,根據USB 2.0規範

OUT | DATA1 |但我的數據切換爲0.

但如果我從不干涉切換,我會被卡住因爲我不得不忽略DATA1而不迴應,並且主機必須一遍又一遍地重新發送。

因此,我必須通過忽略切換不匹配,發送ACK,並保持切換爲0(即假裝我的數據切換符合Data1並翻轉它以預期下一次非SETUP傳輸/事務?

如果我按照我讀過的意見,就沒有解決,但該設備返回攤位。

在這個問題上的一些幫助,將不勝感激,所以先感謝。

編輯:

也許我應該改寫這個問題 - 我誤解了8.5.2節,他們只是指任何控制轉移而不是「公交轉移」?任何人都可以確認主控操作系統(如果有的話)在控制傳輸的重置階段強制執行Data1事務,而不管其中的哪個數據包類型(Data0或Data1)在前一個事務中使用?

回答

1

批量端點的數據切換會切換該端點上的每個批量事務。如圖8-35所示。 8.5.2節只涉及批量交易,而不是控制轉移。數據切換隻會針對特殊事件重新初始化。

控制傳輸的數據切換規則不同,因爲控制傳輸的最後一個事務(傳輸由多個事務組成)將始終將其數據切換設置爲1.這最好見圖8-37 。