版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接:https://blog.csdn.net/wzt_007/article/details/78622698
通訊分爲四大步驟,握手、數據交換、準備結束、正式結束算法
如如下場景:安全
兩個陌生人是進行溝通,爲了顯得更有主次關係,選取老闆和新員工進行溝通的場景,老闆通常佔有主動權,並且手中有新員工的基本信息,好比姓名,年齡,性別等。溝通開始:編碼
老闆:「XXX,歡迎你加入咱們公司,爲公司注入新的血液!」伸出握手姿式 —— 主握手.net
新員工:「承蒙厚愛,有幸加入咱們公司,我以爲是一種光榮!」握手 —— 握手成功blog
老闆:「想必已經讀過員工手冊了吧,說說你對前兩條的理解。」 —— 執行溝通it
新員工:「第一條……,第二條……」 —— 從應答原理
……擴展
老闆:「回答的很好,確實是咱們迫切想招募的人,之後看你的精彩表現了!」 —— 主要求溝通結束總結
新員工:「必定不負厚望,必努力工做!」 —— 從作好結束準備命名
老闆離開 —— 溝通結束
主從器件
在通訊的時候,總線上必須且只能有要有一個爲主器件,其餘的都爲從器件
在總線上表現爲主控的器件叫作主發送器/接收器(MASTER TRANSMITTER/RECEIVER),主器件只執行發送,不執行接收的,命名爲主發送器(MASTER TRANSMITTER)
在總線上表現爲被控的器件叫作從發送器/接收器(SLAVE RECEIVE/RTRANSMITTER),有些從器件只執行接收,不執行發送的,命名爲從接受器(SLAVE RECEIVER)
一條I2C總線最多能掛多少個器件?
串行數據都是以一個字節一個字節的方式來衡量的,前幾位用來表示地址(上述對話中的員工名字),地址的最後一位爲讀寫操做位(READ/WRITTE位,簡寫爲R/W,邏輯1表示讀,邏輯0表示寫),以最開始的一個字節做爲地址來算的話,那麼除去字節的最後讀寫標誌位,就剩 8 – 1 = 7bit了,因此理論上以1個字節爲地址來算的話,就能夠分配2的7次方128個地址,就能夠掛上128個器件(極端狀況,假設這128個器件都是從機的話,就還須要掛一個主器件,合計就是128 + 1 = 129個器件了)。要是想掛更多的器件,那麼就須得將地址位擴展,好比將前兩個字節做爲地址,去掉最後的一位讀寫標誌位
以上是理論的算法,在實際的器件中,都是以第一個字節做爲地址的,並且大部分的器件的地址高四位已經被根據不一樣功能的芯片分配了不一樣的編碼(例如,AD/DA轉換芯片PCF8591的前四位爲1001,E2PROM芯片AT24C02的前四位爲1010,具體的芯片就得查查手冊了,這裏只說明原理),那麼同一種功能芯片(地址前4位都相同)最多隻有 8 – 4 – 1 = 3位用來分配地址了,也就是最多能夠掛2的3次方8個同種功能芯片。用一個問題來深化理解一下。
握手與結束
I2C協議有規定,在SCL和SDA均爲高電平的前提下,檢測到SDA有降低沿信號,則創建I2C的通訊開始;一樣的,在SCL爲高電平,SDA爲低電平的前提下,檢測到SDA有上升沿信號,則I2C通訊正式結束。
由圖中虛線框中引出的:總線閒的時候,兩根信號線都是高電平的。無論是通訊創建和通訊結束階段,SCL都是高電平,SDA的變化控制着通訊的創建與結束;在SCL爲高電平的狀況下,SDA信號的轉變就對通訊起着強制性做用,要麼通訊創建,要麼通訊正式結束,有且僅有這兩種狀況!也就是說,在數據交換的過程當中,要對SCL這根信號線尤其注意,在數據變化的時候,必定要保證SCL是爲低電平!讓數據的變化在SCL的「安全」狀態下進行,因此須要牢記一點,數據變化,時鐘線低電平先行,以下圖所示。
通訊
在每次寫數據的時候,每寫一個字節數據(不管是必要的從器件地址數據、從器件控制數據,仍是須要寫到從機裏的數據),從器件都有一個ACK(從器件的應答實現是將SDA線拉成低電平,因此在寫完第8位數據之後,切記要把SCL的電平拉成低電平,等一小段時間之後,在將數據線拉高去讀SDA的數據,緣由在握手和結束講了。讀數據時,主器件每接收到從器件的一個字節數據,也都要回復一個ACK,主器件ACK有兩種,一種表示收到數據,且準備接收下一次數據(0,ACK),一種是收到數據,但不許備接收下一次數據(1,NO ACK)
我總結的讀寫流程,若是有問題,歡迎你們指出
讀:
start>>(主:地址)>>(從:first_Data)>>(主:ACK)>>(從:second_Data)>>(主:ACK)>>(從:third_Data)>>(主:NO ACK)>>stop
寫
start>>(主:地址)>>(從:ACK)>>(主:first_Data)>>(從:ACK)>>(主:second_Data)>>(從:ACK)>>(主:third_Data)>>(從:ACK)>>stop————————————————版權聲明:本文爲CSDN博主「wzt_007」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/wzt_007/article/details/78622698