--- title: I2C categories: I2C, Peripherals, STM32F4, STM32F429 ... I²C 簡介 ===================================== I²C(Inter-Integrated Circuit)是內部整合電路的稱呼,是一種串列通訊匯流排,由Philips公司在1980年代為了讓主機板、手機及嵌入式系統用以連接低速週邊裝置而發展,主要應用在board-to-board,它的設計並不能應用到長距離裝置的通訊,由於協定中從樸裝置位址只有7個位元,因此一組I²C的最多裝置位址定義至127個。 I²C只使用兩條雙向開放汲極(Open Drain)(master and slave只能把電位拉到LOW或是讓他OPEN)(串列資料(SDA)及串列時脈(SCL))並利用電阻將電位上拉。I²C允許相當大的工作電壓範圍,但典型的電壓準位為+3.3V或+5v。 I²C bus ................... .. image:: /hackpad.com_C2QDfQqCjxE_p.268476_1415256217724_300px-I2C.svg.png 藉由Master發送訊號來控制與Slave之間的通訊 I²C 特性 ................... - I²C 串列傳輸包括四個部分:起始信號、設備位址發送、數據傳送和停止信號。 - 只能Master<->Slave,無法Slave<->Slave,每個slave都要有一個特定且唯一的位址。 - START condition: SCL=High 且 SDA為負緣 - STOP condition: SCL=High 且 SDA=為正緣 .. image:: /i2c_condition.png - 由Master發送起始信號來開起通訊,所有的slave device接收到起始信號後會進入接收數據模式。接著Master需要發送通訊目標設備的address及R/W資訊。 - STM32F429提供兩種 address mode - 7bit and 10bit - 7bit mode: 發送 7bit 的address (MSB) 及一位元的 R(1)/W(0)後,該 address 的slave端會發送一個bit的 Ack(acknowledge) bit,ACK=0表設定成功(Slave把SDA拉到LOW),開始數據傳送。 .. image:: /i2c_com.png (7bit mode) - 10bit mode: 總共用兩個byte來傳送 address資訊。第一個byte的前五個位元需為 "11110" 來表示要使用 10-bit addressing。 .. image:: /i2c_10bit.gif (10bit mode) I²C on STM32F429-Discovery ===================================== touch panel ................... - `Data sheet `_ demo code: SCL: PA8 SDA: PC9 slave address: 0x82 (0x01000010) .. image:: /I2C_touchpanel_test.jpg .. image:: /i2c_scope_0.bmp