日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)不再提示

基于 RT-Thread 的軟 I2C:比你想象的更簡(jiǎn)單

RT-Thread官方賬號(hào) ? 2026-05-19 22:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、前言

先楫 MCU 提供了多達(dá) 8 路硬件 I2C 接口,功能非常完善。但在實(shí)際項(xiàng)目中,由于引腳資源緊張引腳復(fù)用沖突,硬件 I2C 并不總是一個(gè)最優(yōu)選擇。

另一方面,I2C 在很多場(chǎng)景下僅用于初始化配置低頻讀寫,對(duì)性能和帶寬的要求并不高。

在這種情況下,使用 GPIO 模擬 I2C(即軟 I2C)就顯得非常有價(jià)值:

既能節(jié)省寶貴的硬件資源,又能滿足功能需求,還能提升系統(tǒng)的靈活性。

本文將基RT-Thread框架,結(jié)合hpmicro BSP,以HPM6750EVK2開發(fā)板為例,介紹如何為先楫 MCU 實(shí)現(xiàn)一個(gè)靈活、可擴(kuò)展、易于使用的軟 I2C 驅(qū)動(dòng),并以AT24C02 EEPROM為實(shí)例展示其應(yīng)用方式。


以往的先楫RT-Thread文章可以參考這個(gè)文章系列

《先楫RT-Thread開發(fā)系列文章》


二、從驅(qū)動(dòng)層看實(shí)現(xiàn)細(xì)節(jié)

(一)板級(jí)定義模擬I2C的IO引腳

先楫的 RT-Thread BSP 已經(jīng)完成了PIN 設(shè)備驅(qū)動(dòng)的對(duì)接,這為軟 I2C 的實(shí)現(xiàn)提供了良好的基礎(chǔ)。

為了提升配置的可讀性和可維護(hù)性,在板級(jí)配置(如 Kconfig)中,推薦使用字符串形式的引腳名來定義 SDA 和 SCL,例如:

SDA:PZ11SCL:PZ10

在驅(qū)動(dòng)內(nèi)部,可以通過rt_pin_get()接口,將字符串形式的引腳名轉(zhuǎn)換為 RT-Thread 使用的實(shí)際 IO 索引號(hào)(即先楫 MCU 的 IO 編號(hào)),后續(xù)所有 GPIO 操作都基于該索引完成。

這種方式相比直接使用數(shù)字引腳編號(hào),有明顯優(yōu)勢(shì):

1、可讀性更強(qiáng)例如PD21能直觀反映出這是 D 組的第 21 個(gè)引腳。

2、可移植性更好不同平臺(tái)的引腳編號(hào)規(guī)則不同,字符串形式可以屏蔽底層差異。

3、更不容易出錯(cuò)避免手工填寫數(shù)字編號(hào)時(shí)常見的 off-by-one 錯(cuò)誤。

2f5599ec-538b-11f1-ab55-92fbcf53809c.png2f66d644-538b-11f1-ab55-92fbcf53809c.png

在驅(qū)動(dòng)中,無論是設(shè)置 SDA 電平,還是讀取 SCL 狀態(tài),最終都會(huì)通過rt_pin_get()獲取 IO 索引,再調(diào)用 RT-Thread 的 PIN 接口完成操作。

2f7c6f9a-538b-11f1-ab55-92fbcf53809c.png


(二)I2C 的位級(jí)操作

I2C 是一種典型的串行通信協(xié)議,通過SCL(時(shí)鐘線)SDA(數(shù)據(jù)線)兩根信號(hào)線完成通信。

軟 I2C 的本質(zhì),就是用 GPIO 的高低電平變化來模擬這兩根信號(hào)線的時(shí)序。

從驅(qū)動(dòng)角度來看,只需要實(shí)現(xiàn)以下四個(gè)最基礎(chǔ)的位級(jí)操作

1、設(shè)置 SCL 為高 / 低電平

2、設(shè)置 SDA 為高 / 低電平

3、讀取 SCL 電平

4、讀取 SDA 電平

這四個(gè)操作是軟 I2C 的最底層能力,所有更復(fù)雜的行為——如起始信號(hào)、停止信號(hào)、位傳輸、字節(jié)收發(fā)、ACK/NACK 判斷——都可以在此基礎(chǔ)上構(gòu)建。

RT-Thread 已經(jīng)提供了成熟的I2C 位操作框架(i2c_bit_ops)。

驅(qū)動(dòng)只需實(shí)現(xiàn)上述四個(gè)接口,并將其注冊(cè)到 RT-Thread 的 I2C 框架中,協(xié)議層細(xì)節(jié)將完全由 RT-Thread 負(fù)責(zé)處理,極大地降低了驅(qū)動(dòng)開發(fā)難度。

3018685a-538b-11f1-ab55-92fbcf53809c.png

(三)驅(qū)動(dòng)初始化的流程

驅(qū)動(dòng)初始化函數(shù)會(huì)遍歷所有配置的 I2C 設(shè)備,對(duì)每一個(gè)設(shè)備做以下工作:

1、根據(jù)配置結(jié)構(gòu)體創(chuàng)建驅(qū)動(dòng)對(duì)象

2、設(shè)置驅(qū)動(dòng)對(duì)象的操作函數(shù)指針(指向上面提到的四個(gè)基本操作)

3、將驅(qū)動(dòng)對(duì)象注冊(cè)到 RT-Thread I2C 框架,這樣應(yīng)用層就可以通過 rt_device_find() 找到它

4、進(jìn)行總線恢復(fù)(防止 I2C 總線被卡住)

5、輸出初始化日志供調(diào)試

初始化完成后,應(yīng)用層就可以把軟 I2C 當(dāng)作一個(gè)普通的 RT-Thread I2C 設(shè)備來使用了

3024aaf2-538b-11f1-ab55-92fbcf53809c.png

三、另一種實(shí)現(xiàn)方式說明

如果系統(tǒng)已經(jīng)啟用了 RT-Thread 的 PIN 設(shè)備框架,也可以直接使能 RT-Thread 自帶的RT_USING_SOFT_I2C組件。

這種方式下,軟 I2C 的核心邏輯由 RT-Thread 提供,開發(fā)者只需要在配置中填寫 SDA 和 SCL 對(duì)應(yīng)的引腳編號(hào)

需要注意的是,這里的引腳編號(hào)需要根據(jù)先楫 MCU 的 IO 索引規(guī)則手動(dòng)填寫,相比字符串方式在可讀性上略遜一籌。

3030cbb6-538b-11f1-ab55-92fbcf53809c.png

四、應(yīng)用層開發(fā)——以 AT24C02 為例

HPM6750EVK2 開發(fā)板上自帶了一顆AT24C02 EEPROM,非常適合作為軟 I2C 的驗(yàn)證對(duì)象。

在驅(qū)動(dòng)加載完成后,可以通過 msh 查看系統(tǒng)設(shè)備列表,確認(rèn)對(duì)應(yīng)的軟 I2C 總線(如 soft_i2c0)已經(jīng)成功注冊(cè)。

303dfeda-538b-11f1-ab55-92fbcf53809c.png

在應(yīng)用層中,只需通過rt_device_find()獲取該 I2C 設(shè)備句柄,后續(xù)的 EEPROM 讀寫操作即可完全復(fù)用 RT-Thread 提供的標(biāo)準(zhǔn) I2C 接口。

308a86b0-538b-11f1-ab55-92fbcf53809c.png

例如,在寫入 EEPROM 時(shí),直接使用 I2C 發(fā)送接口即可;

隨后再讀取相同地址的數(shù)據(jù),驗(yàn)證寫入內(nèi)容是否一致。

31094414-538b-11f1-ab55-92fbcf53809c.png

從實(shí)際測(cè)試結(jié)果來看,軟 I2C 在約 300 kHz 的通信速率下工作穩(wěn)定,邏輯分析儀抓取的波形也符合 I2C 時(shí)序要求,完全滿足 AT24C02 這類低速外設(shè)的應(yīng)用需求。

31697190-538b-11f1-ab55-92fbcf53809c.png31d4d106-538b-11f1-ab55-92fbcf53809c.png31ddca18-538b-11f1-ab55-92fbcf53809c.png

五、總結(jié)

嵌入式系統(tǒng)中,引腳資源緊張與外設(shè)需求多樣化幾乎是常態(tài)。

即便 MCU 提供了豐富的硬件外設(shè),合理引入軟實(shí)現(xiàn)方案,依然是提升系統(tǒng)靈活性的重要手段。


本文結(jié)合先楫 MCU 與 RT-Thread 框架,完整展示了一種工程化的軟 I2C 實(shí)現(xiàn)思路。


通過配置驅(qū)動(dòng)、分層設(shè)計(jì)以及對(duì) RT-Thread 現(xiàn)有能力的充分利用,使軟 I2C 在系統(tǒng)中具備了與硬件 I2C 一致的使用體驗(yàn)。

實(shí)踐表明,只要設(shè)計(jì)得當(dāng),軟 I2C 在穩(wěn)定性和時(shí)序精度上完全可以滿足常見外設(shè)的需求。


在硬件資源受限、I2C 使用頻率不高或?qū)σ_分配要求較高的場(chǎng)景下,軟 I2C 是一種值得優(yōu)先考慮的解決方案。


希望本文的實(shí)現(xiàn)思路和工程經(jīng)驗(yàn),能為你在后續(xù)項(xiàng)目中設(shè)計(jì)外設(shè)驅(qū)動(dòng)、優(yōu)化資源分配提供有價(jià)值的參考。

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

    關(guān)注

    147

    文章

    19225

    瀏覽量

    405092
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9632

    瀏覽量

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

    關(guān)注

    28

    文章

    1565

    瀏覽量

    131895
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1655

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    RT-Thread記錄(十八、SHT21與24C02軟件包)

    本文學(xué)習(xí)測(cè)試一下幾款典型設(shè)備的 RT-Thread I2C軟件包
    的頭像 發(fā)表于 07-08 11:07 ?5463次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(十八、SHT21與24<b class='flag-5'>C</b>02軟件包)

    【先楫HPM5361EVK開發(fā)板試用體驗(yàn)】RT-Thread I2C使用

    開發(fā)環(huán)境: IDE:RT-Thread Studio 2.2.7 開發(fā)板:HPM5300EVK HPM5300EVK有4路硬件I2C,當(dāng)然也可使用軟件I2C,對(duì)于應(yīng)用而言,軟件和硬件都是一樣的。 1
    發(fā)表于 12-25 23:57

    求教一個(gè)rt-thread開發(fā)i2c的問題

    關(guān)于rt-thread開發(fā)i2c的例程大多數(shù)都是類似于溫濕度傳感器。發(fā)送一個(gè)寫指令后,通過讀指令,獲取數(shù)值。想問一下,如果是接i2c轉(zhuǎn)電流芯片,只存在發(fā)數(shù)據(jù),這種應(yīng)該怎么做?
    發(fā)表于 05-19 10:26

    RT-Thread里面驅(qū)動(dòng)層的i2c能否用硬件方式實(shí)現(xiàn)呢?

    很好奇RT-Thread里面驅(qū)動(dòng)層的i2c實(shí)現(xiàn)為啥都是用的軟件模擬實(shí)現(xiàn)的,硬件i2c它不香嗎,有人做過硬件方式實(shí)現(xiàn)嗎?一起交流下
    發(fā)表于 04-15 09:41

    RT-ThreadI2C設(shè)備的驅(qū)動(dòng)框架對(duì)接如何實(shí)現(xiàn)

    。RT-Thread中引入了I2C設(shè)備的設(shè)備驅(qū)動(dòng)框架,該驅(qū)動(dòng)框架提供了基于芯片GPIO進(jìn)行模擬的和基于芯片片內(nèi)I2C外設(shè)實(shí)現(xiàn)的兩種底層硬件接口。因?yàn)椴煌盗行酒钠瑑?nèi)I2C外設(shè)使用會(huì)有
    發(fā)表于 05-19 17:11

    詳解RT-Thread I2C設(shè)備驅(qū)動(dòng)框架及相關(guān)函數(shù)

    摘要本應(yīng)用筆記以驅(qū)動(dòng) I2C 接口的 6 軸傳感器 MPU6050 為例,說明了如何使用 I2C 設(shè)備驅(qū)動(dòng)接口開發(fā)應(yīng)用程序,并詳細(xì)講解了 RT-Thread I2C 設(shè)備驅(qū)動(dòng)框架及相關(guān)
    發(fā)表于 10-25 12:02

    詳細(xì)講解RT-Thread I2C設(shè)備驅(qū)動(dòng)框架及相關(guān)函數(shù)

    本應(yīng)用筆記以驅(qū)動(dòng)I2C接口的6軸傳感器MPU6050為例,說明了如何使用I2C設(shè)備驅(qū)動(dòng)接口開發(fā)應(yīng)用程序,并詳細(xì)講解了RT-Thread I2C設(shè)備驅(qū)動(dòng)框架及相關(guān)函數(shù)。
    的頭像 發(fā)表于 03-29 10:52 ?2.2w次閱讀
    詳細(xì)講解<b class='flag-5'>RT-Thread</b> <b class='flag-5'>I2C</b>設(shè)備驅(qū)動(dòng)框架及相關(guān)函數(shù)

    騰訊物聯(lián)網(wǎng)系統(tǒng)TOS內(nèi)核移植起來比你想象的要簡(jiǎn)單

    騰訊物聯(lián)網(wǎng)系統(tǒng)TOS,內(nèi)核移植起來比你想象的要簡(jiǎn)單
    的頭像 發(fā)表于 02-05 12:51 ?3882次閱讀

    基于RT-Thread的智慧路燈案例實(shí)驗(yàn)分享

    這里我用的是RT-Thread Studio V1.1.0,這里的I2C的范例配置有點(diǎn)問題,其它版本的RT-Thread Studio應(yīng)該可以按范例配置那么配,如果按范例配置編譯不通過的話可以按照
    的頭像 發(fā)表于 07-01 14:43 ?4924次閱讀
    基于<b class='flag-5'>RT-Thread</b>的智慧路燈案例實(shí)驗(yàn)分享

    RT-Thread文檔_RT-Thread 簡(jiǎn)介

    RT-Thread文檔_RT-Thread 簡(jiǎn)介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡(jiǎn)介

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread文檔_I/O 設(shè)備模型

    RT-Thread文檔_I/O 設(shè)備模型
    發(fā)表于 02-22 18:31 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>I</b>/O 設(shè)備模型

    RT-Thread文檔_I2C 總線設(shè)備

    RT-Thread文檔_I2C 總線設(shè)備
    發(fā)表于 02-22 18:35 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>I2C</b> 總線設(shè)備

    驅(qū)動(dòng)SSD1306OLED屏檢驗(yàn)軟件I2C驅(qū)動(dòng)方案

    進(jìn)行RT-Thread Settings 開啟軟件I2C。
    發(fā)表于 08-15 15:33 ?2181次閱讀
    驅(qū)動(dòng)SSD1306OLED屏檢驗(yàn)軟件<b class='flag-5'>I2C</b>驅(qū)動(dòng)方案

    基于RT-ThreadI2C(軟件) 實(shí)踐 | 技術(shù)集結(jié)

    一、軟硬件介紹(一)I2C(軟件)I2C是一種廣泛應(yīng)用于嵌入式系統(tǒng)中的短距離串行通信協(xié)議,支持多主多從設(shè)備模式,主機(jī)通過時(shí)鐘信號(hào)SCL和數(shù)據(jù)線SDA與從機(jī)進(jìn)行數(shù)據(jù)交互。在RT-Thread操作系統(tǒng)中
    的頭像 發(fā)表于 05-06 18:44 ?1280次閱讀
    基于<b class='flag-5'>RT-Thread</b>的<b class='flag-5'>I2C</b>(軟件) 實(shí)踐 | 技術(shù)集結(jié)
    额尔古纳市| 长子县| 郑州市| 武宣县| 景宁| 西贡区| 睢宁县| 都安| 黄平县| 喀什市| 柞水县| 彭泽县| 武冈市| 常德市| 宁德市| 松江区| 延津县| 乡城县| 鄄城县| 大城县| 琼结县| 灵璧县| 天祝| 高唐县| 马边| 永春县| 晋城| 江都市| 英德市| 长葛市| 错那县| 承德市| 平湖市| 旌德县| 驻马店市| 珠海市| 日土县| 阿拉善左旗| 湟中县| 海晏县| 嘉兴市|