我正在研究一個新的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)在前一個事務中使用?