ofbiz做的網(wǎng)站網(wǎng)絡(luò)輿情監(jiān)控
本文代碼使用 HAL 庫。
文章目錄
- 前言
- 一、什么是IIC協(xié)議
- 二、IIC信號(hào)
- 三、IIC協(xié)議的通訊時(shí)序
- 1. 寫操作
- 2. 讀操作
- 四、上拉電阻作用
- 總結(jié)
前言
從這篇文章開始為大家介紹一些通信協(xié)議,包括 UART,SPI,IIC等。
UART串口通訊協(xié)議
SPI通信協(xié)議
一、什么是IIC協(xié)議
- IIC協(xié)議概念:
IIC 協(xié)議是由 SDA 數(shù)據(jù)線 和 SCL時(shí)鐘線 組成的串行總線,可以發(fā)送接收數(shù)據(jù),采用半雙工的通信方式。每個(gè)掛在總線上的器件都有唯一的地址,通常一個(gè)主機(jī)多個(gè)從機(jī)。
- 數(shù)據(jù)線 :
完成數(shù)據(jù)的收發(fā)
。 - 時(shí)鐘線:
完成數(shù)據(jù)的同步傳輸。
位速在標(biāo)準(zhǔn)模式下可達(dá) 100kbits/s, 在快速模式下可達(dá) 400kbits/s, 在高速模式下可達(dá) 3.4Mbits/s.
- IIC 系統(tǒng)結(jié)構(gòu):
(1). 在一個(gè)芯片內(nèi)部,有一個(gè)或者多個(gè) IIC控制器(主機(jī))。
(2). 在一個(gè) IIC 控制器上,可以連接一個(gè)或多個(gè) IIC設(shè)備(從機(jī))。
(3). IIC 總線只需要 2 根線:時(shí)鐘線 SCL, 數(shù)據(jù)線 SDA。
(4). 在 IIC總線的SCL,SDA 上都有上拉電阻。
(5). 時(shí)鐘線只能由主機(jī)產(chǎn)生,作用給從機(jī),從而完成數(shù)據(jù)的收發(fā)同步。
二、IIC信號(hào)
IIC協(xié)議中數(shù)據(jù)的傳輸單位是字節(jié)。要用到 9 個(gè)時(shí)鐘。前 8 個(gè)時(shí)鐘用來傳輸數(shù)據(jù),第 9 個(gè)時(shí)鐘用來傳輸信號(hào)。傳輸數(shù)據(jù)時(shí),先傳輸最高位
。
- 空閑狀態(tài)
當(dāng)總線上的SDA 和 SCL 兩條信號(hào)線同時(shí)處于高電平時(shí),便于空閑狀態(tài)。當(dāng)不傳輸數(shù)據(jù)時(shí),SDA和SCL就會(huì)被上拉電阻拉高,便進(jìn)入了空閑狀態(tài)。
- 開啟信號(hào)
當(dāng)SCL為高電平期間,SDA由高變低的跳變;便是總線的起始信號(hào),只能由主機(jī)發(fā)起,且在空閑狀態(tài)下才可以啟動(dòng)。
- 停止信號(hào)
當(dāng) SCL為高電平期間,SDA 由低到高的跳變,便是總線的停止信號(hào),表示數(shù)據(jù)已經(jīng)傳輸完成。
- 響應(yīng)信號(hào)
接收器在接收到 8 位數(shù)據(jù)后,在第 9個(gè)周期,拉低 SDA。當(dāng)接收方接收該字節(jié)成功,便會(huì)輸出一個(gè) ACK應(yīng)答信號(hào)。
當(dāng)SDA 為高電平,表示為非應(yīng)答信號(hào) NACK
,當(dāng) SDA為低電平,表示為應(yīng)答信號(hào) ACK
。
三、IIC協(xié)議的通訊時(shí)序
IIC總線上的設(shè)備可以 發(fā)送/接收 數(shù)據(jù)。
1. 寫操作
流程如下:
- 主芯片要發(fā)送一個(gè)起始信號(hào) start 。
- 然后主設(shè)備發(fā)送一個(gè)設(shè)備地址(用來確定是往哪個(gè)從機(jī)寫數(shù)據(jù)),方向(0表示讀,1表示寫)。
- 從設(shè)備回應(yīng)(用來確定從設(shè)備是否存在),然后就可以傳輸數(shù)據(jù)。
- 主設(shè)備發(fā)送一個(gè)字節(jié)的數(shù)據(jù)給從設(shè)備,等待回應(yīng)。
- 每傳輸一字節(jié)數(shù)據(jù),接收方都要有一個(gè)回應(yīng)信號(hào)(用來確定數(shù)據(jù)是否接收完成),然后再傳輸下一個(gè)數(shù)據(jù)。
- 數(shù)據(jù)傳輸完成后,主芯片就會(huì)發(fā)送一個(gè)停止信號(hào)。
2. 讀操作
流程操作:
- 主設(shè)備發(fā)送一個(gè)起始信號(hào)。
- 主設(shè)備發(fā)出一個(gè)從設(shè)備地址(用來確定從哪個(gè)設(shè)備讀數(shù)據(jù)),方向(0表示寫,1表示讀)。
- 從設(shè)備回應(yīng)(用來確定從設(shè)備是否存在),然后就可以傳輸數(shù)據(jù)。
- 從設(shè)備發(fā)送一字節(jié)數(shù)據(jù)給主設(shè)備,等待回應(yīng)。
- 每傳輸一字節(jié)數(shù)據(jù),接收方要有一個(gè)回應(yīng)信號(hào)(用來確定數(shù)據(jù)是否接收成功),然后再傳輸下一個(gè)數(shù)據(jù)。
- 數(shù)據(jù)發(fā)送完成后,主設(shè)備會(huì)發(fā)送一個(gè)停止信號(hào)。
四、上拉電阻作用
-
IIC 總線的SCL,SDA 上都有上拉電阻。
外接2個(gè)上拉電阻的作用:當(dāng)總線處于空閑狀態(tài)時(shí),總線為高電平狀態(tài)
。 -
問 :SCL 為何要使用上拉電阻?
答 :在第 9 個(gè)時(shí)鐘后,如果有某一方設(shè)備需要更多的時(shí)間來處理數(shù)據(jù),它可以一直驅(qū)動(dòng)三極管把 SCL 拉低。當(dāng) SCL為低電平時(shí),其他設(shè)備都不使用 IIC總線;只有當(dāng) SCL從低電平變?yōu)楦唠娖降臅r(shí)候,IIC總線才能夠被使用。
當(dāng)該設(shè)備處理數(shù)據(jù)完畢,就緒時(shí),就不再驅(qū)動(dòng)三極管。這時(shí)上拉電阻把SCL變?yōu)楦唠娖?/mark>,其他設(shè)備就可以繼續(xù)使用 IIC總線了。
總結(jié)
下一篇文章為大家介紹 SPI 和 UART 通信協(xié)議。