日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

驅(qū)動(dòng)之路#43:一文理清I2C子系統(tǒng)架構(gòu)

BSP調(diào)試從0到1 ? 來(lái)源:嵌入式分享 ? 作者:嵌入式分享 ? 2026-06-10 16:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前面幾篇文章,我們已經(jīng)簡(jiǎn)單聊過(guò) I2C 通信機(jī)制、I2C 為什么要上拉,以及 I2C 和 SMBus 的關(guān)系。

到這里,如果只是理解 I2C 協(xié)議本身,基本已經(jīng)夠入門了。

但真正進(jìn)入 Linux 驅(qū)動(dòng)開(kāi)發(fā)時(shí),又會(huì)遇到一個(gè)新問(wèn)題:

Linux 內(nèi)核里的 I2C 子系統(tǒng)到底是怎么組織的?

比如我們經(jīng)常會(huì)看到這些東西:

/dev/i2c-2i2c_transfer()i2c_smbus_read_byte_data()structi2c_clientstructi2c_driverstructi2c_adapterdrivers/i2c/busses/i2c-rk3x.cdrivers/i2c/i2c-dev.c

剛開(kāi)始看時(shí),確實(shí)容易一頭霧水。

這些東西到底誰(shuí)管誰(shuí)?
應(yīng)用層怎么訪問(wèn) I2C?
設(shè)備驅(qū)動(dòng)怎么和設(shè)備樹(shù)匹配?
最后又是誰(shuí)真正去控制 SDA / SCL 產(chǎn)生時(shí)序?

這篇文章就以 RK3576 平臺(tái)為例,從整體架構(gòu)角度,先把 Linux I2C 子系統(tǒng)的大框架捋一遍。

不追求一上來(lái)逐行啃源碼,先建立索引。后面真正看驅(qū)動(dòng)時(shí),知道每一層大概在干什么,就不會(huì)迷路。

1. 先說(shuō)結(jié)論

Linux I2C 子系統(tǒng)可以簡(jiǎn)單理解成四層:

wKgZPGon6f6AOA3NAAAtuE5_krA271.png

如果從一次訪問(wèn)鏈路來(lái)看,大概就是:

APP/ i2ctoolsi2c-dev.c 或具體 I2C 設(shè)備驅(qū)動(dòng)i2c-coreI2C 控制器驅(qū)動(dòng)RK3576 I2C 控制器SDA / SCL外設(shè)

數(shù)據(jù)返回時(shí),再沿著這條鏈路反向返回。

所以 Linux I2C 子系統(tǒng)的核心設(shè)計(jì)思想,其實(shí)就是一句話:

把“控制器硬件操作”和“外設(shè)功能邏輯”拆開(kāi),讓不同平臺(tái)、不同設(shè)備都能復(fù)用同一套框架。

這也是 Linux 驅(qū)動(dòng)子系統(tǒng)非常典型的設(shè)計(jì)方式。

2. 第1層:I2C 控制器驅(qū)動(dòng)層

先從最底層說(shuō)起。

I2C 控制器驅(qū)動(dòng)層,負(fù)責(zé)對(duì)接芯片內(nèi)部真實(shí)存在的 I2C 控制器。

以 RK3576 為例,SoC 內(nèi)部會(huì)有多路 I2C 控制器,比如 I2C0、I2C1、I2C2 等。

這些控制器最終負(fù)責(zé)控制 SDA / SCL,在總線上產(chǎn)生 Start、Stop、ACK、地址、數(shù)據(jù)等時(shí)序。

RK 平臺(tái)相關(guān)驅(qū)動(dòng)路徑一般類似:

kernel-6.1/drivers/i2c/busses/i2c-rk3x.c
wKgZPGon6f6AaDO4AAG9PpqkuCU375.png

這一層可以理解成:

I2C子系統(tǒng)和 RK3576 I2C 硬件之間的“翻譯官”。上層只會(huì)告訴它:我要給 0x38 這個(gè)設(shè)備發(fā)一段數(shù)據(jù);我要從 0x5d 這個(gè)設(shè)備讀幾個(gè)字節(jié);我要完成一組 i2c_msg 傳輸。

而控制器驅(qū)動(dòng)要做的,就是把這些抽象請(qǐng)求,轉(zhuǎn)換成硬件寄存器操作,最終在 SDA / SCL 上產(chǎn)生真實(shí)波形。

這一層主要負(fù)責(zé):

[ ]初始化 I2C 控制器;[ ]配置時(shí)鐘和通信速率;[ ]處理中斷或 DMA;[ ]實(shí)現(xiàn) master_xfer 傳輸函數(shù);[ ]處理 ACK 失敗、超時(shí)、仲裁丟失等異常;[ ]操作硬件寄存器產(chǎn)生 I2C 總線時(shí)序。

比如在 RK3576 上,最終真正和硬件寄存器打交道的,就是這一層。

3. 第2層:I2C 核心層 i2c-core

控制器驅(qū)動(dòng)之上,就是 I2C 子系統(tǒng)的核心層。

源碼路徑一般在:

kernel-6.1/drivers/i2c/i2c-core.ckernel-6.1/drivers/i2c/i2c-core-base.c

這一層可以理解為 I2C 子系統(tǒng)的“調(diào)度中心”。

它不直接關(guān)心你下面是 RK3576、全志 T527、STM32,還是其他平臺(tái)。

它關(guān)心的是:

系統(tǒng)里有哪些 I2C 控制器?有哪些 I2C 設(shè)備?有哪些 I2C 驅(qū)動(dòng)?設(shè)備和驅(qū)動(dòng)怎么匹配?上層要傳輸數(shù)據(jù)時(shí),應(yīng)該調(diào)用哪個(gè)控制器?

所以 i2c-core 的作用非常關(guān)鍵。

它向上提供統(tǒng)一接口,向下調(diào)用具體控制器驅(qū)動(dòng)。

常見(jiàn)接口包括:

i2c_transfer()i2c_smbus_xfer()i2c_master_send()i2c_master_recv()

對(duì)于設(shè)備驅(qū)動(dòng)來(lái)說(shuō),不需要知道底層 I2C 控制器寄存器怎么配置,只需要調(diào)用這些通用接口即可。

比如:

ret= i2c_transfer(client->adapter, msgs, num);

至于這個(gè)adapter最后對(duì)應(yīng) RK3576 的哪個(gè) I2C 控制器,就由 i2c-core 和控制器驅(qū)動(dòng)去處理。


4. I2C 子系統(tǒng)里的三個(gè)關(guān)鍵結(jié)構(gòu)體

看 I2C 子系統(tǒng),繞不開(kāi)三個(gè)結(jié)構(gòu)體。它們就是整個(gè)框架的骨架。

(1)struct i2c_adapter

i2c_adapter表示一個(gè) I2C 控制器。

比如 RK3576 的 I2C2 控制器,在內(nèi)核里就會(huì)注冊(cè)成一個(gè)i2c_adapter。

可以簡(jiǎn)單理解為:

一個(gè) i2c_adapter = 一條 I2C 總線 / 一個(gè) I2C 控制器

它里面會(huì)包含:

控制器編號(hào);控制器名稱;支持的功能;傳輸函數(shù);所屬設(shè)備信息。

最關(guān)鍵的是傳輸函數(shù),比如master_xfer。

上層最終調(diào)用i2c_transfer()時(shí),最后會(huì)走到這個(gè) adapter 對(duì)應(yīng)的master_xfer,再進(jìn)入具體平臺(tái)的控制器驅(qū)動(dòng)。

所以,i2c_adapter代表的是“誰(shuí)來(lái)發(fā)起 I2C 傳輸”。

(2)struct i2c_client

i2c_client表示一個(gè) I2C 從設(shè)備。

比如 I2C2 總線上掛了一個(gè)地址為0x5d的 GT911 觸摸芯片,那么這個(gè) GT911 在內(nèi)核里就會(huì)對(duì)應(yīng)一個(gè)i2c_client。

可以簡(jiǎn)單理解為:

一個(gè) i2c_client = 一個(gè)掛在 I2C 總線上的外設(shè)

它里面通常包含:

設(shè)備地址;所屬 i2c_adapter;設(shè)備名稱;設(shè)備節(jié)點(diǎn)信息;驅(qū)動(dòng)私有數(shù)據(jù)。

驅(qū)動(dòng)里經(jīng)常會(huì)看到:

staticintxxx_probe(structi2c_client *client)

這個(gè)client就代表當(dāng)前匹配到的 I2C 設(shè)備。

驅(qū)動(dòng)后續(xù)讀寫寄存器時(shí),也通常是通過(guò)這個(gè)client找到設(shè)備地址和所屬 adapter。

(3)struct i2c_driver

i2c_driver表示一個(gè) I2C 設(shè)備驅(qū)動(dòng)。

比如 GT911 觸摸驅(qū)動(dòng)、RTC 驅(qū)動(dòng)、溫度傳感器驅(qū)動(dòng),都可以注冊(cè)為一個(gè)i2c_driver。

它里面通常包含:

probe 函數(shù);remove函數(shù);設(shè)備匹配表;驅(qū)動(dòng)名稱;電源管理回調(diào)。

當(dāng)設(shè)備和驅(qū)動(dòng)匹配成功后,內(nèi)核就會(huì)調(diào)用驅(qū)動(dòng)的probe()函數(shù)。

所以這三個(gè)結(jié)構(gòu)體可以這樣理解:

i2c_adapter:代表 I2C 控制器i2c_client :代表 I2C 外設(shè)i2c_driver :代表 I2C 外設(shè)驅(qū)動(dòng)

這三個(gè)概念搞清楚,I2C 子系統(tǒng)的大框架基本就立起來(lái)了。

5. 第三層:I2C 設(shè)備驅(qū)動(dòng)層

設(shè)備驅(qū)動(dòng)層,就是針對(duì)具體 I2C 外設(shè)寫的驅(qū)動(dòng)。

比如:

觸摸芯片驅(qū)動(dòng):gt911RTC 驅(qū)動(dòng):rtc-pcf8563.c濕度傳感器驅(qū)動(dòng):aht20電源管理芯片驅(qū)動(dòng):pmic

這一層的職責(zé)不是直接控制 SDA / SCL,而是實(shí)現(xiàn)具體設(shè)備功能。

比如一個(gè)觸摸驅(qū)動(dòng),它關(guān)心的是:

怎么讀取觸摸坐標(biāo);怎么初始化芯片;怎么處理中斷;怎么上報(bào)input事件;怎么管理電源。

它不需要關(guān)心 RK3576 的 I2C 控制器寄存器怎么配置。

它只需要通過(guò) i2c-core 提供的接口訪問(wèn)設(shè)備寄存器,比如:

i2c_smbus_read_byte_data()i2c_smbus_write_byte_data()i2c_transfer()

這樣帶來(lái)的好處很明顯:

同一個(gè) I2C 外設(shè)驅(qū)動(dòng),可以盡量復(fù)用在不同 SoC 平臺(tái)上。

比如某個(gè) I2C 觸摸芯片驅(qū)動(dòng),在 RK 平臺(tái)能用,在其他 ARM 平臺(tái)上也可能能用。只要底層 I2C 控制器驅(qū)動(dòng)正常,設(shè)備樹(shù)配置正確,上層設(shè)備驅(qū)動(dòng)通常不用關(guān)心底層硬件差異。

這就是 Linux 子系統(tǒng)分層帶來(lái)的好處。

6. 第四層:用戶空間接口層 i2c-dev

除了寫內(nèi)核設(shè)備驅(qū)動(dòng),Linux 還提供了一個(gè)用戶空間訪問(wèn) I2C 的方式。

對(duì)應(yīng)文件是:

kernel-6.1/drivers/i2c/i2c-dev.c

這個(gè)文件實(shí)現(xiàn)了一個(gè)字符設(shè)備驅(qū)動(dòng),會(huì)為每個(gè) I2C adapter 創(chuàng)建對(duì)應(yīng)的設(shè)備節(jié)點(diǎn)

/dev/i2c-0/dev/i2c-1/dev/i2c-2...

比如 RK3576 的 I2C2,用戶空間可能就能看到:

/dev/i2c-2

有了這個(gè)節(jié)點(diǎn),用戶空間程序或者 i2c-tools 就可以直接訪問(wèn) I2C 總線。

常用工具包括:

i2cdetecti2cgeti2cseti2cdump

比如掃描 I2C2 總線:

i2cdetect-y2

讀取某個(gè)設(shè)備寄存器:

i2cget-y20x380x00

這里的調(diào)用鏈路大概是:

i2cget/dev/i2c-2i2c-dev.ci2c-corei2c-rk3x.cRK3576 I2C2 控制器I2C 外設(shè)

所以i2c-dev.c的作用可以理解為:

給用戶空間開(kāi)了一個(gè)訪問(wèn) I2C 總線的調(diào)試入口。

它非常適合調(diào)試階段驗(yàn)證硬件。

比如我們想確認(rèn)設(shè)備地址對(duì)不對(duì)、外設(shè)有沒(méi)有 ACK、某個(gè)寄存器能不能讀到,就可以先用 i2c-tools 測(cè)一下。

但如果是正式產(chǎn)品中的復(fù)雜設(shè)備功能,通常還是建議寫內(nèi)核驅(qū)動(dòng),而不是長(zhǎng)期依賴用戶空間直接操作 I2C。


7. 設(shè)備和驅(qū)動(dòng)是怎么匹配的?

理解 I2C 子系統(tǒng),除了看數(shù)據(jù)傳輸,還要理解設(shè)備和驅(qū)動(dòng)怎么綁定。

在設(shè)備樹(shù)里,我們可能會(huì)這樣寫:

wKgZPGon6f6Afj_zAAFdHHu5ldo295.png

這里表示:

AHT20掛在 I2C2 總線上;設(shè)備地址是 0x38;compatible 是"aosong,aht20"。

內(nèi)核啟動(dòng)時(shí),會(huì)解析設(shè)備樹(shù),在 I2C2 這個(gè) adapter 下創(chuàng)建一個(gè)對(duì)應(yīng)的i2c_client

如果內(nèi)核中有一個(gè) I2C 驅(qū)動(dòng)的匹配表里包含:

{ .compatible="aosong,aht20"}

那么設(shè)備和驅(qū)動(dòng)就能匹配成功,隨后調(diào)用驅(qū)動(dòng)的probe()函數(shù)。

簡(jiǎn)化流程如下:

設(shè)備樹(shù)描述 I2C 外設(shè)內(nèi)核創(chuàng)建 i2c_clientI2C 驅(qū)動(dòng)注冊(cè) i2c_driveri2c-core 完成匹配調(diào)用驅(qū)動(dòng) probe()驅(qū)動(dòng)初始化外設(shè)

這就是 Linux “總線-設(shè)備-驅(qū)動(dòng)”模型在 I2C 子系統(tǒng)里的體現(xiàn)。

8. 一次完整讀取鏈路

下面以 RK3576 通過(guò) I2C2 讀取 AHT20 溫濕度傳感器為例,簡(jiǎn)單看一次完整鏈路。

假設(shè)用戶空間執(zhí)行:

i2cget-y20x380x00

大致流程如下:

1.用戶空間執(zhí)行 i2cget;2.i2cget 打開(kāi) /dev/i2c-2;3.通過(guò) ioctl 設(shè)置從設(shè)備地址 0x38;4.通過(guò) read/write 或 I2C_RDWR 發(fā)起訪問(wèn);5. i2c-dev.c 接收用戶請(qǐng)求;6. i2c-dev.c 調(diào)用 i2c-core 的傳輸接口;7. i2c-core 封裝 i2c_msg,調(diào)用 i2c_transfer;8. i2c_transfer 找到 I2C2 對(duì)應(yīng)的 i2c_adapter;9. 調(diào)用 adapter 的 master_xfer;10.進(jìn)入 RK 平臺(tái) i2c-rk3x.c;11.rk3x_i2c_xfer 操作硬件寄存器;12.RK3576 I2C2 控制器在 SDA/SCL 上產(chǎn)生時(shí)序;13.AHT20 返回?cái)?shù)據(jù);14.數(shù)據(jù)沿原路徑返回給 i2cget。

這條鏈路看起來(lái)長(zhǎng),但理解之后就很清晰。

一句話總結(jié)就是:

用戶層負(fù)責(zé)發(fā)起請(qǐng)求,i2c-dev 負(fù)責(zé)接入用戶空間,i2c-core 負(fù)責(zé)調(diào)度,控制器驅(qū)動(dòng)負(fù)責(zé)干硬件活,外設(shè)負(fù)責(zé)響應(yīng)數(shù)據(jù)。

9. 總結(jié)

Linux I2C 子系統(tǒng)看起來(lái)復(fù)雜,但拆開(kāi)后其實(shí)就是幾層分工。

i2c_adapter:代表 I2C 控制器;i2c_client :代表 I2C 外設(shè);i2c_driver :代表 I2C 設(shè)備驅(qū)動(dòng);i2c-core  :負(fù)責(zé)把它們組織起來(lái);i2c-dev  :負(fù)責(zé)給用戶空間提供調(diào)試入口。

剛開(kāi)始學(xué)習(xí)時(shí),不建議直接扎進(jìn)源碼里逐行看。

更建議先建立這條主線:

設(shè)備樹(shù)描述外設(shè)內(nèi)核創(chuàng)建 i2c_client驅(qū)動(dòng)注冊(cè) i2c_driveri2c-core 完成匹配并調(diào)用 probe設(shè)備驅(qū)動(dòng)調(diào)用 i2c_transfer / smbus API控制器驅(qū)動(dòng) master_xfer 產(chǎn)生硬件時(shí)序

理解了這條線,再去看i2c-rk3x.c、i2c-core-base.ci2c-dev.c,就不會(huì)像剛開(kāi)始那樣滿屏函數(shù)亂飛了。

當(dāng)然,本文只是先建立 I2C 子系統(tǒng)的整體認(rèn)知,具體源碼細(xì)節(jié)后面再慢慢拆。

(完)

下期可以繼續(xù)聊:硬件 I2C 和軟件 I2C 誰(shuí)更坑?


本人專注Linux 嵌入式全棧開(kāi)發(fā),有項(xiàng)目合作 / 技術(shù)支持 / 交個(gè)朋友,歡迎后臺(tái)私信。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1570

    瀏覽量

    132200
  • I2C協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    9375
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux內(nèi)核中I2C系統(tǒng)的設(shè)計(jì)思路

    [ 導(dǎo)讀] 本文通過(guò)閱讀內(nèi)核代碼,來(lái)梳理I2C子系統(tǒng)的整體視圖。在開(kāi)發(fā)I2C設(shè)備驅(qū)動(dòng)程序時(shí),往往缺乏對(duì)于
    發(fā)表于 09-06 09:40 ?1409次閱讀
    Linux內(nèi)核中<b class='flag-5'>I2C</b><b class='flag-5'>系統(tǒng)</b>的設(shè)計(jì)思路

    linux I2C子系統(tǒng)的相關(guān)資料分享

    文章目錄linux I2C子系統(tǒng)框架在設(shè)備樹(shù)中添加從設(shè)備信息,mpu5060I2C driver 程序的編寫mpu6050 I2C程序具體實(shí)現(xiàn)linux
    發(fā)表于 02-10 06:06

    需要了解Linux驅(qū)動(dòng)子系統(tǒng)I2C

    I2C總線驅(qū)動(dòng)I2C適配器的軟件實(shí)現(xiàn),提供I2C適配器與從設(shè)備間完成數(shù)據(jù)通信的能力,比如起始,停止,應(yīng)答信號(hào)和master_xfer的實(shí)現(xiàn)函數(shù)。
    發(fā)表于 05-07 10:58 ?1560次閱讀

    Linux的I2C驅(qū)動(dòng)架構(gòu)

    1.???? Linux的I2C驅(qū)動(dòng)架構(gòu)Linux中I2C總線的驅(qū)動(dòng)分為兩個(gè)部分,總線驅(qū)
    發(fā)表于 04-02 14:38 ?1067次閱讀

    Linux驅(qū)動(dòng)中的I2C驅(qū)動(dòng)架構(gòu)詳細(xì)分析

    其實(shí)I2C接口非常的簡(jiǎn)單,即使用51單片機(jī)的gpio來(lái)模擬I2C,編寫個(gè)e2prom或者其他I2C接口的
    發(fā)表于 08-01 17:35 ?3次下載
    Linux<b class='flag-5'>驅(qū)動(dòng)</b>中的<b class='flag-5'>I2C</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>架構(gòu)</b>詳細(xì)分析

    Linux內(nèi)核中I2C子系統(tǒng)的整體視圖

    本文通過(guò)閱讀內(nèi)核代碼,來(lái)梳理I2C子系統(tǒng)的整體視圖。在開(kāi)發(fā)I2C設(shè)備驅(qū)動(dòng)程序時(shí),往往缺乏對(duì)于系統(tǒng)
    的頭像 發(fā)表于 12-31 10:40 ?3230次閱讀
    Linux內(nèi)核中<b class='flag-5'>I2C</b><b class='flag-5'>子系統(tǒng)</b>的整體視圖

    文理清EMI的傳播過(guò)程資料下載

    電子發(fā)燒友網(wǎng)為你提供文理清EMI的傳播過(guò)程資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-04 08:52 ?5次下載
    <b class='flag-5'>一</b><b class='flag-5'>文理清</b>EMI的傳播過(guò)程資料下載

    linux I2C子系統(tǒng)(及相關(guān)程序設(shè)計(jì)MPU6050)

    文章目錄linux I2C子系統(tǒng)框架在設(shè)備樹(shù)中添加從設(shè)備信息,mpu5060I2C driver 程序的編寫mpu6050 I2C程序具體實(shí)現(xiàn)linux
    發(fā)表于 12-06 13:36 ?9次下載
    linux <b class='flag-5'>I2C</b><b class='flag-5'>子系統(tǒng)</b>(及相關(guān)程序設(shè)計(jì)MPU6050)

    嵌入式內(nèi)核及驅(qū)動(dòng)開(kāi)發(fā)-09IIC子系統(tǒng)框架使用(I2C協(xié)議和時(shí)序,I2C驅(qū)動(dòng)框架,I2C從設(shè)備驅(qū)動(dòng)開(kāi)發(fā),MPU6050硬件連接

    文章目錄I2c協(xié)議和時(shí)序I2c介紹I2c硬件連接I2c總線的信號(hào)I2c總線寫時(shí)序I2c總線讀時(shí)序
    發(fā)表于 12-06 14:06 ?17次下載
    嵌入式內(nèi)核及<b class='flag-5'>驅(qū)動(dòng)</b>開(kāi)發(fā)-09IIC<b class='flag-5'>子系統(tǒng)</b>框架使用(<b class='flag-5'>I2C</b>協(xié)議和時(shí)序,<b class='flag-5'>I2C</b><b class='flag-5'>驅(qū)動(dòng)</b>框架,<b class='flag-5'>I2C</b>從設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>開(kāi)發(fā),MPU6050硬件連接

    硬件I2C與模擬I2C

    硬件I2C對(duì)應(yīng)芯片上的I2C外設(shè),有相應(yīng)I2C驅(qū)動(dòng)電路,其所使用的I2C管腳也是專用的,因而效率要遠(yuǎn)高于軟件模擬的
    發(fā)表于 12-28 19:14 ?83次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    Linux I2C驅(qū)動(dòng)入門知識(shí)科普

    I2C 總線驅(qū)動(dòng), I2C總線驅(qū)動(dòng)就是SOC的 I2C控制器驅(qū)動(dòng),也叫做
    的頭像 發(fā)表于 12-29 13:59 ?2987次閱讀

    I2C控制器驅(qū)動(dòng)介紹

    (控制器)抽象成 i2c_adapter。 對(duì)于個(gè) I2C 適配器,肯定要對(duì)外提供讀寫 API 函數(shù),設(shè)備驅(qū)動(dòng)程序可以使用這些 API 函數(shù)來(lái)完成讀寫操作。
    的頭像 發(fā)表于 07-22 15:38 ?3697次閱讀
    <b class='flag-5'>I2C</b>控制器<b class='flag-5'>驅(qū)動(dòng)</b>介紹

    I2C子系統(tǒng)SW Architecture

    I2C SW Architecture 【driver 驅(qū)動(dòng)層】由普通驅(qū)動(dòng)工程師負(fù)責(zé),【i2c 核心層】由 Linux 提供,【i2c 核心
    的頭像 發(fā)表于 07-22 16:01 ?1970次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>子系統(tǒng)</b>SW Architecture

    I2C子系統(tǒng)幾個(gè)主要的結(jié)構(gòu)體

    I2C Data Structure 我們要搞懂個(gè) Linux 子系統(tǒng),必須研究它的數(shù)據(jù)結(jié)構(gòu),搞懂每個(gè)結(jié)構(gòu)體存儲(chǔ)了什么東西,才能梳理清楚該子系統(tǒng)
    的頭像 發(fā)表于 07-22 16:04 ?1984次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>子系統(tǒng)</b>幾個(gè)主要的結(jié)構(gòu)體

    I2C轉(zhuǎn)UART子系統(tǒng)設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《I2C轉(zhuǎn)UART子系統(tǒng)設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 08-28 10:27 ?3次下載
    <b class='flag-5'>I2C</b>轉(zhuǎn)UART<b class='flag-5'>子系統(tǒng)</b>設(shè)計(jì)
    渑池县| 吐鲁番市| 施秉县| 什邡市| 通渭县| 峨眉山市| 高青县| 唐河县| 江孜县| 翁源县| 延川县| 叙永县| 赤峰市| 永济市| 乌拉特后旗| 漳平市| 通道| 托里县| 卢湾区| 弋阳县| 师宗县| 阿城市| 吐鲁番市| 齐齐哈尔市| 镇原县| 沽源县| 永泰县| 禹城市| 敦化市| 烟台市| 嘉峪关市| 荥阳市| 克拉玛依市| 浠水县| 文化| 盖州市| 乐安县| 吉林省| 峡江县| 江永县| 连州市|