【阿福的隨筆】淺談 I3C Legacy 與 I2C 差異

1 何謂 I3C

I3C 是 Improved Inter Integrated Circuit ( 改進的內部集成電路 ) 的縮寫,也可以說是 I2C 的改進版本,是 MIPI(Mobile Industry Processor Interface)這個聯盟推出的,
可以向下相容於 I2C ,但是不支援 10bit slave address 的這種比較特殊的擴展的 slave address 。MIPI I3C的連結如下=>

https://www.mipi.org/specifications/i3c-sensor-specification

Philips I2C version 5 規格書的連結如下=>

https://web.archive.org/web/20121017153327/http://www.nxp.com/documents/user_manual/UM10204.pdf

1.1 I3C 的專業術語

  • Signal pins ( 信號腳位 ) : 這個與 I2C 的定義相同都是由 Clock 的 SCL 和 Data 的 SDA 的兩個信號,速度最快能到 5Mhz 
  • Framing ( 框架 ) : 在傳統和標準數據速率模式中,框架是與 I²C相同的,不同點是在 I²C 中,START 符號通常由總線控制器生成,但在 I3C 中,即使是目標設備也可能將 SDA 拉低以指示它們要開始一個幀。這用於實現一些高級 I3C 功能,例如帶內中斷 ( in-band interrupts )、多控制器支持 (multi-controller support =>多個 Masters )和熱連接 ( hot-joins )。啟動後,總線控制器通過驅動SCL重新啟動時鐘,開始總線仲裁過程 ( 最快將 SDA ( Address ) 拉低的優先權越高 )。 
  • Ninth bit ( 第9個位元 ) : 對於每次傳輸的第一個(地址)字節和 I²C都一樣,是 Master( Controller ) 傳Address,而 Slave Device ( Target ) 回 ACK,I3C 的操作方式也是相同,但是當與 I3C 目標 ( Target ) 通信( Address回 ACK ) 之後,傳輸的資料的第 9 位,則不是單純的回 ACK拉低 SDA電位,而是稱為 T bit,是寫入數值的奇校驗位 ( Odd parity ),例如寫入值為 0x83 則 T bit 為0,若是 0x82 則 T bit為 1。 
  • Bus arbitration ( 總線仲裁 ) : 需要 Target 端配合,先拉低先搶到=>

從START(但不是重複的START)之後的地址需要仲裁,這意味著主機和一個或多個Slave都可以​​嘗試使用SDA將地址驅動到總線上。這樣的地址被定義為可仲裁地址區。 仲裁模型遵循常見的“開漏”方法。然後,所有發送地址的設備(無論是主設備還是從設備)都應遵循相同的規則:

(1)如果要發送的當前位為0,則設備應在SCL的下降沿之後將SDA驅動為低電平,並保持低電平直到SCL的下一個下降沿。 注意: 其他設備也可能會將SDA驅動為低電平,但這是可以接受的。

(2)如果要發送的當前位為1,則設備不應驅動SDA,而應在SCL的下降沿驅動High-Z SDA。

此外,設備應在SCL的上升沿監視SDA,以確定另一台設備是否已將SDA驅動為低電平。如果另一個設備將SDA驅動為低電平,則該設備已“失去”仲裁且不得進一步參與該地址溝通。也就是說,該設備不得再發送任何位元,但可以等待將來的 START(而不是重複的START)。

1.2 I3C 的通訊流程方塊圖

在 I3C 中,與 I²C 最為接近的是 Legacy I²C ( 傳統的 I²C 模式 ),但使用地址的限制上還是有一些差異



1.3 I2C 和 I3C 的預留位址的定義

I2C使用的 Slave Address預留的位址在 Philips I2C version 5 規格書的 3.1.12 的 Table 4

以8 bit ( 7bit Address + R/W bit )來重新說明一下

0000 0000B (00h) 是全域廣播呼叫模式 ( 對應 3.1.13 General call address )

I2C 總線的每個設備都會被廣播到。然而,如果一個設備不需要任何廣播內提供的數據

,它可以通過不發出確認來忽略此地址。但 主控端不知道會有多少設備回覆,只會知道有回覆或是全部沒回覆而已。

例如 : 在廣播呼叫 (0000 0000) 之後,第二個字節發送 0000 0110 (06h) ,是讓所有能接收廣播數據的設備進行 軟件復位 ( 對應 3.1.14 Software reset )。

 

0000 0001B (01h) 是起始字節 ( 對應 3.1.15 START byte)                        

是為了讓一些設備有更多的起動時間,不需回應此 Start byte 的 ACK

 

0000 001xB (02~03h) 是CBUS 位址 ( 對應 Table 4 的註解第3條 )

CBUS 地址已被保留以實現 CBUS 兼容和 I2C 總線的混合同一系統中的兼容設備。 I2C 總線兼容設備不允許響應接收這個地址。

 

0000 010xB (04~05h) 是預留給不同格式使用 ( 對應 Table 4 的註解第4條 )

為不同總線格式保留的地址以使 I2C 和其他協議能夠混合使用。

 

0000 011xB (06~07h) 是留作未來用途 

0000 1xxxB  (08~0Fh) 是進入高速模式的控制碼

 

1111 1xxxB (F8~FFh) 是 read Device ID ( Table 4 上只規劃讀,但下法需要先寫再讀,而且需要設備支援 )

設備 ID 字段是一個唯讀的 3 字節(24 位元)

以下信息:

  • 帶有製造商名稱的十二位,每個製造商唯一(例如NXP => 0000 0000 0000 0000B)
  • 由製造商分配的帶有部件標識的九位(例如PID => 0 0001 1010B)
  • 由製造商分配的帶有模具版本的三位(例如Version 1 => 001B)

 

用法舉例是 Start 0xF8 ReStart 0xF9 之後就是讀回3 Bytes ( 24Bits ) 

1111 0xxxB (F0~F7h) 是10bits 的定址開頭,其中 1111 0 之後2bits 是擴展位址的 Address9 & Address8 ,最後的 bit 還是一樣是R/W,第2 byte 也是8 bits 的擴展位址 Address7~ Address0 

但基本上使用 Slave Address 來 read Device ID的做法,已經是很少有裝置支援了,通常會以各自規劃的 Register Command 的 Read ID來取代此做法



I3C 可使用 Slave Address ( Target Address ) 的範圍如下,

圖Table 9 I3C Slave Address Restrictions 是放在 I3C Spec V1.0,而 V1.1是放在 Table 8

I3C 的預留位置 ( 以8 bit (8`h) => 7bit Address + R/W bit 和7bit (7`h)來重新說明一下 ),

有些是與 I2C 相同的

0000 0xxxB  (8`h00~07 / 7`h00~03 ) 是 不使用,和保留給 I2C 使用的

0000 1xxxB  (8`h08~0F / 7`h 04~07) 是 有條件下使用,僅在不支持 Legacy I2C 設備時可用總線上存在 I2C“高速模式”( 7`h 06 & 07在 Table 9的二進制是有誤的 )

0001 000xB ~ 0111 101xB(8`h10~7B / 7`h08~3D) 是可使用的

0111 110xB (8`h7C~7D / 7`h 3E) 是 I3C保留廣播使用

0111 111xB ~ 1011 101xB(8`h7E~BB / 7`h3F~5D) 是可使用的

1011 110xB (8`hBC~BD / 7`h5E) 是 I3C保留廣播使用

1011 111xB ~ 1101 101xB (8`hBE~DB / 7`h5F~6D) 是可使用的

1101 110xB (8`hDC~DD / 7`h 6E) 是 I3C保留廣播使用

1101 111xB ~ 1110 101xB (8`hDE~EB / 7`h6F~75) 是可使用的

1110 110xB (8`hEC~ED / 7`h 76) 是 I3C保留廣播使用

1110 111xB (8`hEE~EF / 7`h77) 是可使用的

1111 000xB ~ 1111 001xB (8`hF0~F3 / 7`h78~79) 是有條件使用的,不能使用在 BUS 有存在 Legacy I2C 設備的時候

1111 010xB (8`hF4~F5 / 7`h7A) 是 I3C保留廣播使用

1111 011xB (8`hF6~F7 / 7`h7B) 是有條件使用的,不能使用在 BUS 有存在 Legacy I2C 設備的時候

0xF8~0xFF 在I2C 是read Device ID =>

1111 100xB (8`hF8~F9 / 7`h7C) 是 I3C保留廣播使用

1111 101xB (8`hFA~FB / 7`h7D) 是有條件使用的,不能使用在 BUS 有存在 Legacy I2C 設備且支援 read Device ID的情況之下

1111 110xB (8`hFC~FD / 7`h7E) 是 I3C 廣播位址

1111 111xB (8`hFE~FF / 7`h7F) 是 I3C保留廣播使用

以 兩個規格書的保留位址來看,雖然保留的位址各有定義,但只要使用 I3C 說明下的 可使用的位址就可以了 ( 和 I2C 的可使用位址是重疊的  ),歸納一下,若是有條件的情況都先視為不可使用的話, 以7bits來說的使用的地址為 7`h08~3D ,3F~5D ,5F~6D,6F~75 和77  => 54+31+15+7+1 = 108 個可使用的位址。

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論

訪客

訪客

2022年6月30日
請問I3C的T bit是跟ACK一樣是由接收端(receiver)發送嗎?如果是的話接收端(receiver)是怎麼判斷奇校驗位 ( Odd parity )?