Linux核心驅動基礎 裝置樹相關匯流排使用

2021-08-29 04:05:24 字數 2897 閱讀 8842

broken-cd  表示沒有熱插拔探測引腳,使用輪詢檢測

cd-gpios  使用gpio管腳作為熱插拔探測引腳

non-removable  表示不能進行熱插拔,裝置一直連線(比如emmc)

上面三個選項用於指定熱插拔探測選項,如果三個選項都沒有指定,則使用主機自帶的熱插拔引腳sdcd

bus-width  資料匯流排位寬,預設值是<1>,也可以是<4>,<8>

wp-gpios 使用gpio管腳作為寫保護引腳

max-frequency  表示mmc匯流排最大操作頻率

cd-inverted  表示cd引腳是active high

wp-inverted  表示wp引腳是active high

no-1-8-v  該選項存在的話,表示該匯流排控制器不支援1.8v裝置卡

(即使該控制器硬體支援1.8v裝置卡)

cap-power-off-card   關閉該卡電源很安全

cap-sdio-irq         使能sdio匯流排 irq

full-pwr-cycle       支援裝置卡的整個電源週期

cap-sd-highspeed    支援sd high-speed時序

cap-mmc-highspeed  支援mmc high-speed時序

sd-uhs-sdr12        支援sd uhs sdr12 speed

sd-uhs-sdr25        支援sd uhs sdr25 speed

sd-uhs-sdr50        支援sd uhs sdr50 speed

sd-uhs-sdr104       支援sd uhs sdr104 speed

sd-uhs-ddr12        支援sd uhs ddr12 speed

mmc-ddr-1_8v       支援emmc high-speed ddr(1.8v)

mmc-ddr-1_2v       支援emmc high-speed ddr(1.2v)

mmc-hs200-1_8v     支援emmc hs200 mode

mmc-hs200-1_2v     支援emmc hs200 mode

mmc-hs400-1_8v     支援emmc hs400 mode

mmc-hs400-1_2v     支援emmc hs400 mode

keep-power-in-suspend 表示待機時不掉電

enable-sdio-wakeup    sdio中斷發生時允許喚醒主機系統

mmc-pwrseq  指定電源上電順序

dsr  表示卡的dsr暫存器的值[從0x00 … 0xffff]

vmmc-supply  指向regulator裝置樹節點

mmc控制器存在子節點時,必須指定下面兩個選項

#address-cells   值必須是1

#size-cells   值必須是0

mmc子節點屬性

reg  該值必須是0~7,其中0表示sd卡,1~7表示sdio裝置

比如sdio介面的wifi晶元

上面有兩個圖,都是用來定義mmc控制器節點屬性

第乙個圖描述mmc控制器的不變屬性,比如mmc控制器的暫存器位址,中斷,dma通道,一般定義在.dtsi檔案中

第二個圖描述mmc控制器的可變屬性及其子節點屬性,比如mmc控制器的引腳復用情況,匯流排位寬,一般定義在.dts檔案中

注意:一般在公用的.dtsi檔案中,新增不變屬性(比如reg屬性,中斷,dma通道),在具體板卡的 .dts檔案中新增可變屬性(比如gpio使用情況,引腳復用情況),以及子結點資訊,這樣使得.dtsi檔案和.dts檔案解耦

status  表示使能該匯流排控制器,enable或者disable

clock-frequency  設定i2c匯流排頻率,一般為400khz或者100khz

i2c控制器節點存在子節點時,該控制器節點必須指定下面兩個選項

#address-cells  值必須是1

#size-cells  值必須是0

由於i2c子節點屬性比較簡單,因此不進行任何講解

上面有兩個圖,都是用來定義i2c控制器節點屬性

第乙個描述i2c控制器的不變屬性,比如i2c控制器的暫存器位址,中斷,一般定義在.dtsi檔案中

第二個描述子節點屬性,一般定義在.dts檔案中

status  表示使能該匯流排控制器,enable或者disable

cs-gpios  使用gpio管腳作為片選訊號

num-cs  表示片選訊號數量,包括原生片選訊號和gpio片選訊號

比如:cs-gpios = <0>  <0>  

num-cs = <3>

上述spi控制器片選訊號的對映關係如下圖所示

spi控制器節點存在子節點時,該控制器節點必須指定下面兩個選項

#address-cells  值必須是1

#size-cells  值必須是0

spi子節點屬性

spi-max-frequency  設定spi匯流排頻率

spi-cs-high  表示spi子裝置片選訊號為高電平

spi-tx-bus-width  設定spi控制器輸出匯流排位寬,預設為1(僅有一根資料線作為mosi),qspi(quad)匯流排位寬為4,spi-tx-bus-width = <4>

spi-rx-bus-width  設定spi控制器輸入匯流排位寬,預設為1(僅有一根資料線作為miso),qspi(quad)匯流排位寬為4,spi-rx-bus-width = <4>

上圖為spi控制器節點及其子節點屬性:

網路phy晶元ks8995m使用cs0片選訊號,spi匯流排頻率為1mhz

音訊晶元tlv320aic26使用cs1片選訊號,spi匯流排頻率為100khz

linux裝置樹(裝置驅動)

一 裝置樹的簡單概念 裝置樹 由一系列的節點,屬性組成,節點本身包含子節點 屬性 成對出現的名稱和值 裝置樹可描述的資訊 原先大多數被編碼在核心中 它是電路板上cpu,匯流排,裝置組成的樹,bootloader會將這棵樹傳遞給核心,並根據它展開linux核心中的platform device等裝置。...

Linux核心裝置驅動註冊

platform device與platform driver 引入devicetree後改變 platform device會由kernel自動展開,呼叫of platform bus probe null,of bus ids,null 即可自動展開所有的platform device 引入de...

Linux裝置驅動 核心開發

linux裝置驅動需要使用核心api來實現,一般被包含在linux核心原始碼樹中。驅動可以編譯到核心,隨著核心一起在系統啟動的時候被載入。也可以編譯成核心模組,在系統執行起來之後動態地載入到核心中,使得除錯的時候無需重新編譯核心,也無需重啟系統,很大程度上方便了驅動 的除錯。但並不是只有裝置驅動才能...