日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

I2C总线协议

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 I2C总线协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 簡介

??????I2C (Inter-Integrated Circuit),是一種串行通信總線,用于連接微控制器及其外圍設備,實現主控制器和從器件間的主從雙向通信,是一種同步半雙工通信(兩端時鐘頻率一致,雙向通信,但不能同時進行數據收發)。

2. 原理

??????I2C通信屬于串行通信,具有兩根串行信號線:數據線(SDA),時鐘線(SCL)。如下圖所示,主控制器與從器件(一個或多個)都通過兩根信號線連接,信號線上主機和從機都可以扮演發送器和接收器的角色。為確保傳輸過程的指向準確性,每個接到I2C總線上的器件都有唯一的地址(7位從器件專用地址碼),可實現制定從機的定向傳輸與群發傳輸。

2.1 信號類型

??????同時,為確保傳輸穩定,所有連接在同一I2C總線上的設備共用一個時鐘。I2C 總線在傳送數據過程中共有以下幾種類型信號:
(1) 開始信號/結束信號

  • SCL 為高電平時,SDA 由高電平向低電平跳變,開始傳送數據。
  • SCL 為高電平時,SDA 由低電平向高電平跳變,結束傳送數據。

(2) 應答信號/非應答信號

  • IIC 總線協議規定,每傳送一個字節數據后(8bit),都要有一個應答信號以確定數據傳送是否被對方收到。即一個字節傳輸的8個時鐘過后的第9個時鐘期間,接收器必須回一個ACK應答信號給發送器,這樣才能進行數據傳輸。
  • 應答信號由接受設備產生,在SCL為高電平期間,接受設備將SDA拉低為低電平,表示數據傳輸正確,產生應答(ACK),SDA拉高則表示數據傳輸失敗,產生非應答位(NACK)。

(3) 閑置狀態/被占用狀態

  • 在主機發送起始信號后,且未發送終止信號期間,總線處于被占用狀態。
  • 發送終止信號后,總線處于閑置狀態,SCL與SDA同時為高電平。

2.2 總線讀寫流程

??????I2C總線進行數據傳送時,SCL時鐘信號為高電平期間,SDA數據線上的數據必須保持穩定,只有在時鐘線上的信號為低電平期間,數據線上的高電平或低電平狀態才允許變化。 當一個字節按數據位從高位到低位的順序傳輸完后,緊接著從機將拉低SDA線,回傳給主設備一個應答位ACK, 此時才認為一個字節真正的被傳輸完成 ,如果一段時間內沒有收到從機的應答信號,則自動認為從機已正確接收到數據。
I2c總線寫通信過程:

  • 主機在檢測到總線空閑的狀況下,首先發送一個START信號掌管總線;
  • 發送一個地址字節(8 bit),其中bit0-6位為從機地址,存放從機唯一地址;bit7位為讀寫位(R/W),0表示write主機 ->從機,1表示read 從機->主機;
  • 主機發送地址時,總線上每個從機都會將7位地址與自己的地址進行比較,若相同,則將匹配成功,發送應答信號(ACK),確定發送器和接收器;
  • 主機收到ACK后開始發送第一個字節(Command),對應從機中要寫入的寄存器;
  • 從機接收到Command后,從機發送ACK;
  • 主機收到ACK后開始發送第一個數據字節:bit0-7(8bit數據,高到低),從機收到數據后,發送應答ACK;
  • 繼續發送數據,n幀;
  • 主控發送完全部數據后,發送一個停止位STOP,結束整個通訊并且釋放總線;
    *ps 叢機尋址方式除了常規的7位尋址外,還有10位尋址方式,通過兩個字節發送,并在第一個字節高位添加固定標志數據以坐區分尋址方式。

    I2c總線讀通信過程:
  • 主機產生START信號,隨后發送從機地址(7bit)+0(Write);
    *方向仍然是寫,待接收到從機發送的ACK應答后,配對成功。
  • 主機接收到ACK后,發送8bit內存地址(Command對應從機相應寄存器地址),從機接收到后,內部尋址并提取數據,返回ACK;
  • 主機接收到ACK后,重新產生START信號,再一次發送從機內存地址,(7bit)+1(Read),從機接收到后返回ACK;
    *方向設置為讀,主機設置為接收模式
  • 主機接收到ACK后,做好接收從機信息的準備,現在即可接收1bit的數據。
    *主機不向從機發送應答信號,接收完畢后直接發起終止信號。
  • 主機接收全部數據后,產生STOP信號,終止通信,總線變為閑置狀態。
  • 3. 應用實例:I2C控制溫感IC

    以溫度傳感器MAX1617A為例,對照手冊可查找到以下數據:

    • Command 寄存器對照表如下,可根據Command表查找從機對應寄存器地址。

    • 溫度數據返回格式如下所示:

    通過以上數據,我們即可有思路,對照寫入讀寫過程:

    • 寫入時,輸入Command 使用: 0x0B,0x0C 寫入溫度上限與下限值;
    • 讀取時,輸入Command使用:0x00,0x05,0x06 讀當前溫度,與前面設置的溫度上限與下限值;

    邏輯分析儀數據采樣如下所示:

    • 寫入過程:

      0x30為 從機地址0x18<<1 + 讀寫位(0);
      0x0B為 Command,對應從機寄存器存放地址;
      0x00位 將寫入的數據;
      波形如下所示:


    • 讀取過程:
  • 讀當前溫度

    讀過程中,方向先為寫入,后為讀取
    0x31,為 從機地址0x18<<1 + 讀寫位(1);
    0x1A,為返回溫度值,換算得到正好是小編當前溫度26度。

  • 讀溫度上限:

  • ??????
    ??????

    ??????

    3.讀溫度下限:
    ??????
    ??????

    ??????

    總結

    以上是生活随笔為你收集整理的I2C总线协议的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。