核心驅動 w1-uart

作者:Christoph Winklhofer <cj.winklhofer@gmail.com>

描述

UART 1-Wire 匯流排驅動。該驅動利用序列裝置匯流排(Serial Device Bus)的 UART 介面,按照文件 “使用 UART 實現 1-Wire 匯流排主裝置” 中描述的方式,生成 1-Wire 時序模式。

簡而言之,UART 外設必須支援全雙工並以開漏模式執行。時序模式由波特率和傳輸位元組的特定組合生成,這對應於 1-Wire 讀位、寫位或復位脈衝。

例如,1-Wire 復位和存在檢測的時序模式使用 9600 波特率,即每位 104.2 微秒。透過 UART 傳輸位元組 0xf0(最低有效位在前,起始位為低)將 1-Wire 的復位低電平時間設定為 521 微秒。一個存在的 1-Wire 裝置會透過將線路拉低來改變接收到的位元組,驅動程式利用這一點來評估 1-Wire 操作的結果。

類似地,1-Wire 讀位或寫位使用 115200 波特率,即每位 8.7 微秒。傳輸位元組 0x80 用於寫 0 操作(低電平時間 69.6 微秒),位元組 0xff 用於讀 0、讀 1 和寫 1 操作(低電平時間 8.7 微秒)。

復位和存在檢測的預設波特率為 9600,而 1-Wire 讀寫操作的預設波特率為 115200。如果實際波特率與請求的波特率不同,則會調整傳輸的位元組以生成 1-Wire 時序模式。

用法

在裝置樹中指定 UART 1-Wire 匯流排,透過將單個子節點 onewire 新增到序列節點(例如 uart0)來完成。例如

@uart0 {
  ...
  onewire {
    compatible = "w1-uart";
  };
};