導航:首頁 > IDC知識 > iic主機

iic主機

發布時間:2020-08-29 08:31:32

1、iic匯流排從機沒有返回應答給主機

硬體上檢查下iic設備有沒有虛焊,匯流排有沒有沖突,示波器點下scl和sda線有沒有半高電平;
如果你的代碼不保證是成熟的,建議示波器觸發一下看看時序滿不滿足iic協議要求;
讀出的數據是匯流排默認狀態ff,說明設備沒響應,最有可能:
地址不對;
時序不對;
速率不匹配。

2、i2c主機和從機代碼可以燒到哪些晶元上

作為從機,只能接收主機的指令,不能主動發送數據。所以必須明白,所有的通信都是由主機發起的,主機要讀取從機的數據,首先向從機發送讀數據指令,從機接收到之後,發出應答信號,就會想主機發送要求的數據。當然,如果從機是遵循I2C的感測器晶元,肯定有對應的指令格式,你得先看看數據手冊。

3、I2C是什麼

I²C(Inter-Integrated Circuit)是內部整合電路的稱呼,是一種串列通訊匯流排,使用多主從架構,由飛利浦公司在1980年代為了讓主板、嵌入式系統或手機用以連接低速周邊裝置而發展。I²C(讀作"I-squared-C" ),還有可選的拼寫方式是I2C(讀作I-two-C)以及IIC(讀作I-I-C),在中國則多以"I方C"稱之。
I2C(Inter-Integrated Circuit)匯流排是由PHILIPS公司開發的兩線式串列匯流排,用於連接微控制器及其外圍設備。是微電子通信控制領域廣泛採用的一種匯流排標准。它是同步通信的一種特殊形式,具有介面線少,控制方式簡單,器件封裝形式小,通信速率較高等優點。I2C 匯流排支持任何IC 生產過程(CMOS、雙極性)。通過串列數據(SDA)線和串列時鍾 (SCL)線在連接到匯流排的器件間傳遞信息。每個器件都有一個唯一的地址識別(無論是微控制器——MCU、LCD 驅動器、存儲器或鍵盤介面),而且都可以作為一個發送器或接收器(由器件的功能決定)。LCD 驅動器只能作為接收器,而存儲器則既可以接收又可以發送數據。除了發送器和接收器外,器件在執行數據傳輸時也可以被看作是主機或從機(見表1)。主機是初始化匯流排的數據傳輸並產生允許傳輸的時鍾信號的器件。此時,任何被定址的器件都被認為是從機。
特徵:
1、只要求兩條匯流排線路:一條串列數據線SDA,一條串列時鍾線SCL;
2、每個連接到匯流排的器件都可以通過唯一的地址和一直存在的簡單的主機/從機關系軟體設定地址,主機可以作為主機發送器或主機接收器;
3、它是一個真正的多主機匯流排,如果兩個或更多主機同時初始化,數據傳輸可以通過沖突檢測和仲裁防止數據被破壞;
4、串列的8 位雙向數據傳輸位速率在標准模式下可達100kbit/s,快速模式下可達400kbit/s,高速模式下可達3.4Mbit/s;
5、連接到相同匯流排的IC 數量只受到匯流排的最大電容400pF 限制。
【詳細資料請參閱網路《I2C》或《IIC》】

4、主機如何確定IIC匯流排上的器件的地址?

IIC匯流排上的器件都是只通過SCL和SDA這兩條線連接到IIC匯流排上的嗎?
是的

IIC上的每個器件都要一個地址寄存器來確定自己的地址嗎?
不一定,很多器件都是通過硬體來確定地址的。
有的在出廠時地址就設置好了,用戶不可以更改;
有的確定了幾位,剩下幾位由硬體確定(比如有三位由用戶確定,就留有3個控制地址的引腳),此類較多;
還有的有地址寄存器。

"如果主機向從機發送地址,從機怎麼知道這個地址就是主機的,這個地址是怎麼計算出來的"
嚴格講,主機不是向從機發送地址,而是主機往匯流排上發送地址(這個地址是某個從機的,而不是主機的,所以不存在「從機怎麼知道這個地址就是主機的」的問題),所有的從機都能接收到主機發出的地址,然後每個從機都將主機發出的地址與自己的地址比較,如果匹配上了,這個從機就會向主機發出一個響應信號。主機收到響應信號後,開始向匯流排上發送數據,與這個從機的通訊就建立起來了。如果主機沒有收到響應信號,則表示定址失敗。

「比如IIC匯流排上接了兩塊單片機,一塊是主機,另一塊是從機,如何定義從機的這個地址」
如果是帶IIC的單片機,會有地址寄存器,寄存器里的值即為它作為從機時的地址。
以ATmega48為例,有TWI從機地址寄存器—TWAR,先要確定工作模式(主機模式或從機模式),若工作在從機模式,,TWI將根據這個地址進行響應。
如果是不帶IIC的單片機,沒有地址寄存器。所以一般不用做從機。以AT89C51為例,用它的普通IO口模擬IIC時序時,一般都是用作主機。特殊情況下51用作從機時,可以通過掃描匯流排的方式,若發現匯流排上出現某個地址信號便響應(嚴格來說,這種方式只是在IIC基礎上z用戶定義的通信方式)。

最常見的情況,如前面所說,主從器件的角色是確定的,也就是說從機一直工作在從機模式。它的地址確定方法我已經說過了。不同的器件定義地址的方式是不同的,有的是軟體定義,有的是硬體定義。你找個數據手冊看看就明白了,紙上談兵很難說清楚。

5、iic(i2c)的應答信號是由主機發起告訴從機,還是由從機發起告訴主機啊?

相互的,都有

6、6) IIC匯流排掛載多個從機時,主機如何區分?

通過地址可以區分,
一般eeprom上面有A1,A2,A3 3個腳,就是腳;
你可以分別接為 000 到 111 八個地址 ,可以掛8個從機

7、IIC的主機應答和從機應答有什麼區別,分別用在什麼地方,就是說什麼時候用主機應答,什麼時候用從機應答?

IIC是按位元組來傳輸的,當每傳輸完一個位元組的數據,後面必須緊跟一個校驗位,這個校驗位是接收端通過控制SDA(數據線)來實現的,以提醒發送端數據我這邊已經接收完成。
(SDA=0為ACK 接收完成 SDA=1為NACK 繁忙中)
主機應答: 傳輸完一個位元組數據以後(數據傳輸方向:從機--->主機),主機控制(此時是接收端)SDA來提醒從機(發送端)我這邊接受完成
從機應答: 傳輸完一個位元組數據以後(數據傳輸方向:主機--->從機),從機控制(此時是接收端)SDA來提醒主機(發送端)我這邊接受完成

8、iic中主機讀取一個位元組的時候,從機怎麼知道什麼時候給主機發送數據呢

單片機一般先發一個命令給二匯流排模塊(比如e2prom....)。
然後得到匯流排模塊的回應。
再發地址碼,隨後接受數據。
i2c_SCL只是同步信號,在兩個脈沖之間得到的i2c_sda數據視為一個完整數據。

9、單片機IIC通信,從機可以隨時控制主機嗎?

從機只要發送特定信號到主機,主機收到特定的信號,處理特定的服務程序即可

10、雙機iic通訊,從機如何發數據給主機

通過gpio口的拉高拉低,在拉高拉低中間讀取數據即可,配置和普通io口一致

與iic主機相關的知識