I2C SPI USB驅動架構模擬

2021-08-30 15:47:01 字數 1207 閱讀 1793

根據圖12.4, linux傾向於將主機端的驅動與外設端的驅動分離,而通過乙個核心層將某種匯流排的協議進行抽象,外設端的驅動呼叫核心層api間接過渡到對主機驅動傳輸函式的呼叫。對於i2c、 spi這類不具備熱插拔能力的匯流排而言,一般在arch/arm/mach-***或者arch/arm/boot/dts中會有相應的板級描述資訊,描述外設與主機的連線情況。linux的各個子系統都呈現為相同的特點,表17.1模擬了

i2c、 spi、 usb驅動架構,其他的pci等都是類似的。

表17.1 i2c、 spi、 usb驅動架構的模擬

對於usb、 pci等匯流排而言,由於它們具備熱插拔能力,所以實際上不存在類似i2c、 spi這樣的板級描述資訊。換句話說,即便是有這類資訊,其實也沒有什麼用,因為如果寫了板子上有個u盤,但實際上沒有,其實反而是製造了麻煩;相反,如果沒有寫, u盤一旦插入, linux usb子系統會自動探測到乙個u盤。

同時我們注意到, i2c、 spi、 usb控制器雖然給別人提供了匯流排,但是其實自己也是由它自身依附的匯流排列舉出來的。比如,對於soc而言,這些控制器一般是直接整合在晶元內部,通過記憶體訪問指令來訪問的,因此它們自身是通過platform_driver、 platform_device這種模型列舉進來的

i2c控制器所在驅動的platform_driver與arch/arm/mach-***中的platform_device(或者裝置樹中的節點)通過platform匯流排的match()函式匹配導致platform_driver.probe()執行,從而完成i2c控制器的註冊;而i2c上面掛的觸控螢幕依附的i2c_driver與arch/arm/mach-***中的i2c_board_info指向的裝置(或者裝置樹中的節點)通過i2c匯流排的match()函式匹配導致i2c_driver.probe()執行,從而使觸控螢幕展開。

圖17.1虛線上方部分是i2c_adapater眼裡的linux世界;下方部分是i2c_client眼裡的linux世界。其實, linux中的每乙個裝置通過它依附的匯流排被列舉出來,儘管它自身可能給別人提供匯流排。

I2C匯流排架構 之 裝置驅動

i2c裝置驅動是i2c框架中最接近應用層的,其上接應用層,下接i2c核心。也是驅動開發人員需要實現的 在此驅動中我們只需負責以下步驟 以ap3216c為例 a.新增硬體資訊 裝置樹 b.搭建驅動框架 c.構建i2c driver,並註冊到linux d.註冊字元裝置 e.向應用層提供i2c裝置操作介...

Linux 下I2C 驅動架構全面分析

i2c只有兩條線,一條序列資料線sda,一條是時鐘線scl。使用scl sda這兩根資料線就實現了裝置之間的資料互動。i2c匯流排廣泛用於eeprom,實時時鐘rtc,小型lcd等裝置與cpu的介面中。linux 的iic分3個部分組成 i2c核心 i2c核心提供了匯流排驅動,裝置驅動的註冊 登出方...

i2c裝置驅動

1,i2c 裝置註冊 static struct i2c board info i2c2 devices i2c裝置一般在板級 中註冊 static void msm8916 add i2c deivces void 2,i2c驅動註冊 include static const struct i2c...