文章目錄
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]】
1.3數據傳輸格式
-
主機寫數據:
-
主機讀數據:
1.4信號傳輸時序圖
- S3C2440的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低電平,低電平
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控制器流程框圖
2.3IIC讀寫操作步驟
在發送模式下,當數據已經發送出去後,IIC會等待IICDS寄存器接收新的數據
- 1.IICDS = val;
- 2.發完數據,產生中斷,拉低SCL
- 3.中斷程序裏,判斷狀態,IICDS = val2,IIC繼續工作
在接收模式下,IIC接口會等待直到你把IICDS中的數據讀走,在此期間,SCL拉低
- 1.發起傳輸,接收DATA
- 2.接收到數據之後,產生中斷,SCL拉低
- 3.中斷程序中,判斷,設置中斷,val = IICDS,IIC繼續工作,繼續接收收據
003 程序框架
- 框圖解析
- 各個文件的功能
004 編程流程
如果對你有幫助的話不妨點個贊👍鴨~