国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

嵌入式中I2C 相關(guān)的硬件問題匯總及死鎖解決辦法

這篇具有很好參考價(jià)值的文章主要介紹了嵌入式中I2C 相關(guān)的硬件問題匯總及死鎖解決辦法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本文主要介紹如何解決I2C設(shè)備硬件設(shè)計(jì)上的各種問題,希望對(duì)大家有所幫助!

關(guān)于I2C協(xié)議詳細(xì)的講解,可以參考之前的推文:全面解析 I2C 通信協(xié)議

嵌入式中I2C 相關(guān)的硬件問題匯總及死鎖解決辦法,單片機(jī)項(xiàng)目實(shí)戰(zhàn)操作之優(yōu)秀,單片機(jī),stm32,嵌入式硬件一般情況下, i2c 設(shè)備焊接沒什么問題,按照設(shè)備手冊(cè)一步步來,基本上就順風(fēng)順?biāo)軌蛴闷饋?。如果這么一個(gè)簡單的東西,有時(shí)候想要的結(jié)果死活不出來,反復(fù)的檢查問題的原因,查詢解決辦法,核查設(shè)備的數(shù)據(jù)手冊(cè),甚至發(fā)送和接收的每一條命令與數(shù)據(jù)都知道是什么意思,仍然無法解決問題,那該怎么辦呢?

本文主要針對(duì) i2c 設(shè)備,講解如何解決 i2c 設(shè)備主機(jī)與從機(jī)直接無法正常數(shù)據(jù)交互的問題,側(cè)重點(diǎn)是針對(duì)硬件設(shè)計(jì)不太合理、i2c 設(shè)備設(shè)計(jì)不標(biāo)準(zhǔn)導(dǎo)致總線故障的情況,并且通過分析現(xiàn)象,提出解決方案。

對(duì)于在設(shè)備初始化中,沒有設(shè)置相應(yīng)的寄存器或者發(fā)送命令,而導(dǎo)致的無法獲取想要的數(shù)據(jù)情況,不作詳細(xì)介紹。

i2c 基本用法

i2c 總線是一種簡單、雙向二線制同步串行總線。所有主機(jī)在 SCL 線上產(chǎn)生它們自己的時(shí)鐘來傳輸總線上的報(bào)文,SDA 線傳輸每個(gè)字節(jié)必須為 8 位,每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制,每個(gè)字節(jié)后必須跟一個(gè)響應(yīng)位。在空閑狀態(tài)時(shí),SCL 與 SDA 均為高電平。

通常一些低功耗 i2c 設(shè)備,芯片引腳使用上拉輸出即可滿足與其正常數(shù)據(jù)交互,還有一些 i2c 設(shè)備,則需要在總線上外加一個(gè)上拉電阻,此時(shí)相應(yīng)的 I/O 配置成開漏輸出,其他的按照芯片手冊(cè)進(jìn)行標(biāo)準(zhǔn)配置。

硬件問題匯總

2.1??無法正常拉高拉低引腳

首先確定 SDA 與SCL 引腳能夠被拉高、拉低,檢測(cè)方式直接軟件控制 I/O 口輸出引腳低電平/高電平,測(cè)量引腳電壓是否能夠隨著芯片引腳的設(shè)置輸出相應(yīng)的狀態(tài)。

如果不能被拉低,檢測(cè)虛焊、上拉電阻斷開、i2c 設(shè)備是否正常、芯片引腳是否損壞等問題,確保能夠正常被拉高或者拉低。

2.2??電氣特性無法滿足

如果正常拉高、拉低的情況下,依然無法正常讀取數(shù)據(jù)。通常建議,根據(jù)負(fù)載電流更換小阻值的電阻。

如果需要詳細(xì)知道原因,就具體查詢 i2c 設(shè)備電氣特性。大多數(shù) i2c 設(shè)備電氣特性,大致下圖所示

嵌入式中I2C 相關(guān)的硬件問題匯總及死鎖解決辦法,單片機(jī)項(xiàng)目實(shí)戰(zhàn)操作之優(yōu)秀,單片機(jī),stm32,嵌入式硬件

通常這塊內(nèi)容在 i2c 設(shè)備電氣特性這一塊,主要講解電平拉高拉低的最長時(shí)間、最短時(shí)間,以及處于高電平與電平的閾值與持續(xù)時(shí)間等等內(nèi)容。

硬件設(shè)計(jì),為了降低單片機(jī)的功耗與保護(hù)芯片引腳,在滿足負(fù)載電流和負(fù)載電容相關(guān)要求的前提下,阻值設(shè)置通常比較大。如果同一個(gè)總線上掛載多個(gè) i2c 設(shè)備, 即使在 I/O 口配置正確的前提下,也會(huì)導(dǎo)致驅(qū)動(dòng)能力不足。

現(xiàn)象是拉高電壓不足,在拉高、拉低過程中消耗時(shí)間過長。這兩個(gè)問題通常還引起數(shù)據(jù)線與時(shí)鐘線:拉高時(shí),高電壓持續(xù)時(shí)間過短;拉低時(shí),低電壓持續(xù)時(shí)間過短。

用示波器抓取圖形:從波形上看,顯示是尖波、斜波、雜波等不符合 i2c 設(shè)備電氣特性的波形;從數(shù)據(jù)上看,數(shù)據(jù)線高電平持續(xù)時(shí)間過小 ,上升沿時(shí)間過長 ,下降沿時(shí)間過長等等數(shù)據(jù)超出設(shè)備電氣特性的有效值。

典型雜波圖,如下所示

嵌入式中I2C 相關(guān)的硬件問題匯總及死鎖解決辦法,單片機(jī)項(xiàng)目實(shí)戰(zhàn)操作之優(yōu)秀,單片機(jī),stm32,嵌入式硬件

如果出現(xiàn)此類異常,建議更換小一點(diǎn)的電阻,用來增強(qiáng)總線驅(qū)動(dòng)能力,提高電平轉(zhuǎn)換速度。應(yīng)當(dāng)注意的是每個(gè) MCU 的耐受電流不一樣,減小電阻應(yīng)避免超過相應(yīng)引腳承受電流的最大值。

SDA 死鎖

如果 i2c 設(shè)備的數(shù)據(jù)偶爾能夠正確獲取,但是仍然會(huì)在總線發(fā)送數(shù)據(jù)或者命令的時(shí)候,爆出總線讀寫錯(cuò)誤,那么有可能遇到下面的死鎖問題,死鎖時(shí)候,就是數(shù)據(jù)線被拉低,主機(jī)無法拉高。

死鎖一般發(fā)生在從機(jī)上,且為數(shù)據(jù)線死鎖。因?yàn)閕2c總線是共享的,如果需要確定,是否是從機(jī)死鎖,可以參照下面兩幅圖,串聯(lián)電阻進(jìn)行測(cè)試

嵌入式中I2C 相關(guān)的硬件問題匯總及死鎖解決辦法,單片機(jī)項(xiàng)目實(shí)戰(zhàn)操作之優(yōu)秀,單片機(jī),stm32,嵌入式硬件

如上圖所示,如果從機(jī)死鎖,即從機(jī)拉低電平,此時(shí)檢測(cè)到的電壓為1/3 Vcc。

嵌入式中I2C 相關(guān)的硬件問題匯總及死鎖解決辦法,單片機(jī)項(xiàng)目實(shí)戰(zhàn)操作之優(yōu)秀,單片機(jī),stm32,嵌入式硬件

如上圖所示,如果主機(jī)死鎖,即主機(jī)拉低電平,此時(shí)檢測(cè)到的電壓為 1/11 Vcc。依據(jù)這個(gè)原理,可以準(zhǔn)確判定死鎖的具體位置,多個(gè)傳感器依據(jù)類似方式進(jìn)行定位。

3.1 反復(fù)重啟導(dǎo)致死鎖

3.1.1 現(xiàn)象

如果設(shè)備需要反復(fù)重啟,很有可能在從機(jī)設(shè)備返回?cái)?shù)據(jù)的時(shí)候,SDA被鎖住。具體原因是從機(jī)設(shè)備在回?cái)?shù)據(jù),還沒有發(fā)送完成,主機(jī)時(shí)鐘消失,從機(jī)等待時(shí)鐘信號(hào), MCU重啟,如果從機(jī)設(shè)備的電源沒有復(fù)位,從機(jī)繼續(xù)等待 MCU 時(shí)鐘信號(hào),數(shù)據(jù)一直被鉗住,總線無法完成數(shù)據(jù)交互。

3.1.2 解決方式

解決重啟導(dǎo)致總線死鎖,一種方式可以如同 rt-thread 驅(qū)動(dòng)解決方式一樣,在系統(tǒng)復(fù)位的時(shí)候,提供9個(gè)時(shí)鐘信號(hào),解初總線死鎖;另一種是在按下復(fù)位鍵初始化的時(shí)候,給從機(jī)設(shè)備電源斷電重啟,這個(gè)需要引腳控制。

3.1.3 9 個(gè)時(shí)鐘信號(hào)

i2c 設(shè)備進(jìn)行讀寫操作的過程中,在從機(jī)鉗住總線的期間,MCU 異常復(fù)位,會(huì)導(dǎo)致 SDA 死鎖,異常產(chǎn)生出現(xiàn)在倆個(gè)階段:從機(jī)響應(yīng)階段、從機(jī)發(fā)送數(shù)據(jù)階段。下面將針對(duì)這兩種異常,對(duì)時(shí)鐘信號(hào)進(jìn)行解釋,并且總結(jié)其他原因,得出結(jié)論。

(a) 從機(jī)響應(yīng)階段

MCU 在開始信號(hào)后發(fā)送地址,得到從機(jī)設(shè)備響應(yīng),準(zhǔn)備開始返回?cái)?shù)據(jù),在這個(gè)時(shí)候,從機(jī)將 SDA 信號(hào)拉為低電平,如果 MCU 異常復(fù)位,會(huì)導(dǎo)致總線上 SCL 停止發(fā)送時(shí)鐘信號(hào),從機(jī)等待 MCU 的時(shí)鐘信號(hào),產(chǎn)生鉗住并且拉低? SDA 的現(xiàn)象。如果想要解鎖 SDA,從機(jī)需要 9 個(gè)時(shí)鐘信號(hào),使得從機(jī)完成響應(yīng),釋放 SDA 。

(b) 從機(jī)發(fā)送數(shù)據(jù)階段

如果從機(jī)響應(yīng)完成了,開始給 MCU 返回?cái)?shù)據(jù)。這個(gè)數(shù)據(jù)有八位,每一位都有可能為低,如果在數(shù)據(jù)低位,MCU 異常復(fù)位,停止發(fā)送時(shí)鐘信號(hào),從機(jī)就會(huì)等待 MCU 的時(shí)鐘信號(hào),產(chǎn)生鉗住并且拉低? SDA 的現(xiàn)象。如果想要解鎖 SDA,從機(jī)需要 1-8 個(gè)時(shí)鐘信號(hào),使得從機(jī)完成數(shù)據(jù)響應(yīng),釋放 SDA 。

(c)其他情況

在從機(jī)一個(gè) 8 位數(shù)據(jù)發(fā)送完成后,等待 MCU 響應(yīng), 即使屬于 MCU 的,從機(jī)不再鉗住 SDA,沒有時(shí)鐘,數(shù)據(jù)交互停止。

在主機(jī)發(fā)送數(shù)據(jù)階段,總線所有權(quán)在主機(jī),主機(jī)異常,數(shù)據(jù)交互停止,總線釋放。所以,這些情況下,不存在 SDA 死鎖的情況。

(d)結(jié)論

綜上所述,解鎖 SDA 從機(jī)最多需要 9 個(gè)時(shí)鐘信號(hào),也就是異常復(fù)位后,MCU 至少發(fā)送需要 9 個(gè)時(shí)鐘信號(hào),完成 i2c 總線的 SDA 解鎖。所以,RT_Thread 為了避免此類問題的產(chǎn)生,在 i2c 驅(qū)動(dòng)初始化,對(duì)總線進(jìn)行判斷,判斷是否需要解鎖,如果需要,就進(jìn)行解鎖,確保 i2c 設(shè)備不會(huì)因?yàn)檫@個(gè)問題導(dǎo)致數(shù)據(jù)交互失敗。

3.2 多個(gè) i2c 設(shè)備導(dǎo)致死鎖

多 i2c 設(shè)備除了異常復(fù)位導(dǎo)致死鎖,還會(huì)形成相互干擾的問題。一般情況下,不會(huì)把同種從機(jī)地址掛在同一條總線上,但除此之外,有些 i2c 設(shè)備設(shè)計(jì)不是按照標(biāo)準(zhǔn)的 i2c 總線協(xié)議設(shè)計(jì),在 i2c 總線共享的前提條件下,有的設(shè)備只要總線上從機(jī)地址就會(huì)有響應(yīng)。這樣由于從機(jī)的錯(cuò)誤響應(yīng),使得各個(gè) i2c 總線異常,甚至鉗住總線,導(dǎo)致 I2C 總線進(jìn)人一種死鎖狀態(tài)。

解決方式,這樣的不標(biāo)準(zhǔn)i2c設(shè)備,單獨(dú)使用一個(gè)總線,避免干擾,或者單獨(dú)一個(gè)獨(dú)立引腳,控制電源。文章來源地址http://www.zghlxwxcb.cn/news/detail-827213.html

到了這里,關(guān)于嵌入式中I2C 相關(guān)的硬件問題匯總及死鎖解決辦法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32硬件I2C通信外設(shè)

    STM32硬件I2C通信外設(shè)

    本文主要介紹stm32自帶的I2C通信外設(shè),對(duì)比與軟件模擬I2C,硬件I2C可以自動(dòng)生成時(shí)序,時(shí)序的操作更加及時(shí)規(guī)范,可以實(shí)現(xiàn)更加高性能的IIC通信。 本文內(nèi)容與I2C軟件通信有諸多類似之處,I2C軟件通信可見:https://blog.csdn.net/qq_53922901/article/details/136662006?spm=1001.2014.3001.5501 在8位指

    2024年04月08日
    瀏覽(27)
  • 【科普貼】I2C接口詳解——偏硬件解析

    【科普貼】I2C接口詳解——偏硬件解析

    I2C最早是Philips公司開發(fā)的一款簡單的雙向總線,實(shí)現(xiàn)有效的IC控制。把這個(gè)總線寫成Inter IC 簡稱IIC或I2C(PS:說白了2就是兩個(gè)“I”的意思。) I2C總線一些特征: 1、 只有兩根線分別是串行數(shù)據(jù)線(SDA),串行時(shí)鐘線(SCL)。 2、 每個(gè)連接到總線的器件有唯一一個(gè)地址。 3、

    2024年02月07日
    瀏覽(22)
  • Hi3861 硬件 i2c 驅(qū)動(dòng) oled

    Hi3861 硬件 i2c 驅(qū)動(dòng) oled

    最近想用 3861 做個(gè)有意思的東西,記錄一下開發(fā)過程。今天使用 3861 的硬件 i2c 驅(qū)動(dòng) oled。 硬件平臺(tái):Bearpi-Nano 軟件SDK:潤和sdk 我之前寫過一篇基于 stm32cubemx 快速使用 iic 接口 oled 的過程,里面有現(xiàn)成的 oled 接口,我們只要直接拿過來替換掉底層接口就行。 ?STM32CubeMX驅(qū)動(dòng)4腳

    2023年04月23日
    瀏覽(27)
  • 【STM32】入門(七):I2C硬件控制方式

    【STM32】入門(七):I2C硬件控制方式

    之所以叫“I2C硬件控制方式”是與“軟件控制方式”相對(duì)。I2C軟件控制,就是寫程序直接操作兩個(gè)GPIO引腳,分別作為時(shí)鐘線SCL和數(shù)據(jù)線SDA,按照I2C協(xié)議的時(shí)序要求,操作GPIO輸入、輸出、高電平、低電平。 聽著就很復(fù)雜,好在STM32中有I2C的硬件實(shí)現(xiàn),即通過簡單的操作寄存器

    2023年04月08日
    瀏覽(26)
  • STM32 HAL FreeRTOS 硬件I2C 使用

    STM32 HAL FreeRTOS 硬件I2C 使用

    因?yàn)槟硞€(gè)項(xiàng)目想要顏色識(shí)別,去識(shí)別球的顏色,但是又不想多來個(gè)攝像頭,所以想嘗試一下顏色傳感器的方案。但是經(jīng)過嘗試,HAL庫生成的 FreeRTOS 硬件 I2C 讀寫一直在報(bào)錯(cuò)。 剛好手頭上有九軸陀螺儀的例程代碼。最后用FreeRTOS 硬件 I2C 讀取數(shù)據(jù)。 這里提到了阻塞式 HAL 函數(shù)(

    2024年02月20日
    瀏覽(22)
  • GD32 單片機(jī) 硬件I2C死鎖解決方法

    GD32 單片機(jī) 硬件I2C死鎖解決方法

    在I2C恢復(fù)函數(shù)下個(gè)斷點(diǎn)(檢測(cè)到I2C多次超時(shí)之后,應(yīng)該能跳轉(zhuǎn)到I2C恢復(fù)函數(shù)) 使用鑷子,將SCL與SDA短接,很快就能看到程序停到恢復(fù)函數(shù)的斷點(diǎn)上,此時(shí)再執(zhí)行恢復(fù)函數(shù),看能否正常走出(可在回復(fù)函數(shù)中寫個(gè)死循環(huán),只有I2C正常才跳出,檢測(cè)I2C正常的辦法,可以讀從設(shè)備的

    2024年02月05日
    瀏覽(47)
  • STM32 SHT40驅(qū)動(dòng)源碼(使用硬件I2C)

    STM32 SHT40驅(qū)動(dòng)源碼(使用硬件I2C)

    目錄 簡介: SHT40.c: SHT40.h 測(cè)試結(jié)果: ? ? ? ? SHT40是瑞士Sensirion公司推出的第四代溫濕度傳感器,內(nèi)部集成加熱器用于去除表面微小液滴。集成I2C接口,典型的相對(duì)濕度精度1.8%RH,典型溫度精度0.2℃,運(yùn)行在0-100%RH和-40-125℃的環(huán)境中。 主控:STM32H7B0VBT6 平臺(tái):STM32CubeIDE SHT4

    2024年03月19日
    瀏覽(131)
  • STM32F407系列硬件I2C筆記

    STM32F407系列有3個(gè)硬件I2C: I2C1:該接口位于GPIOB引腳上,包括PB6(I2C1_SCL)和PB7(I2C1_SDA)。 I2C2:該接口位于GPIOB引腳上,包括PB10(I2C2_SCL)和PB11(I2C2_SDA)。 I2C3:該接口位于GPIOA和GPIOC引腳上,包括PA8(I2C3_SCL)和PC9(I2C3_SDA)。 ? 硬件I2C的速度比軟件I2C更快,硬件I2C通常可以

    2024年02月04日
    瀏覽(33)
  • STM32F030硬件I2C代碼及解析

    STM32F030硬件I2C代碼及解析

    剛接觸STM32的時(shí)候,第一個(gè)學(xué)習(xí)的就是I2C,當(dāng)時(shí)去網(wǎng)上學(xué)習(xí)別人寫得I2C代碼,雖然能用,但是當(dāng)時(shí)并不理解為什么要這么配置,特別希望有人把代碼掰碎了講講看,今天突然想起來,就把以前寫的I2C代碼拿出來掰碎了捋捋,希望對(duì)新手有些幫助。 先說說STM32的I2C: ST的M3系列還

    2024年02月08日
    瀏覽(28)
  • 嵌入式硬件中常見的面試問題與實(shí)現(xiàn)

    嵌入式硬件中常見的面試問題與實(shí)現(xiàn)

    01 請(qǐng)列舉您知道的電阻、電容、電感品牌(最好包括國內(nèi)、國外品牌) ?電阻 美國:AVX、VISHAY威世 日本:KOA興亞、Kyocera京瓷、muRata村田、Panasonic松下、ROHM羅姆、susumu、TDK 臺(tái)灣:LIZ麗智、PHYCOM飛元、RALEC旺詮、ROYALOHM厚生、SUPEROHM美隆、TA-I大毅、TMTEC泰銘、TOKEN德鍵、TYOHM幸亞

    2024年04月10日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包