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

由I2C data信號(hào)低電平不到0,再思考I2C及GPIO

這篇具有很好參考價(jià)值的文章主要介紹了由I2C data信號(hào)低電平不到0,再思考I2C及GPIO。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

最近做項(xiàng)目測(cè)試時(shí)發(fā)現(xiàn)I2C data信號(hào)低電平不能完全到0電平,如下圖

由I2C data信號(hào)低電平不到0,再思考I2C及GPIO

量測(cè)到低電平最大值150mV左右,檢查SOC及負(fù)載端SPEC,低電平最大值都是VIL max =0.35VDD 對(duì)于1.8V的IO 電平,這個(gè)電壓是0.35x1.8=0.63V 顯然150mV<<630mV,不影響邏輯判斷,因此從項(xiàng)目的角度考慮,此問題并不影響項(xiàng)目,可以忽略。只是做項(xiàng)目的角度考慮,此問題就可以結(jié)束了。

但拍電視也不能在第一集就結(jié)束吧,顯然還需要繼續(xù)分析……

但要深究原因,那就又得重新抓起……,那就從新抓起吧,反問:為啥會(huì)出現(xiàn)不到0的情況?

最容易想到的是內(nèi)部MOS有壓降,啥情況下有壓降,電流大了會(huì)有壓降,對(duì),所有的MOS在開啟時(shí)都有Ron,雖然都很小,但在電流大的時(shí)候這個(gè)壓降在所難免,查了下高通IO 電壓壓降,顯示最大50mV,也就是正常GPIO在低電平50mV就是最大。

由I2C data信號(hào)低電平不到0,再思考I2C及GPIO

那為啥這里會(huì)這么大,原因是I比較大,正常使用GPIO,上拉會(huì)選擇4.7K-100K,4.7K 算是比較強(qiáng)的上拉了,而這里I2C大部分在2.2K,而這里測(cè)試時(shí)上拉是1k。因此理論上通路的電流是1.8/1k=1.8mA,正常GPIO驅(qū)動(dòng)電流是2-16mA step 2mA,按理說也是夠用。

為了驗(yàn)證是電流能力問題,做了兩個(gè)實(shí)驗(yàn),

1.將通路電流降低,即將上拉改大,修改到2.2K

2.將通路電流能力提高,即將MOS的電流能力增加修改到4mA.

如上兩個(gè)驗(yàn)證下來都會(huì)降低低電平時(shí)的電壓,能降到100mV左右。

從軟件配置看,默認(rèn)的I2C電流是2mA,默認(rèn)GPIO也是2mA.

另外查了下CSDN類似的問題,如下這位仁兄做實(shí)驗(yàn)和我的類似,不過他最后將I2C的pad改成了GPIO模式,然后低電平就到0了。

MT6739 Android 8.1 I2C口電平轉(zhuǎn)換低電平無法到0V的解決辦法_楊涂涂的博客-CSDN博客_i2c低電平無法拉到0v

基于此:有兩個(gè)問題

1.為什么GPIO模式能到0,而I2C模式不能到0?

2.I2C 的GPIO能修改為Push-Pull嗎?

我們知道GPIO模式pin配置通常是Push-pull(PP),而I2C 配置是OpenDrain(OD),為了說明簡(jiǎn)單,下文稱為PP和OD。

如下是STM32 GPIO框圖,Push-pull電路看的很清楚

由I2C data信號(hào)低電平不到0,再思考I2C及GPIO

?高通SOC內(nèi)部電路類似,如下只是降Push-pull和Pull Up這些細(xì)節(jié)電路用了框表示

由I2C data信號(hào)低電平不到0,再思考I2C及GPIO

?先思考第一個(gè)問題

第一個(gè)問題的描述并不準(zhǔn)確,它是基于場(chǎng)景的描述,并沒有給出指定的條件,如果修改為:

同樣的GPIO MOS(內(nèi)部N-MOS+P-MOS不變)電路情況下,為什么Push-pull能到0,而OD不能到0?

這樣的問題,答案是問題不準(zhǔn)確,如果是內(nèi)部電路不變(至少P-MOS 在PP和OD下是同一個(gè))那么如果PP能到0,OD也能到0(在上升和下降時(shí)間很短的情況,如上的波形能看出上升和下降時(shí)間都很短)。

只有在上升和下降時(shí)間很長(zhǎng)時(shí)才有可能出現(xiàn)PP能到0,而OD不能到0,因?yàn)镺D的上升和下降tao=RC,R 更大。而沒有外加電容時(shí)寄生電容大概是pF 級(jí)別,低速電路都可以忽略。但那位仁兄加了MOS后的下降沿看起來很大,并不能完全忽略。

因此回到該場(chǎng)景下,為什么在那位仁兄的SOC上,GPIO的低電平能到0,而I2C的低電平不能到0,還是因?yàn)镸OS電流能力,I2C的電流默認(rèn)是2mA,GPIO 他期望的是沒有電流限制。沒有看到配成GPIO時(shí)的電流。

GPIO電路通常是Push-pull電路,即N-MOS和P-MOS都處在開關(guān)狀態(tài),要么打開要么關(guān)閉,那么GPIO又是怎么去控制電流的呢?

我們知道,只有MOS處在可變電阻區(qū)時(shí)(放大區(qū)),電流才能變化,但此時(shí)DS之間的壓降很大,GPIO肯定不能用這種模式。

猜想:1.內(nèi)部可能是多個(gè)Push-pull電路并聯(lián)

? ? ? ? 2.使用Jfet之類的fet控制,在電流可控區(qū)域依然沒有壓降,這個(gè)猜想出現(xiàn)不到1分鐘就自我否定了,原因是Jfet在電流可變時(shí)也有壓降,另外現(xiàn)在的SOC都是CMOS電路,那就說明了是MOSFET構(gòu)成的。

因此只有1是可能的猜想,為了驗(yàn)證這個(gè)猜想,找了很久資料,最終找到確實(shí)是并聯(lián)了PP電路。

如下是它提供的電路

Digital output with programmable current

The current drive of the output pad is an important parameters for low-power application. Using a 2mA current limits the power dissipation but provokes low speed switching. When 2mA and 4mA drivers work simultaneously, a 6mA current is available to charge and discharge the output signal faster, at the cost of a higher power dissipation.

由I2C data信號(hào)低電平不到0,再思考I2C及GPIO

?由I2C data信號(hào)低電平不到0,再思考I2C及GPIO

由I2C data信號(hào)低電平不到0,再思考I2C及GPIO?因此如果是2-16mA 可編程,那么內(nèi)部應(yīng)該是2||4||6||8 4個(gè)PP電路。而為了減少功耗,默認(rèn)通常是2mA.

查到這里已經(jīng)查到了IC設(shè)計(jì)的基本概念,屬于電路設(shè)計(jì)的上游,由此本職工作要做好,經(jīng)常會(huì)涉及上下游的知識(shí)。做好并不容易。

基于此PP能到0,而OD不能到0,本質(zhì)上內(nèi)部走的不是同一個(gè)電路。

?回到第二個(gè)問題:I2C能用PP模式嗎?

回想I2C通信過程,大概是maste?發(fā)送8bit數(shù)據(jù),等待slaver 回復(fù)ack,或者反過來,因此在SOC端,發(fā)送8bit再讀1bit,摘取協(xié)議中電路如下。

由I2C data信號(hào)低電平不到0,再思考I2C及GPIO

?如主機(jī)為PP,從機(jī)依然是OD,那么主機(jī)發(fā)送數(shù)據(jù)(高低電平)還是按照GPIO傳輸一樣輸出,第9bit時(shí)不需要輸出,此時(shí)總線設(shè)置為輸入,數(shù)據(jù)走如上標(biāo)注2的位置,因此也不沖突,這樣看,在單主機(jī)多從機(jī)的情況下,主機(jī)發(fā)送是可以設(shè)置為PP。

但I(xiàn)2C是多主機(jī)多從機(jī)的通信協(xié)議,在多主機(jī)時(shí),主機(jī)如果都設(shè)置為PP,那么存在短路情況,因此肯定不行,協(xié)議規(guī)定OD是合理的。

由I2C data信號(hào)低電平不到0,再思考I2C及GPIO

基于以上這些理解,繼續(xù)查看之前的波形,發(fā)現(xiàn)第9bit?時(shí)電平能回到0,而9bit是slave發(fā)送給maste的,因此再次判定是SOC內(nèi)部的N-MOS的驅(qū)動(dòng)不夠。

(嚴(yán)格意義上說還有走線阻抗的存在,因?yàn)闇y(cè)試時(shí)是偏向slave負(fù)載端測(cè)試的,這樣走線的阻抗都計(jì)算在了maste端的RS上,但畢竟很小,沒深究)

由I2C data信號(hào)低電平不到0,再思考I2C及GPIO

因此如上圖就是maste發(fā)送給slave的數(shù)據(jù),如果反過來slave發(fā)送數(shù)據(jù)給maste,那么不能到0的應(yīng)該只有ack

由I2C data信號(hào)低電平不到0,再思考I2C及GPIO

?數(shù)據(jù)流向及測(cè)試位置示意。

由I2C data信號(hào)低電平不到0,再思考I2C及GPIO

總結(jié):

1.I2C data 低電平不能到0是由于通路電流較大,GPIO 內(nèi)部MOS 內(nèi)阻分到了部分電壓,通路電流或者增加通路電流能力都可以降低此電壓,通常都在SPEC范圍內(nèi),可不修改。

基于不到0 的電平可以判斷數(shù)據(jù)的流向。

2.GPIO 內(nèi)部輸出電流能力控制是通過切換或者并聯(lián)不同的PP電路實(shí)現(xiàn),因此PP模式和OD模式時(shí)可能并不是同一個(gè)電路,盡管他們都是由同一個(gè)pin輸出。

3.I2C 修改為Push-Pull的操作,只在單主機(jī)上可行,多主機(jī)時(shí)依然要遵守協(xié)議。(這一點(diǎn)可能不準(zhǔn)確,有經(jīng)驗(yàn)的同學(xué)幫忙評(píng)論留言)文章來源地址http://www.zghlxwxcb.cn/news/detail-423028.html

到了這里,關(guān)于由I2C data信號(hào)低電平不到0,再思考I2C及GPIO的文章就介紹完了。如果您還想了解更多內(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)文章

  • 一次嚴(yán)重的I2C信號(hào)錯(cuò)誤

    一次嚴(yán)重的I2C信號(hào)錯(cuò)誤

    制作電池電量計(jì)測(cè)試板,使用I2C信號(hào)與主板通信,中間連接20cm的2.54排線,兩側(cè)電平均為3.3V。 主板無法訪問電量計(jì)芯片。 I2C信號(hào)波形如下: 半高電平的問題跟隨示波器的通道2,有點(diǎn)匪夷所思,但是對(duì)排除信號(hào)線路問題有一定幫助。 解決問題的過程中參考了以下文章: 1、

    2024年02月12日
    瀏覽(20)
  • Linux Kernel 4.19+內(nèi)核使用GPIO模擬I2C的方法

    1.修改內(nèi)核配置文件,使內(nèi)核支持GPIO模擬I2C 2.對(duì)應(yīng)的dts里面增加GPIO模擬I2C的設(shè)備樹 編譯后燒寫,會(huì)發(fā)現(xiàn)/dev下多了一個(gè)i2c總線,多出來的那個(gè)就是了。

    2024年02月16日
    瀏覽(30)
  • 嵌入式I2C 信號(hào)線為何加上拉電阻(圖文并茂)

    嵌入式I2C 信號(hào)線為何加上拉電阻(圖文并茂)

    IIC 是一個(gè)兩線串行通信總線,包含一個(gè) SCL 信號(hào)和 SDA 信號(hào),SCL 是時(shí)鐘信號(hào),從主設(shè)備發(fā)出,SDA 是數(shù)據(jù)信號(hào),是一個(gè)雙向的,設(shè)備發(fā)送數(shù)據(jù)和接收數(shù)據(jù)都是通過 SDA 信號(hào)。 ? 在設(shè)計(jì) IIC 信號(hào)電路的時(shí)候我們會(huì)在 SCL 和 SDA 上加一個(gè)上拉電阻。 ? 今天就來分享下,為什么要在

    2024年02月19日
    瀏覽(23)
  • I2C知識(shí)大全系列四 —— I2C驅(qū)動(dòng)之Linux下的I2C

    I2C知識(shí)大全系列四 —— I2C驅(qū)動(dòng)之Linux下的I2C

    Linux 系統(tǒng)定義了 I2C 驅(qū)動(dòng)體系結(jié)構(gòu)。在 Linux 系統(tǒng)中, I2C 驅(qū)動(dòng)由三部分組成,即 I2C 核心 、 I2C 總線驅(qū)動(dòng) 和 I2C 設(shè)備驅(qū)動(dòng) 。這三部分相互協(xié)作,形成了非常通用、可適應(yīng)性很強(qiáng)的 I2C 框架。 I2C核心 I2C 核心提供了 I2C 總線驅(qū)動(dòng) 和 設(shè)備驅(qū)動(dòng) 的 注冊(cè) 、 注銷方法 , I2C 通信方法

    2024年02月07日
    瀏覽(29)
  • 什么是I2C,I2C怎么用,從實(shí)例波形分析I2C讀寫

    什么是I2C,I2C怎么用,從實(shí)例波形分析I2C讀寫

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 今天分享的主題是I2C通信。接下來從I2C是什么,怎么用,以及以時(shí)鐘外設(shè)讀寫作為實(shí)例進(jìn)行分析。 I2C(Inter-Integrated Circuit) ,也可以叫IIC、I2C,譯作集成電路總線,是 兩線式串行通信總線 ,用于設(shè)備

    2024年01月19日
    瀏覽(24)
  • I2C總線 | I2C總線介紹

    I2C總線 | I2C總線介紹

    目錄 I2C 總線 | I2C 總線介紹 I2C 總線介紹 I2C有如下特點(diǎn): I2C 總線術(shù)語(yǔ) I2C 總線位傳輸 IIC總線數(shù)據(jù)傳輸 1.字節(jié)格式 2.應(yīng)答響應(yīng) IIC 總線尋址方式 1.7位尋址 2.10位尋址 快速和高速模式 1.快速模式 2.高速模式 I2C ( Inter - Intergrated Circuit )總線(也稱 IIC 或 I2C )是由 PHILIPS 公司開發(fā)

    2024年02月04日
    瀏覽(20)
  • 【STM32 CubeMX】I2C層次結(jié)構(gòu)、I2C協(xié)議

    【STM32 CubeMX】I2C層次結(jié)構(gòu)、I2C協(xié)議

    在STM32 CubeMX環(huán)境中,I2C(Inter-Integrated Circuit)是一種常用的串行通信協(xié)議,廣泛應(yīng)用于連接各種外設(shè)和傳感器。理解I2C的層次結(jié)構(gòu)、協(xié)議和硬件結(jié)構(gòu)對(duì)于STM32微控制器的開發(fā)至關(guān)重要。通過STM32 CubeMX提供的圖形化配置工具,我們能夠更輕松地理解和配置I2C通信,同時(shí)深入了解

    2024年02月22日
    瀏覽(34)
  • 【I2C 通信的工作原理是什么?Arduino 和 I2C 教程】

    【I2C 通信的工作原理是什么?Arduino 和 I2C 教程】

    在本教程中,我們將了解 I2C 通信協(xié)議的工作原理,我們還將使用 Arduino 板和使用該協(xié)議的傳感器制作一個(gè)實(shí)際示例。您可以觀看以下視頻或閱讀下面的書面教程。 I2C通信總線非常流行,并被許多電子設(shè)備廣泛使用,因?yàn)樗梢院苋菀椎卦谠S多需要主設(shè)備與多個(gè)從設(shè)備甚至多

    2024年02月05日
    瀏覽(28)
  • I2C用法和MSP430F5299上的I2C

    I2C用法和MSP430F5299上的I2C

    1. 二線傳輸; 2. 無中心主機(jī); 3. 軟件尋址; 4. 應(yīng)答式數(shù)據(jù)傳輸過程; 5. 節(jié)點(diǎn)可帶點(diǎn)接入或撤出; 6. IIC的SCL和SDA都需要接上拉電阻,保證空閑狀態(tài)的穩(wěn)定性; 由主機(jī)發(fā)出起始信號(hào)和停止信號(hào)。 起始信號(hào): 當(dāng)SCL保持為高電平時(shí),SDA產(chǎn)生一個(gè)下降沿,則代表起始信號(hào); 停止信

    2024年02月13日
    瀏覽(18)
  • I2C協(xié)議介紹以及HAL庫(kù)實(shí)現(xiàn)I2C對(duì)SHT30溫濕度采樣

    I2C協(xié)議介紹以及HAL庫(kù)實(shí)現(xiàn)I2C對(duì)SHT30溫濕度采樣

    (1)I2C協(xié)議簡(jiǎn)介 I2C總線是Philips公司在八十年代初推出的一種串行、半雙工的總線,主要用于近距離、低速的芯片之間的通信。 12C Bus(IIC, Inter-Integrated Circuit Bus)是由一根數(shù)據(jù)線SDA用于收發(fā)數(shù)據(jù),一根時(shí)鐘線SCL用于通信雙方時(shí)鐘的同步,利用上拉電阻將它們拉成高電平(表示總

    2023年04月24日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包