linux内核的I2C子系统详解1——I2C总线概览、驱动框架概览
生活随笔
收集整理的這篇文章主要介紹了
linux内核的I2C子系统详解1——I2C总线概览、驱动框架概览
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以下內容源于朱有鵬《物聯網大講堂》課程的學習,如有侵權,請告知刪除。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
1、I2C總線匯總概覽
(1)三根通信線:SCL、SDA、GND;
(2)同步、串行、電平、低速(幾百k)、近距離;
(3)總線式結構:支持多個設備掛接在同一條總線上
(4)主從式結構:通信雙方必須一個為主(master)一個為從(slave),主設備掌握每次通信的主動權,從設備按照主設備的節奏被動響應。
- 每個從設備在總線中有唯一的地址(slave address),主設備通過從地址找到自己要通信的從設備(本質是廣播)。
(5)I2C主要用途就是主SoC和外圍設備之間的通信,最大優勢是支持在總線上擴展多個外圍設備。
- 常見的各種物聯網傳感器芯片(如gsensor、溫度、濕度、光強度、酸堿度、煙霧濃度、壓力等)均使用I2C接口和主SoC進行連接。
(6)電容觸摸屏芯片的多個引腳構成2個接口。http://blog.csdn.net/oqqhutu12345678/article/details/65445338
- 一個接口是I2C的,負責和主SoC連接(本身作為從設備)。主SoC通過該接口初始化及控制電容觸摸屏芯片,而芯片通過該接口向SoC匯報觸摸事件的信息(觸摸坐標等),我們使用電容觸摸屏時重點關注的是這個接口;
- 另一個接口是電容觸摸板的管理接口,電容觸摸屏芯片通過該接口來控制觸摸板硬件。該接口是電容觸摸屏公司關心的,他們的觸摸屏芯片內部固件編程要處理這部分,我們使用電容觸摸屏的人并不關心這里。
2、linux內核的I2C驅動框架總覽
(1)I2C驅動框架的主要目標
- 讓驅動開發者可以在內核中方便的添加自己的I2C設備的驅動程序,從而可以更容易的在linux下驅動自己的I2C接口硬件。
(2)源碼中I2C相關的驅動均位于:drivers/i2c目錄下。
(3)linux系統提供2種I2C驅動實現方法。
- 第一種叫i2c-dev,對應drivers/i2c/i2c-dev.c。
- 這種方法只是封裝了主機(I2C master,一般是SoC中內置的I2C控制器)的I2C基本操作,并且向應用層提供相應的操作接口,應用層代碼需要自己去實現對slave的控制和操作,所以這種I2C驅動相當于只是提供給應用層可以訪問slave硬件設備的接口,本身并未對硬件做任何操作,應用需要實現對硬件的操作,因此寫應用的人必須對硬件非常了解,其實相當于傳統的驅動中干的活兒丟給應用去做了,所以這種I2C驅動又叫做“應用層驅動”。
- 這種方式并不主流,它的優勢是把差異化都放在應用中,這樣在設備比較難纏(尤其是slave是非標準I2C時)時不用修改驅動,而只需要修改應用就可以實現對各種設備的驅動。這種驅動在驅動層很簡單(就是i2c-dev.c),我們就不分析了。
- 第二種I2C驅動是所有的代碼都放在驅動層實現,直接向應用層提供最終結果。應用層甚至不需要知道這里面有I2C存在,譬如電容式觸摸屏驅動,直接向應用層提供/dev/input/event1的操作接口,應用層編程的人根本不知道event1中涉及到了I2C。這種是我們后續分析的重點。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的linux内核的I2C子系统详解1——I2C总线概览、驱动框架概览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 月圆之夜,更新了一下1024客户端【强烈
- 下一篇: 【昊鼎王五】Windows的Git客户端