I2C Protocol in 3min

Johnny Chang
Jul 29, 2023

簡單說明I2C Protocol 以及SMBus

I2C 特點

I2C是一個兩線制的通訊協定,其中包括一條數據線(SDA — Serial Data Line)和一條時鐘線(SCL — Serial Clock Line)。I2C的主要優勢在於可以連接多個IC,同時只使用兩條線,這使得它在連接多個設備時節省了硬體資源。

  1. I2C只需要兩條線,即SDA和SCL,便可實現多個IC之間的通信。這相較於其他通訊協定,節省了硬體連接的複雜性和成本。
  2. 多Master架構:I2C支援多Master的架構,這意味著多個主機可以在同一條I2C總線上進行通信。這使得在需要MultiMaster和MultiSlave的情況下,I2C表現得非常靈活。
  3. 速度限制:由於I2C使用兩條線進行通信,其速度通常比其他通訊協定如SPI(Serial Peripheral Interface)和UART(Universal Asynchronous Receiver/Transmitter)慢。這對於一些高頻率應用來說可能是一個限制。
  4. 長距離通信限制:由於I2C是基於電壓水平的,對於長距離通信而言,信號可能會受到雜訊的影響而變得不穩定。對於長距離通信需求,其他協定可能更合適。

I2C 溝通流程

  • Master(主機)發送Start信號:通信開始時,主機會在SDA線上發送低電平的信號,而在SCL線上保持高電平。這樣的信號組合稱為Start信號,用於啟動通信。
  • Master發送地址和讀寫位元:主機將要訪問的從機(Slave)的7位元地址發送到SDA線上。最後一位元(第8位元)用來指示讀取(1)或寫入(0)操作。
  • Slave發送Ack:如果選中的從機存在並收到正確的地址,將SDA線拉低。
  • Master和Slave進行數據交換:在確定了要通信的Slave後,Master和Slave之間就可以交換數據。數據通常是8位元的位元組。此時SCL都是由Master控制。
  • 在SCL為HIGH時,SDA必須保持穩定:當SCL為HIGH時,SDA必須保持穩定。Slave端可以通過拉低SCL線來暫停Master的時鐘,這使得Slave有足夠的時間來處理數據或執行其他操作,這樣稱為”Clock Stretching”(時鐘拉伸)功能。
  • SDA只能在SCL為LOW時改變:當SCL為LOW時,SDA才能改變,Master和Slave都可以在此時將數據放置或讀取到SDA線上。
  • 每個byte跟著一個ACK位元:在每個8位元的位元組之後,接收方(Master或Slave)會發送一個ACK位元來確認接收到的數據。如果接收方成功接收到數據,則在SCL為LOW時,它會拉低SDA線發送一個ACK信號。否則,如果接收到的數據有誤或者接收方無法處理,則接收方不會發送ACK信號,Master可以採取相應的錯誤處理措施。
  • Master發送Stop信號:當通信結束時,主機會在SDA線上發送一個高電平,而在SCL線上保持高電平,稱為Stop信號。 只有此時STOP/START SIGNAL SCL在High的時候可以SDA可以更動

SMBus

  • ALERT PinL SMBUS多I2C一條線,ALERT雖名為警訊但其實是中斷(Interrupt)Pin
  • Slave可以將SMBSUS線路的電位拉低,這時就等於向Master發出一個中斷警訊,要求Master儘速為某一Slave提供傳輸服務。Master透過I2C的SDA跟SCL回應
  • 但要如何知道此次的通訊只是Master對Slave的一般性通訊?還是特別針對Slave的中斷需求而有的服務回應?這主要是透過Master發出的位址資訊來區別,若為回應中斷的服務,位址資訊必然是「0001100」,當Slave接收到「0001100」的位址資訊,就知道這是Master特為中斷而提供的服務通訊。因此,韌體工程師須留心,規劃時必須讓所有的Slave都不能佔用「0001100」這個位址,

--

--