IIC總線協議——esp32學習筆記
文章目錄
- IIC總線協議——esp32學習筆記
- 零、前言
- 一、IIC總線
- 二、IIC總線的通信程序
- 1.主機發送起始信號啟用總線
- 2.主機發送一個位元組資料指明從機地址和后續位元組的傳送方向
- 3.被尋址的從機發送應答信號回應主機()
- 4.發送器發送一個位元組資料
- 5.接收器發送應答信號回應發送器
- n.通信完成后主機發送停止信號釋放總線
- 三、IIC總線的尋址方式
- 四、IIC總線信號的實作
- 1.起始信號和停止信號
- 2.位元組傳送和應答
- 3.同步信號
- 4.典型IIC時序
- 主機向從機發送資料
- 從機向主機發送資料(尋址之后)
- 主機先向從機發送資料,然后從機再向主機發送資料(這種情況在一次IIC通信中不可能完成)
- 5.Exynos4412下的IIC控制器
- 1、暫存器
- 2、Exynos4412 IIC控制器的特點
- 3.使用IIC控制器
- 4.仲裁機制
- 5.當作業在不同模式時,IIC控制器的作業邏輯
- 主機發送(Master/Transmitter mode)模式的作業流程
- 主機接收(Master/Receiver Mode)模式的作業流程
- 從機發送資料(Slave/Transmitter mode)模式的作業流程
- 從機接收資料(Slave/Receiver Mode)模式的作業流程
- 6.4412IIC的引腳
- 6.IIC暫存器詳解(基于Exynos4412)
零、前言
學習esp32時了解到了IIC總線,寫一個學習筆記記錄一下,
IIC總線(Inter-Integrated Circuit)是串行、半雙工總線主要用于近距離、低速的芯片之間的通信;IIC總線有兩根雙向的信號線,一根資料線SDA用于收發資料(只收不發或者只發不收),一根時鐘線SCL用于通信雙方的時鐘同步;IIC總線硬體結構簡單,成本較低,

一、IIC總線
IIC是一種多主機總線,連接在IIC總線上的器件分為主機和從機,主機有權發起和結束一次通信,而從機只能被主機呼叫;當總線上有多個主機同時啟用總線時,IIC也具備沖突檢測和仲裁的功能來防止錯誤的產生;每個連接到IIC總線上的器件都有一個唯一的地址(7bit),且每個器件都可以作為主機也可以作為從機(同一時刻只能有一個主機),總線上的器件增加和洗掉都不會影響其他器件正常作業;IIC總線在通信時總線上發送資料的器件叫做發送器,接收資料的器件為接收器

二、IIC總線的通信程序
1.主機發送起始信號啟用總線
主機A發送起始信號,其他主機與從機都會接受到起始信號,類似于=廣播,此時其他主機不會再使用主線,主線被占用
2.主機發送一個位元組資料指明從機地址和后續位元組的傳送方向
前7bit對應的時從機的地址,最后1bit對應是確定后續的資料是主機發給從機(最后一位為0)或者從機發給主機(最后一位是1),然后從機會先提取高7bit資料于自己的地址進行比較,確定是否與主機通信;然后提取最后一位資料,確定通信型別
3.被尋址的從機發送應答信號回應主機()
主從機通信時,被尋址的從機接收到主機的呼叫,就會發送應答信號,告訴主機已經接收
4.發送器發送一個位元組資料
5.接收器發送應答信號回應發送器
發送器和接收器既有可能是主機也有可能時從機,只有第一個byte是主機發送給從機,后面的就不一定,要看第一個byte的最后一位,
注意:不管發送多少個位元組,主從機的通信方向都不能改變
… …(回圈步驟4、5)
n.通信完成后主機發送停止信號釋放總線
停止信號以廣播的形式發送后,其他主機也能接收到,此時總線就空閑了,
三、IIC總線的尋址方式
1.IIC總線上傳送的資料是廣義的,既有地址(主機發送的第一個位元組),又有資料,
2.主機再發送完起始信號后必須先發送一個位元組的資料,該資料的高7位為從機地址,最低位表示后續位元組的傳送方向,’0‘表示主機發送資料,’1‘表示主機接收資料;總線上所有的從機接收到該位元組資料后都將這7bit地址與自己的地址作比較,如果相同,則認為自己被主機尋址,然后再根據第8位將自己定為發送器和接收器,
四、IIC總線信號的實作
1.起始信號和停止信號

SCL與SDA在空閑時都是處于高電平的
SCL為高電平時,SDA由高變低表示起始信號
SCL為高電平時,SDA由低變高表示終止信號
起始信號和終止信號都由主機發出,起始信號產生后總線處于占用狀態,停止信號產生后總線處于空閑狀態,
2.位元組傳送和應答

IIC總線通信時每個位元組為8bit*(類比于uart可以為4,5bit或其他,IIC總線通信是每個位元組只能是8bit)*,資料傳輸時,先傳輸最高位,后傳送低位,發送器發送完一個位元組資料后接收器必須發送1位應答位(應答資料為低電平)來回應發送器(不會丟包),即一幀共有9位,資料線上高電平時表示為1,低電平時表示為0,
3.同步信號
首先,通信的程序會存在兩個基本的問題:
1、什么時候發送和接收資料?(由于主機與從機是兩個不同的器件,為了確定同時收發資料,必須保證接收器知道發送器要發送資料)IIC使用起始信號來解決,
2、對于高電平信號或者低電平信號如何確定為1個還是多個?
串口通過波特率來解決(時間),SPI通過時鐘線SCLK來解決這兩個問題,

此時就要來聊一下IIC解決這兩個問題的方式:
IIC總線在進行資料傳輸時,時鐘線SCL為低電平期間發送器向資料線上發送一bit資料,在此期間資料線上的信號允許發生變化,時鐘線SCL為高電平期間接收器從資料線上讀取一位資料(上升沿采樣),在此期間資料線上的信號不允許發生變化,必須保持穩定,可以發送任意多個byte,
注意最后還有一個電平變化,用于接收器應答,(此時SCL處于高電位SDA處于低電位,如果不想應答那就處于高電位)
4.典型IIC時序
主機向從機發送資料

主機發完最后一個位元組后,不想再次發送時,主機就可以直接發送停止信號
當從機不想接收信號時,主機沒有收到信號就會直接發送終止信號,結束通信,
從機向主機發送資料(尋址之后)

當從機發完最后一節資料時,主機就會拒絕應答,此時主機會發送終止信號,結束通信,
主機先向從機發送資料,然后從機再向主機發送資料(這種情況在一次IIC通信中不可能完成)

如果第二次通信時,發送停止信號,此時總線就處于空閑狀態,使用權可能被其他主機所占,
所以在主機開始第二次通信時,沒有發送停止信號,不會釋放總線,
注:陰影部分表示資料由主機向從機傳送,無陰影部分則表示資料由從機向主機傳送;A表示應答信號(ACK),A非表示非應答,S表示起始信號,P表示終止信號,
5.Exynos4412下的IIC控制器
1、暫存器
control register - I2CCON 設定IIC功能時主要來設定這個暫存器
control/status register - I2CSTAT 控制IIC功能以及顯示IIC的一些狀態的暫存器
Tx/Rx data shift register - I2CDS 用于發送和接收資料的暫存器
address register - I2CADD 地址暫存器,用于設定I2C的地址
2、Exynos4412 IIC控制器的特點
地址都為7位
標準模式下通信速度可達100kbit/s;極限模式下通信速度可達400kbit/s,
支持主機發送,主機接收,從機發送,從機接收,
支持(中斷發送一個資料后都會產生中斷信號)和輪循的方式
3.使用IIC控制器

需要先向I2CCON和IICSTAT設定這兩個暫存器的值,通過他們來確定作業狀態,
利用IICDS發送資料時,先向IICDS寫入資料,然后IICDS會寫入到Shift Register(移位暫存器)中,這個Shift Register再通過移位的方式通過SDA,一位一位的發出去,當IICDS接收資料時,會通過SDA先接收資料(一位一位的)到Shift Register中,再拷貝到IICDS中
當IIC控制器作為從機的時候,主機需要對他進行尋址,從機尋址時線通過Shift Register接收到主機發送的地址,然后通過Comparator(比較器)與自身的地址進行一個比較
4.仲裁機制
當有多個主機使用總線時,就需要用到仲裁機制來判定哪一個主機來使用這個主線,
5.當作業在不同模式時,IIC控制器的作業邏輯
主機發送(Master/Transmitter mode)模式的作業流程

寫程式時,需先配置成主機發送(Tx)模式,寫一個從機地址到IICDS暫存器中,然后向IICSTAT暫存器中寫入0xF0(產生起始信號),然后從機的地址會發出去,然后要等待從機的應答,應答后,interrupt is pending(中斷位會自動掛起,變成1),接下來就要根據自己的需求來確定是否繼續通信 ,
if N線:向暫存器IICDS中寫入想要發送給從機的資料,然后會清理中斷掛起位(重新變為低電平,resume),此時IICDS中的資料被發送,
if Y線:向IICSTAT中寫入0xD0(停止信號),清理中斷掛起位,等待停止信號結束,此時整個通信結束
主機接收(Master/Receiver Mode)模式的作業流程

不同:將IIC控制器配置成主機接收模式,起始信號和終止信號不同,從IICDS中讀取資料
從機發送資料(Slave/Transmitter mode)模式的作業流程

從機接收資料(Slave/Receiver Mode)模式的作業流程

一般來說4412很少作為從機,
6.4412IIC的引腳

6.IIC暫存器詳解(基于Exynos4412)
**
**
IICCON 控制IIC控制器的一些功能

整個暫存器共有32位,但第8位到第31位沒有用(Reserved),
第7位,當將它設定為1就會發送應答信號,設定為0,就不會發送應答信號(接收資料時有意義)
第6位,時鐘源的分頻,如果將這一位設定成0,就會對這個時鐘進行16倍的分頻,設定為1進行512倍的分頻,分頻越高,通信速度會慢一些,
第5位,發送和接收的中斷,如果設定成0就是關閉這個功能,設定為1就是開啟這個功能(IIC控制器當他發送或者接受完一個資料時都會產生中斷信號來通知主機)
第4位,中斷掛起標志位,用來顯示中斷有沒有發生,這一位是建立在第5位的基礎上的,當第五位打開時,產生中斷后,第4位的值會自動變成1(中斷產生),SDA接收玩完資料時,還應該將第4位清零
第零到三位,影響時鐘頻率,進而影響通信速率,
IICSTAT 控制IIC控制器的一些功能,以及顯示IIC控制器的狀態

整個暫存器共有32位,但第8位到第31位沒有用(Reserved),
第7:6位是模式的選擇:
00 = Slave receive mode
01 = Slave transmit mode
10 = Master receive mode
11 = Master transmit mode
第5位,產生起始和停止信號,1:起始(主線繁忙),0:停止(主線空閑),想看主線是否繁忙只需看第5位的狀態就行
第4位,0:關閉資料的接收和發送;1:使能資料的接收和發送
第3:0位,都是狀態值
IICADD 設定IIC控制器的地址(一般作為從機時才會使用)
第7:0位,寫入地址
IICDS 對外進行發送和接收資料(由于是半雙工,發送和接受不能同時使用)
第7:0位,存盤接識訓者發送的資料,
IICLC 濾波器相關
產生起始和停止信號,1:起始(主線繁忙),0:停止(主線空閑),想看主線是否繁忙只需看第5位的狀態就行
第4位,0:關閉資料的接收和發送;1:使能資料的接收和發送
第3:0位,都是狀態值
IICADD 設定IIC控制器的地址(一般作為從機時才會使用)
第7:0位,寫入地址
IICDS 對外進行發送和接收資料(由于是半雙工,發送和接受不能同時使用)
第7:0位,存盤接識訓者發送的資料,
IICLC 濾波器相關
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/321451.html
標籤:其他
上一篇:【硬體】對電源模塊的梳理(包括DC-DC、LDO、TVS等)
下一篇:一種利用人參酒自動診斷失眠的儀器
