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

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

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

Linux控制I2C/SMBus設(shè)備

CHANBAEK ? 來(lái)源:頭條號(hào)科G棧 ? 作者:頭條號(hào)科G棧 ? 2023-03-23 10:02 ? 次閱讀

平臺(tái):樹莓派 bcm2835 Raspberry Pi 3 Model B Rev 1.2

I2C是Philips開(kāi)發(fā)的一種兩線通信協(xié)議,常用于一些對(duì)速度要求不高的小型器件上。SMBus是系統(tǒng)管理總線,基于I2C協(xié)議,大部分情況下二者兼容。

這次使用mpu6050作為I2C外設(shè),學(xué)習(xí)Linux下I2C的應(yīng)用開(kāi)發(fā)。 樹莓派默認(rèn)I2C可能沒(méi)有打開(kāi),需要配置重啟,具體方法這里不贅述。最終會(huì)在/dev下生成i2c-1設(shè)備。

poYBAGQbsx-ABKsSAAA9S4ro0uE175.jpg

1、需要的頭文件

pYYBAGQbsx-Ab_0RAABkaCBl-ic116.jpg

2、打開(kāi)I2C設(shè)備

打開(kāi)設(shè)備文件與打開(kāi)普通文件沒(méi)有區(qū)別,使用open函數(shù)以讀寫的方式打開(kāi),返回值是該設(shè)備文件的文件描述符。

poYBAGQbsyCAXYbNAABMK-_Z830958.jpg

3、設(shè)置從設(shè)備的地址

每個(gè)I2C設(shè)備都有一個(gè)設(shè)備地址,使用ioctl函數(shù)設(shè)置這個(gè)地址。

pYYBAGQbsyGADe-bAABMf-2pB4w668.jpg

4、讀寫設(shè)備

到這里就可以讀寫設(shè)備了,Linux提供兩種方式。

a.使用write和read函數(shù)

poYBAGQbsyGAYdlFAACujYkU1BQ932.jpg

b.使用smbus提供的函數(shù)

pYYBAGQbsyKAQaunAAF6zsIlwMQ539.jpg

第一步的頭文件就是給這里提供支持的。使用這種方式需要安裝額外的庫(kù),網(wǎng)上說(shuō)需要安裝libi2c-dev,我沒(méi)驗(yàn)證,請(qǐng)知道的指點(diǎn)一二。我這里安裝了i2c-tools工具,并且下載了i2c-tools的源碼并編譯安裝過(guò),所以庫(kù)和頭文件都有了,現(xiàn)在也搞不清是哪一步操作安裝的了。

Linux官方文檔是推薦這種方式的,smbus提供了下面幾個(gè)函數(shù)。

poYBAGQbsySARwjlAAKhvI_5U4Q681.jpg

5、編譯

使用smbus編譯需要額外的參數(shù)-Llib和-li2c,否則提示找不到smbus提供的函數(shù)。我用了makefile方便編譯,當(dāng)然使用gcc直接編也可以。

pYYBAGQbsyWASt3uAAAqnvtq21A305.jpg

其他:

i2c相關(guān)的頭文件在/usr/include/linux下

pYYBAGQbsyaAObZyAABZIkPIcAw552.jpg

smbus相關(guān)的頭文件在/usr/local/include/i2c下

poYBAGQbsyeAZprZAABWAIDgczA716.jpg

tips:學(xué)習(xí)如何使用Linux最好的資料應(yīng)該是Documentation,至少?gòu)膕pi和i2c的應(yīng)用開(kāi)發(fā)角度看是這樣,再結(jié)合man手冊(cè),很多問(wèn)題都能解決。網(wǎng)上搜索的東西太亂太雜,作為輔助手段還行。

聲明:本文內(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)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11161

    瀏覽量

    208460
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2848

    瀏覽量

    87839
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1468

    瀏覽量

    122773
  • SMBus
    +關(guān)注

    關(guān)注

    0

    文章

    114

    瀏覽量

    21975
  • 樹莓派
    +關(guān)注

    關(guān)注

    116

    文章

    1683

    瀏覽量

    105389
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    I2CSMBus之間的技術(shù)差異

    所制訂的先進(jìn)組態(tài)與電源管理接口(AdvancedConfiguration& Power Interface;ACPI)規(guī)范中成為基礎(chǔ)的管理訊息傳遞接口、控制傳遞接口。 雖然I2CSMBus
    發(fā)表于 11-21 19:49

    如何使I2C主機(jī)成為SMBus主機(jī)?

    你好,我正在努力使I2C成為SMBUS的主人。我面臨以下問(wèn)題1。SMBus奴隸的刪除插入使得S I2C接口被卡住。-原因-在ISR I2C
    發(fā)表于 09-19 07:57

    SMBusI2C有什么差別?

    系統(tǒng)管理總線(SMBus)是一個(gè)兩線接口。通過(guò)它,各設(shè)備之間以及設(shè)備與系統(tǒng)的其他部分之間可以互相通信。它基于I2C操作原理。SMBus為系統(tǒng)
    發(fā)表于 03-20 09:01

    基于嵌入式Linux演示I2C設(shè)備調(diào)試

      I2C是嵌入式設(shè)備最為常用的接口之一,常用于如下面這些應(yīng)用場(chǎng)景,因此本文就基于嵌入式Linux演示在User Space進(jìn)行I2C設(shè)備調(diào)
    發(fā)表于 09-18 15:21 ?3次下載

    Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解》第15章、LinuxI2C核心、總線與設(shè)備驅(qū)動(dòng)

    Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解》第15章、LinuxI2C核心、總線與設(shè)備驅(qū)動(dòng)
    發(fā)表于 10-27 11:19 ?8次下載
    《<b class='flag-5'>Linux</b><b class='flag-5'>設(shè)備</b>驅(qū)動(dòng)開(kāi)發(fā)詳解》第15章、<b class='flag-5'>Linux</b>的<b class='flag-5'>I2C</b>核心、總線與<b class='flag-5'>設(shè)備</b>驅(qū)動(dòng)

    MSP430硬件I2C如何實(shí)現(xiàn)SMBus

    該應(yīng)用報(bào)告描述了使用MSP430硬件I2C外圍設(shè)備實(shí)現(xiàn)系統(tǒng)管理總線(SMBus)。
    發(fā)表于 05-08 09:34 ?18次下載
    MSP430硬件<b class='flag-5'>I2C</b>如何實(shí)現(xiàn)<b class='flag-5'>SMBus</b>

    基于嵌入式Linux下的I2C設(shè)備驅(qū)動(dòng)的總體思路與框架設(shè)計(jì)

    由于I2C總線的通用性,Linux作為一款優(yōu)秀的嵌入式操作系統(tǒng),也必須要對(duì)其要有很好的支持。在Linux內(nèi)核源碼中對(duì)I2C總線的驅(qū)動(dòng)是基于總線設(shè)備
    發(fā)表于 08-20 09:04 ?3701次閱讀
    基于嵌入式<b class='flag-5'>Linux</b>下的<b class='flag-5'>I2C</b><b class='flag-5'>設(shè)備</b>驅(qū)動(dòng)的總體思路與框架設(shè)計(jì)

    linux自帶i2c工具使用

    I2C總線被全球超過(guò)50個(gè)公司的1000+個(gè)ICs所使用,已然是一個(gè)世界標(biāo)準(zhǔn).另外,I2C總線與多種不同的控制總線是兼容的,比如SMBus(系統(tǒng)管理總線),PMBus(電源管理總線),
    發(fā)表于 05-13 09:23 ?3947次閱讀

    LinuxI2C驅(qū)動(dòng)架構(gòu)

    1.???? LinuxI2C驅(qū)動(dòng)架構(gòu)LinuxI2C總線的驅(qū)動(dòng)分為兩個(gè)部分,總線驅(qū)動(dòng)(BUS)和設(shè)備驅(qū)動(dòng)(DEVICE
    發(fā)表于 04-02 14:38 ?643次閱讀

    I2C/SMBus地址轉(zhuǎn)換器

    I2C/SMBus地址轉(zhuǎn)換器
    發(fā)表于 04-20 10:44 ?5次下載
    <b class='flag-5'>I2C</b>/<b class='flag-5'>SMBus</b>地址轉(zhuǎn)換器

    LTC4316:?jiǎn)?b class='flag-5'>I2C/SMBus地址轉(zhuǎn)換器數(shù)據(jù)表

    LTC4316:?jiǎn)?b class='flag-5'>I2C/SMBus地址轉(zhuǎn)換器數(shù)據(jù)表
    發(fā)表于 05-20 16:57 ?1次下載
    LTC4316:?jiǎn)?b class='flag-5'>I2C</b>/<b class='flag-5'>SMBus</b>地址轉(zhuǎn)換器數(shù)據(jù)表

    LTC1694-1:SMBus/I2C加速器數(shù)據(jù)表

    LTC1694-1:SMBus/I2C加速器數(shù)據(jù)表
    發(fā)表于 05-25 13:16 ?1次下載
    LTC1694-1:<b class='flag-5'>SMBus</b>/<b class='flag-5'>I2C</b>加速器數(shù)據(jù)表

    I2C通信協(xié)議:了解I2C Primer、 PMBus和SMBus

    I2C Primer的基本特性和標(biāo)準(zhǔn),并重點(diǎn)說(shuō)明在通信實(shí)現(xiàn)過(guò)程中如何正確使用該協(xié)議。從I2C的基本原理出發(fā),我們將介紹其變體子集——系統(tǒng)管理總線(SMBus)和電源管理總線(PMBus)——的可用性及二者的區(qū)別。這三種協(xié)議各有專
    的頭像 發(fā)表于 06-15 15:29 ?5068次閱讀
    <b class='flag-5'>I2C</b>通信協(xié)議:了解<b class='flag-5'>I2C</b> Primer、 PMBus和<b class='flag-5'>SMBus</b>

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

    控制器驅(qū)動(dòng) I2C 總線驅(qū)動(dòng)重點(diǎn)是 I2C 適配器驅(qū)動(dòng),這里要用到兩個(gè)重要的數(shù)據(jù)結(jié)構(gòu):i2c_adapter 和 i2c_algorithm
    的頭像 發(fā)表于 07-22 15:38 ?1324次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>控制</b>器驅(qū)動(dòng)介紹

    I2C子系統(tǒng)SW Architecture

    適配器(控制器)驅(qū)動(dòng),這里用到兩個(gè)重要的數(shù)據(jù)結(jié)構(gòu):i2c_adapter 和 i2c_algorithm。其中,Linux 內(nèi)核將 SOC 的 I
    的頭像 發(fā)表于 07-22 16:01 ?861次閱讀
    <b class='flag-5'>I2C</b>子系統(tǒng)SW Architecture