學號:19011210554? ?姓名:袁博
轉(zhuǎn)載自:https://blog.csdn.net/qq_35281599/article/details/89372308
【嵌牛導讀】:IIC協(xié)議現(xiàn)在很常用更鲁,今天我們就對它的特性和規(guī)則進行學習。
【嵌牛鼻子】:IIC協(xié)議??
【嵌牛提問】:IIC的特性?IIC的規(guī)則
【嵌牛正文】:
簡單的說IIC就一種主從架構(gòu)的串行通信總線協(xié)議,其實這句話如果你能理解到位的話市栗,那么對IIC的理解也就差不多了。既然是一種通訊協(xié)議那么必然有他的一些規(guī)則和特性在里面,下面我們就先來談一談他們的特性和規(guī)則。
首先是IIC的特性,這里我一一舉例并結(jié)合我的理解加以說明挟秤。
1.最直觀的我們知道IIC有兩條總線線路,分別是:一條串行數(shù)據(jù)線 (SDA )一條串行時鐘線(SCL)抄伍。關于數(shù)據(jù)線大家也很明白就是用來傳輸數(shù)據(jù)的艘刚,且這條數(shù)據(jù)線是雙向傳輸?shù)模鳶CL時鐘線是由主機(一般指MCU)主動發(fā)起的方波信號截珍,請注意下主動一詞攀甚!主動表示了數(shù)據(jù)的發(fā)送和接收都是由主機來控制啄糙,也就是說從機是不能主動通過SDA總線返回數(shù)據(jù)的,它總是被主機訪問云稚,這點我相信開發(fā)過IIC協(xié)議的人應該能理解隧饼。這是IIC總線的重要特性之一。
2.IIC總線上的器件都有唯一的器件地址静陈。器件地址也稱為從機地址燕雁,這個地址規(guī)定為7bit長度的地址,也有的是10bit的地址鲸拥。如下圖所示拐格,后面的第 8bit 是數(shù)據(jù)的讀寫為,具體表示為:0 表示寫,1 表示讀。
這里有個問題為什么要是唯一的地址刑赶?因為在IIC總線中是支持一主多從的捏浊,如果有器件地址是一樣的,那么相同地址的從器件就都會響應請求撞叨,如此一來SDA線的數(shù)據(jù)就會發(fā)生混亂和沖突金踪。那么我們?nèi)绾沃阑蛘咴O定一個器件的IIC地址呢?
接著往下看牵敷,IIC上的每個器件都有一個地址寄存器來確定自己的地址胡岔,絕大多數(shù)的器件是通過硬件來確定地址的。具體的意思就是每個器件(這里的器件可以是溫濕度傳感器枷餐,時鐘芯片等)在出廠的時候就已經(jīng)設置好了他的IIC器件地址靶瘸,所以我們在一些器件的datasheet中可以看到他的IIC地址已經(jīng)是確定的了,用戶不可更改毛肋。還有的是確定了器件的前幾位怨咪,剩下幾位由用戶自行來決定,如下圖的A0,A1,A2就是設置地址的外部引腳润匙,可以通過將引腳置高或置低來確定器件的最后幾位的地址,诗眨。
3.如果兩個或更多主機同時初始化數(shù)據(jù)傳輸可以通過沖突檢測和仲裁防止數(shù)據(jù)被破壞。IIC可以實現(xiàn)多主機通訊趁桃,但實際上我也沒使用過辽话。
下面開始說說IIC的規(guī)則:
開始和結(jié)束的條件:
前面說過SDA 和 SCL 都是雙向線路,通過電流源或者上拉電阻連接到一個正向電壓(通常是VDD)當總線空閑時,兩條線都是高電平。開始和終止條件如上圖卫病,所有的傳輸都由一個 START(S)開始,有一個 STOP(P)終止.START 條件是當 SCL 高時 SDA 從高到低油啤;STOP 條件是 SCL 高時 SDA 從低到高。這里我想再次強調(diào)下蟀苛,開始條件和終止條件一直都是由主機產(chǎn)生的益咬。在開始條件后總線就處于忙狀態(tài)了,而在停止條件隔上一個固定時間后總線就會處于空閑狀態(tài)帜平。但如果沒有終止條件產(chǎn)生,而是一個重復產(chǎn)生的開始條件幽告,那總線依舊是忙的狀態(tài)梅鹦。
數(shù)據(jù)的有效性:
數(shù)據(jù)的有效性其實就是數(shù)據(jù)的采樣。通過上圖我們可以看出冗锁,SCL是一個一個類似方波的信號齐唆,當SCL開始從低電平變?yōu)楦唠娖綍r代表數(shù)據(jù)要開始采樣了,在SCL高電平穩(wěn)定時這個時候如果SDA是高電平代表數(shù)據(jù)就是1冻河,是低電平代表數(shù)據(jù)就是0箍邮,以此類推完成8個bit的傳送。所以我們經(jīng)常說在時鐘為高電平期間 SDA 線上的數(shù)據(jù)為什么要保持穩(wěn)定的原因叨叙。當SCL從高電平變化到為低電平期間就把1bit的數(shù)據(jù)傳輸了出去锭弊,這時SCL為低電平,數(shù)據(jù)線SDA才可以改變高低電平狀態(tài)準備下一個要傳輸?shù)臄?shù)據(jù)擂错,所以每個數(shù)據(jù)位的傳輸都需要一個時鐘的產(chǎn)生味滞。
ACK和NACK
在我們傳送完一個字節(jié)過后,規(guī)定從機要給主機一個ACK信號钮呀,這個信號告訴主機已經(jīng)成功接收數(shù)據(jù)并準備好接收下一個數(shù)據(jù)剑鞍,如下圖所示:在SCL為高電平時,接受設備將SDA拉為低電平(即主機采到bit為0)表示傳輸正確行楞,產(chǎn)生應答攒暇,否則為非應答。
如果從機產(chǎn)生了非應答子房,那么就不再接受數(shù)據(jù)了,所以一般在產(chǎn)生NACK的后面是緊跟STOP信號的就轧。