- I²C 簡介
1. I2C 名為 I²C(Inter-Integrated Circuit)是一種串列通訊匯流排。
2. 常見的I²C匯流排依傳輸速率的不同而有不同的模式,標準模式(100 Kbit/s)、快速模式(400 Kbit/s)、高速模式(4 Mbit/s)。
3. I2C 使用兩條雙向 open-drain channel,導通時是低電位,不導通時 float,所以利用電阻 ( pull up resistor ) 將電位拉高。
而兩條訊號線分別為 SDA ( 串列數據線 )、SCL ( 串列時鐘線 )。
* 註 : 資料出處, 成大資工 WiKi "I2C: Inter-Integrated Circuit" ( http://wiki.csie.ncku.edu.tw/embedded/I2C )
- I²C 訊號分析
1. 起始訊號 START : SCL 必須為 HIGH,且 SDA 為負緣。
2. 起始訊號 STOP : SCL 必須為 LOW,且 SDA 為正緣。
3. SCL 為 HIGH 時,表示 SDA 上的資料為有效,此時 SDA 的值不能改變。
4. SCL 為 low 時,SDA 的狀態可以改變。
* 註 : 資料出處, 成大資工 WiKi "I2C: Inter-Integrated Circuit" ( http://wiki.csie.ncku.edu.tw/embedded/I2C )
- I2C 寫入 ( 以 8 bit 為例 )
1. Master 發起 START 狀態後,傳輸 7 bits slave address 以及 1 Write bit,到第 9 個 bit 時,會變成由 slave 向 master 傳送 ack bit。
2. Master 收到 ack 後,會繼續切換 SCL,並在每一個 SCL 爲 high 時,依序送出資料的每一個 bit,到第 9 個 bit 時,slave 會向 master 傳送 ack bit。
3. 最後,master 送出 STOP 狀態結束這一回合的傳輸。
* 註 : 資料出處, 雷克斯の生活日誌 "I2C的工作原理與技術分析" ( https://rexpighj123.pixnet.net/blog/post/219960237-i2c%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E8%88%87%E6%8A%80%E8%A1%93%E5%88%86%E6%9E%90 )
- I2C 讀取 ( 以 8 bit 為例 )
1. Master 發起 START 狀態後,傳輸 7bit slave address 以及 Read bit,到第 9 個 bit 時,會變成由 slave 向 master 傳送 ack bit。
2. Master 收到 ack 後,就會繼續切換 SCL,之後就是 slave 向 master 傳送 data,當 master 讀完後,會發 ack 告訴 slave 收到 data 了。
3. 最後master 送出 STOP 狀態結束這一回合的傳輸。
* 註 : 資料出處, 雷克斯の生活日誌 "I2C的工作原理與技術分析" ( https://rexpighj123.pixnet.net/blog/post/219960237-i2c%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E8%88%87%E6%8A%80%E8%A1%93%E5%88%86%E6%9E%90 )
- I2C 方塊圖
* NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 565 )
1. 支持標準模式 100 Kbits/s,快速模式 400 Kbits/s。在特定 I2C 腳位上支持快速模式 plus 1 Mbits/s, 高速模式4 Mbits/s(僅作為從機)。
2. 支持數個 I2C 從機地址,從機地址可以選擇性地使用隱蔽位或地址範圍進行限定,以響應多個 I2C 總線地址。
3. 支持系統管理總線 ( SMBus )。
4. 對主機、從機和監控功能的單獨 DMA ( DIRECT MEMORY ACCESS ) 請求。
- I2C SCL 計算
" Normal SCL rate = Flexcomm clock rate/ ( DIVVAL + 1) / ( SCL high time + SCL low time ) "
400 KHz = 30 MHz / ( 14 + 1) / ( SCL high time + SCL low time )
( SCL high time + SCL low time ) = 5。MSTSCLHIGH is 0, MSTSCLLOW is 1
* NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 576 )
* NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 578 )
* NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 579 )
- I2C 暫存器
* NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 566 )
1. CFG : I2C 功能配置
2. STAT : I2C 主機、從機和監控的狀態暫存器
3. INTENSET : I2C 中斷設置
4. INTENCLR : 清除 I2C 中斷設置
5. TIMEOUT : 超時暫存器
6. CLKDIV : I2C clock 除頻器
* NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 566 )
7. MSTCTL : I2C master 控制暫存器
8. MSTTIME : I2C master 時序配置
9. MSTDAT : I2C master 寫入 data
* NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 566 )
10. SLVCTL : I2C slave 控制暫存器
11. SLVDAT : I2C slave 寫入 data
12. SLVDR0~3 : I2C slave 位址
13. SLVQUAL0 : 可以改變 SLVDR0 的位址解釋方式
- I2C 設定範例
2. 設定 System control,由 FCCLKSEL 暫存器將 FC clock 來源設為 FRO 12 MHz。設置 FRG 除頻器為 1 使 FCCLK 為 12 MHz。
* NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 66 )
* NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 73 )
3. Flexcomm 功能選擇 I2C
* NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 557 )
4. 設定 I2C 為 master,預設 100 KHz 的 SCL
計算 :
100 KHz = 12 MHz / ( 11 +1 ) / ( SCL high time + SCL low time)
( SCL high time + SCL low time) = 10
* NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 567 )
- I2C 寫入範例
當 I2C bus 處於等待且是空閒狀態,將第一筆參數 7 bit slave address + 1 Write bit 寫入 data 並發送 start 狀態指令後寫入,待 slave 回復 ack 後 MSTCODE 將轉為 TXREADY。相同流程再 次發送第二筆參數 data address 並發送 continue 狀態指令,等待 slave 回復 ack。
* NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 577 )
2. 將第三個參數所有數據一一發送,數據結束發送後 master 將發送 MSTSTOP 狀態指令,結束通訊。
- I2C 讀取範例
當 I2C bus 處於等待且是空閒狀態,將第一筆參數 7 bit slave address + 1 Write bit 寫入 data 並發送 start 狀態指令後寫入,
待 slave 回復 ack 後 MSTCODE 將轉為 TXREADY。相同流程再次發送第二筆參數 data address 並發送 continue 狀態指令,等待 slave 回復 ack。
2. 收到 ack 後,將第一筆參數 7 bit slave address + 1 READ bit 寫入 data 並發送 continue 狀態指令,等待 slave 回復 ack 。
3. 當 slave 回復 ack 後,slave 便會將相對位址的數據發送出來,此時就能讀取到 bus 上由 slave 發送地的 data,當 data 傳送完 master 再發送 MSTSTOP 狀態指令,結束通訊。
- I2C 實測示波器波形
2. 再對 slave 的 0x01 位址讀取寫入的 5 筆數據。
3. SCL high time 和 SCL low time 變更實測。
* 註一 : 圖片來源 NXP LPC55S0x/LPC550x User manual ( UM11424.pdf )
評論