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

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

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

GD32 MCU硬件I2C不可靠不如軟件I2C?來看看紅楓派開發(fā)版的硬件I2C驅(qū)動如何做到穩(wěn)得一批

聚沃科技 ? 2024-02-23 09:37 ? 次閱讀

在一個評論中,看到網(wǎng)友對硬件I2C的討論,硬件I2C Busy找不到原因、軟件I2C穩(wěn)得一批。

那么為什么會出現(xiàn)I2C BUSY?硬件I2C真的不如軟件I2C嗎?怎么讓硬件I2C也穩(wěn)得一批,讓我們來一探究竟。

首先我們從I2C時序分析下I2C總線掛死是如何產(chǎn)生的。

我們來看下I2C的時序和流程:

wKgZomXX9piAC-JfAABf-fjP0y0517.png

wKgaomXX9p6AdZ9vAABj3Ag6XSg389.png

所以總線掛死可能會有幾個原因:

1、主機信號掛死了:

主機IO口損壞、I2C狀態(tài)機異常軟件死機

2、主機程序異常:

I2C通信需要主機來主導,主機軟件本身異常了I2C信號也不會繼續(xù)產(chǎn)生。

3、從機拉死了總線:

I2C是線與的,所以從機拉低后總線也掛了,主機無法再次拉高發(fā)起新的通信。這種情況一般在信號被干擾時從機丟失clock或者增加了clock導致雙方時序沒對齊,從機還維持住一個發(fā)送0 bit的狀態(tài)就把SDA拉低了。

首先原因1和2是和程序相關(guān),I2C的狀態(tài)機流程較多,自行編寫驅(qū)動確實容易出現(xiàn)問題,只要使用成熟驅(qū)動就可以。大家可以直接使用紅楓派的I2C驅(qū)動就避免這類問題,紅楓派的驅(qū)動可靠性不比原廠驅(qū)動低,經(jīng)受RTOS、多中斷、干擾等全方面打擊。

wKgZomXX9qSAORzqAAAowZ6DO9Y088.png

對于原因3,既然是干擾多了clock和少了clock導致從機維持拉低SDA的狀態(tài),那我們補齊clock結(jié)束這次異常通信不就可以了?

其實這個方法在最新的I2C協(xié)議標準中也有說明,不管I2C當前丟失或增加幾個clcok,我們只要讓主機連續(xù)補齊9個clock,在9個clock內(nèi)時序一定會補齊到ACK環(huán)節(jié),此時主機維持SDA高狀態(tài)就可以讓這次通信以NACK進行結(jié)束,從機自然會釋放總線,這個比強制用推挽模式拉高SDA更安全合理。

那么這個異常恢復在紅楓派的驅(qū)動里也已經(jīng)為大家考慮好了,當總線狀態(tài)出現(xiàn)異常時,驅(qū)動里會自動進行處理恢復總線。

wKgaomXX9qyAeRWWAABEaGqe-dI730.png

那么軟件I2C的弊端在哪里呢?

軟件I2C一般通過IO口控制和延時進行模擬,這意味著整個通信過程會完全依靠并占用CPU,如果我們運行RTOS、或者有高頻中斷就會出現(xiàn)模擬時序過程被打斷,波形會出現(xiàn)頻率變化,波形中途停止等情況,一方面是降低通信效率,另外也可能導致主機沒有在關(guān)鍵時間采樣或者輸出數(shù)據(jù),出現(xiàn)通信錯誤。

紅楓派開發(fā)板上板載了一個I2C的EEPROM,歡迎大家在軟件極其嚴苛、硬件I2C接口隨機進行干擾下驗證例程,體驗下穩(wěn)得一批的硬件I2C。

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

    關(guān)注

    6022

    文章

    44375

    瀏覽量

    628280
  • 嵌入式
    +關(guān)注

    關(guān)注

    5045

    文章

    18813

    瀏覽量

    298429
  • 硬件
    +關(guān)注

    關(guān)注

    11

    文章

    3112

    瀏覽量

    65839
  • IIC
    IIC
    +關(guān)注

    關(guān)注

    11

    文章

    292

    瀏覽量

    38137
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    400

    瀏覽量

    23971
收藏 人收藏

    評論

    相關(guān)推薦

    I2C基本指南

    電子發(fā)燒友網(wǎng)站提供《I2C基本指南.pdf》資料免費下載
    發(fā)表于 09-10 09:40 ?0次下載
    <b class='flag-5'>I2C</b>基本指南

    GD32 MCU 入門教程】GD32 MCU 常見外設(shè)介紹(7)I2C 模塊介紹

    I2C(Inter-Integrated Circuit)總線是種由Philips公司開發(fā)的兩線式串行總線,用于內(nèi)部IC控制的具有多端控制能力的雙線雙向串行數(shù)據(jù)總線系統(tǒng),能夠用于替代標準的并行總線
    的頭像 發(fā)表于 08-16 09:54 ?218次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入門教程】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 常見外設(shè)介紹(7)<b class='flag-5'>I2C</b> 模塊介紹

    簡單認識I2C通信協(xié)議

    I2C(Inter-Integrated Circuit)通信協(xié)議是由飛利浦公司(現(xiàn)為恩智浦半導體)開發(fā)種簡單、雙向二線制同步串行總線協(xié)議。自1982年發(fā)布以來,I2C協(xié)議因其高效
    的頭像 發(fā)表于 07-25 18:06 ?913次閱讀

    什么是I2C協(xié)議 I2C總線的控制邏輯

    在實際使用過程中,I2C比較容易出現(xiàn)的個問題就是死鎖 ,死鎖在I2C中主要表現(xiàn)為:I2C死鎖時表現(xiàn)為SCL為高,SDA直為低。
    發(fā)表于 03-12 09:17 ?645次閱讀
    什么是<b class='flag-5'>I2C</b>協(xié)議 <b class='flag-5'>I2C</b>總線的控制邏輯

    stm32 I2c硬件驅(qū)動程序不穩(wěn)定該怎么解決?

    stm32 I2c硬件驅(qū)動程序不穩(wěn)定該怎么解決? stm32 的 I2C 硬件驅(qū)動程序不穩(wěn)定可能
    的頭像 發(fā)表于 01-16 17:11 ?2231次閱讀

    I2C地址跳變問題的調(diào)試案例

    引言:I2C作為使用最為廣泛的通訊接口,調(diào)試各類I2C器件,大家應該都很輕車熟路。般對于外掛電阻配置器件的I2C地址,例如電阻上拉之后,器件的地址就會固定下來不再變動,但是今天給大家
    的頭像 發(fā)表于 11-22 10:51 ?1133次閱讀
    <b class='flag-5'>I2C</b>地址跳變問題的調(diào)試案例

    I2C總線信號與測試案例(

    I2C bus是Inter-IC bus的縮寫,意思是IC器件之間的通訊總線;I2C 總線的特點如下
    的頭像 發(fā)表于 11-20 15:45 ?1491次閱讀
    <b class='flag-5'>I2C</b>總線信號與測試案例(<b class='flag-5'>一</b>)

    分享I2C總線規(guī)范

    電子發(fā)燒友網(wǎng)站提供《分享I2C總線規(guī)范.pdf》資料免費下載
    發(fā)表于 11-18 10:49 ?0次下載
    分享<b class='flag-5'>I2C</b>總線規(guī)范

    UART、SPI、I2C比較 串口通信介紹

    UART、SPI、I2C比較 I2C線更少,比UART、SPI更為強大,但是技術(shù)上也更加麻煩些,因為I2C需要有雙向IO的支持,而且使用上拉電阻,抗干擾能力較弱,般用于同
    的頭像 發(fā)表于 11-09 18:06 ?1055次閱讀
    UART、SPI、<b class='flag-5'>I2C</b>比較 串口通信介紹

    I2C總線—電平轉(zhuǎn)換

    我們先來看張圖,熟悉I2C的人看,這不是I2C的level shifter電路嘛,在Philip的I
    的頭像 發(fā)表于 11-02 12:32 ?3822次閱讀
    <b class='flag-5'>I2C</b>總線—電平轉(zhuǎn)換

    I2C總線學習筆記

    I2C在小P以前接觸的設(shè)計中大多只用到400k的速率,EVB的設(shè)計中更經(jīng)常發(fā)現(xiàn)實現(xiàn)不了就降速到100k?,F(xiàn)在突然再看看I2C,發(fā)現(xiàn)原來還有更高的速率規(guī)范,最高都已經(jīng)到5M了。
    的頭像 發(fā)表于 10-25 14:35 ?1307次閱讀
    <b class='flag-5'>I2C</b>總線學習筆記

    I2C總線原理詳解

    I2C兩線式串行總線通訊協(xié)議,它是由飛利浦開發(fā)的,主要用于連接微控制器及其外圍設(shè)備之間,它是由數(shù)據(jù)線SDA和信號線SCL構(gòu)成的,可發(fā)送和接收數(shù)據(jù)即在MUC和I2C設(shè)備之間,I2C
    發(fā)表于 10-18 17:20 ?1932次閱讀
    <b class='flag-5'>I2C</b>總線原理詳解

    I2C總線介紹 I2C讀寫時序介紹

    作為嵌入式開發(fā)人員,無論是硬件還是軟件工程師,或多或少都會接觸過I2C接口的外設(shè)。諸如常用的存儲器EEPROM等皆是I2C接口進行通信。
    發(fā)表于 10-01 16:57 ?2096次閱讀
    <b class='flag-5'>I2C</b>總線介紹 <b class='flag-5'>I2C</b>讀寫時序介紹

    I2C讀寫時序分析和實現(xiàn)思路

    上篇推文對I2C總線的特性進行了介紹和描述。對于開發(fā)者而言,最重要的是編碼I2C的讀寫時序驅(qū)動。本篇推文主要總結(jié)和分享I2C總線主機端通信的
    發(fā)表于 10-01 16:54 ?1353次閱讀
    <b class='flag-5'>I2C</b>讀寫時序分析和實現(xiàn)思路

    I2C總線能掛多少設(shè)備 I2C架構(gòu)

    預留設(shè)備地址去除,7 bit 協(xié)議規(guī)定了 8個預留地址,普通廠商不可以使用。保留地址如下: 但是 I2C 協(xié)議規(guī)定,總線上的電容不可以超過 400pF。管腳都是有輸入電容的,PCB 上也會有寄生電容
    的頭像 發(fā)表于 09-28 14:20 ?2482次閱讀
    <b class='flag-5'>I2C</b>總線能掛多少設(shè)備 <b class='flag-5'>I2C</b>架構(gòu)