核心驅動程式 ds2490

支援的晶片

  • 基於 Maxim DS2490

作者:Evgeniy Polyakov <johnpol@2ka.mipt.ru>

描述

Maxim/Dallas Semiconductor DS2490 是一款晶片,可用於構建 USB <-> W1 網橋。

DS9490(R) 是一種 USB <-> W1 匯流排主裝置,它包含 0x81 系列 ID 整合晶片和 DS2490 低階操作晶片。

注意事項和限制。

  • 弱上拉電流最小為 0.9mA,最大為 6.0mA。

  • 支援 5V 強上拉,最小電流為 5.9mA,最大電流為 30.4 mA。(摘自 DS2490.pdf)

  • 硬體將在下一次匯流排(復位?)操作時檢測到裝置連線到匯流排,但只會列印一條訊息,因為核心 w1 程式碼未使用該資訊。連線一個裝置通常會產生多個新裝置通知。

  • 如果將 w1_reset_send 新增到 API 中,可以減少 USB 匯流排事務的數量。該名稱僅為建議。它將把寫入緩衝區和讀取緩衝區(以及大小)作為引數。ds2490 塊 I/O 命令支援復位、寫入緩衝區、讀取緩衝區和強上拉,所有這些都在一個命令中完成,而不是當前的 1 個復位匯流排、2 個寫入匹配 ROM 命令和從裝置 ROM ID、3 個塊寫入和讀取資料。寫入緩衝區需要將匹配 ROM 命令和從裝置 ROM ID 新增到請求的寫入緩衝區的前面,這兩者都是驅動程式已知的。

  • 硬體支援正常、靈活和超速匯流排通訊速度,但目前只支援正常速度。

  • 已註冊的 w1_bus_master 函式沒有定義錯誤條件。如果在匯流排搜尋過程中移除了 ds2490,它可能會在匯流排搜尋完成之前產生大量的錯誤輸出。

  • 硬體支援檢測一些錯誤情況,例如短路、復位時異常存在以及復位時無存在,但驅動程式沒有查詢這些值。

  • ds2490 規範沒有詳細說明短批次輸入讀取,但我的觀察是,如果請求的位元組數少於可用位元組數,批次讀取將返回錯誤,並且硬體將清除整個批次輸入緩衝區。可以透過讀取最大緩衝區大小來避免此錯誤情況,緩衝區中多餘的位元組僅是驅動程式中的邏輯錯誤。程式碼應匹配讀寫以及資料大小。讀寫是序列化的,並且在執行讀取之前,狀態會驗證晶片是否空閒(並且資料可用),因此不應該發生這種情況。

  • 在 x86_64 2.6.22-rc6 上執行 qemu 0.9.0,使用 OHCI 控制器,並載入 x86_64 2.6.24 UHCI 時,ds2490 在客戶機中執行。在 qemu 連線 ds2490 硬體後,模組首次載入時會正常執行,但如果模組被解除安裝然後重新載入,大多數情況下批次輸出或輸入中的一個(通常是批次輸入)會失敗。qemu 設定了 50ms 的超時,即使狀態顯示資料可用,批次輸入也會超時。批次輸出寫入會顯示成功完成,但 ds2490 狀態暫存器會顯示寫入了 0 位元組。將 qemu 從 ds2490 硬體分離並重新連線會解決此問題。客戶機和主機中的 usbmon 輸出沒有解釋此問題。我猜測是 qemu 或主機作業系統中的一個錯誤,更有可能是主機作業系統的問題。

2008-03-06 David Fries <David@Fries.net>