久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > ARM I2C波形控制

ARM I2C波形控制 時間:2019-08-08      來源:長沙中心,劉老師

一、I2C簡介

 I2C總線只需要兩條線,一條SDA數據線,一條SCL時鐘線;根據這兩條線的高低電平、上升沿、下降沿就可以實現主機與I2C設備的通訊;其中有:

(1)I2C總線相關

傳輸開始條件:SCL處于高電平,SDA下降沿時;

傳輸接收條件:SCL處于高電平,SDA上升沿時;

傳輸數據:開始傳輸后,SCL處于高電平時,SDA的數據為所傳輸的數據;

 回應:當傳輸完一個字節后,I2C設備需要回應一個ACK,這樣主機才繼續發送;因此回應信號是在傳輸完8bit后的下一個數據位(SDA值),當SDA為0表示有回應,為1表示沒回應;

 正常I2C總線的數據是:Start + I2C device address + R/W + ACK + Data(first byte)+ ACK + ... + Data(n)+ ACK + Stop

(2)I2C設備相關

 設備地址:有7位和10位兩種,具體見I2C設備芯片的DataSheet,由于目前用到的是7位,因此下面主要針對7位講述;在講I2C設備地址是有可能有兩種說法,主要是用8位表示還是用7為表示,比如對于我的OLED來說,當用8位表示時則為0x78地址,當用7位時則為0x3c(即0x78右移1為),在驅動中用0x78還是用0x3c要看具體平臺的I2C總線驅動,我在AMLOGIC平臺上用的是0x78,而在MV平臺上用的是0x3c;

 寄存器reg:一般的I2C設備芯片都有帶reg,一般在傳輸正式的數據之前需要先傳輸reg地址,比如我的OLED來說,在傳控制命令時需要先發送0x00的reg地址,在傳輸數據時需要發送0x40的reg地址;

二、調試及波形分析

 一般當我們拿到一個I2C設備時,就必須涉及到驅動的編寫,就比如對于OLED來說,就要用編寫OLED驅動,這樣我們才能控制它,對于OLED屏來說,第一步也是最重要的一步就是點亮它;當我們做完這一步,那后面剩下的就只是細節問題了;”萬事開頭難“,這句話真的不假,對于OLED來說,如何才能點亮,我們該怎么調試呢?當我們寫完OLED驅動,但OLED屏還是不亮,可能問題會出現在哪?是硬件問題還是軟件問題?;若為軟件問題,那會是I2C總線驅動問題,還是我們I2C設備驅動有問題?那么我們該如何判斷問題出現位置呢?這就需要我們對I2C總線上的數據進行分析;那么下面我將詳細講述如何獲取和分析I2C總線上的數據;

(1)示波器

 對于I2C總線的數據,我們要用到示波器,這樣我們才能抓取到信號,而且必須同時采集SDA和SCL的數據;該如何抓取呢?我這邊的方式是將示波器調成邊下降沿觸發模式(因為開始信號是SDA下降沿),并且設置成單次模式(這樣抓取完一次就會stop,便于我們數據分析);

(2)波形

 由于我的OLED設備的地址是0x78(8位),而第一次我必須將OLED設置成off狀態,通過命令表可以查到,必須發生0xAE,而剛剛有講到在發送命令前必須先發送寄存器reg地址,即0x00;于是我發送的數據為0x78+0x00+0xAE;下面是我用示波器抓取到的波形:

 分析(其中黃色的為SDA信號,淺藍色為SCL信號):從上述波形中我們可以讀取到數據依次是:01111000 0 00000000 101011100;即:0111100(7位OLED設備地址) + 0( 讀寫為,0為寫,1為讀)+0(ACK回應)+00000000(寄存器reg)+ 10101110(0xAE OLED off命令); 

下面當我來隨便發送一個地址時,比如當我發送0x56(8位地址),測到的波形如下:

 分析:從波形可看出數據依次為:010101101 即0101011(設備地址)+0(讀寫位)+1(NACK無應答),由于沒有相應的I2C設備因此無應答ACK信號,于是就停止傳輸;

三、總結

 由以上可知,可以通過查看I2C總線數據來確認跟蹤I2C設備,已更好地確定是軟件問題還是硬件問題;

上一篇:TCP/IP

下一篇:基于TCP/UDP的Socket編程

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部