【學習筆記】I2C通訊詳解 | 你真的從全面瞭解IIC了嗎?

001I2C協議

1.1相關介紹

  • I2C Bus——Inter-Integrated Circuit 即集成電路總線
  • I2C總線端口爲漏開結構,因此一般需要**加上拉電阻**Rp,通常選用5K~10KΩ
  • I2C總線以字節爲單位收發數據,一個字節爲一幀,數據傳輸的次序爲從**最高位到最低位**
  • I2C由**數據線(SDA)** 與 時鐘線(SCL) 組成
  • SDA:Synchronous Data Adapter (同步數據銜接器)
  • SCL:Serial Communication Loop(串行通訊環路

1.2硬件原理SCH

主從結構:一主[Master]多從[Slave]
IIC主從結構

1.3數據傳輸格式

I2C數據傳輸格式

  • 主機數據
    I2C數據傳輸格式

  • 主機數據
    I2C數據傳輸格式

1.4信號傳輸時序圖

  • S3C2440的i2c時序圖
    I2C時序圖
  • SCL上拉電阻的作用:在第9個時鐘之後,雙方中若有一方處理還未完成,它可以**一直把SCL拉低,當SCL一直爲低電平時,雙方都不應該操作SDA總線**。
1.4.1讀寫流程
  • 1.前8個clk(7bit地址 + 1bit讀/寫)
    • 從設備不影響總線,從設備不去動三極管
    • 主設備決定數據
  • 2.第9個CLK,由從設備決定數據
    • 主設備不驅動三極管
    • 從設備決定數據
      • SDA高:無ACK
      • SDA低:有ACK

1.5信號解析

  • 起始信號[Start]:在SCL保持高電平時,SDA下降沿
  • 讀寫位:【0寫1讀】
  • 數據SCL低電平時,SDA可變化SCL高電平SDA不變
  • 終止信號:在SCL高電平時,SDA上升沿
  • 迴應信號[ACK]:SDA低電平,低電平
    i2c信號解析

1.6如何在SDA上實現雙線傳輸

  • 1.主設備發送時,從設備不發送:可以通過SCL區分控制
  • 2.主設備發送時,從設備的”發送“引腳不影響數據:使用開極電路
1.6.1開極電路

開極電路

A B SDA
0 0 1(由上拉電阻決定)
0 1 0
1 0 0
1 1 1
  • SDA上拉電阻的作用:當A、B都低電平時,三極管都不導通時,SDA取決於外界電路,當什麼都不接時,SDA懸空無法獲取電平,故接上拉電阻。

開極電路驅動思想
  • 當某個設備不想影響SDA總線時,就不驅動三極管
  • 輸出高電平,都不驅動三極管
  • 輸出低電平,就驅動三極管

002 S3C2440的IIC控制器

一般主控芯片都有IIC控制器,沒有IIC控制器的可以用管腳模擬

  • IIC控制器簡化了IIC操作

2.1主從關係

Master Slave
Transmitter Receiver
Receiver Transmitter

2.2IIC控制器流程框圖

IIC控制器流程框圖

2.3IIC讀寫操作步驟

IIC讀寫操作步驟

在發送模式下,當數據已經發送出去後,IIC會等待IICDS寄存器接收新的數據

  • 1.IICDS = val;
  • 2.發完數據,產生中斷,拉低SCL
  • 3.中斷程序裏,判斷狀態,IICDS = val2,IIC繼續工作

在接收模式下,IIC接口會等待直到你把IICDS中的數據讀走,在此期間,SCL拉低

  • 1.發起傳輸,接收DATA
  • 2.接收到數據之後,產生中斷,SCL拉低
  • 3.中斷程序中,判斷,設置中斷,val = IICDS,IIC繼續工作,繼續接收收據

003 程序框架

IIC程序框架

  • 框圖解析

IIC程序框架解析

  • 各個文件的功能

在這裏插入圖片描述

004 編程流程

在這裏插入圖片描述


如果對你有幫助的話不妨點個贊👍鴨~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章