最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

IIC通訊協(xié)議解析

2021-06-06 19:08 作者:記帖  | 我要投稿

概述

????IIC(Inter-Integrated Circuit)其實是IICBus簡稱,所以中文應該叫集成電路總線,它是一種串行通信總線,使用多主從架構,由飛利浦公司在1980年代為了讓主板、嵌入式系統(tǒng)或手機用以連接低速周邊設備而發(fā)展。I2C的正確讀法為“I平方C”("I-squared-C"),而“I二C”("I-two-C")則是另一種錯誤但被廣泛使用的讀法。自2006年10月1日起,使用I2C協(xié)議已經不需要支付專利費,但制造商仍然需要付費以獲取I2C從屬設備地址。

接口

????I2C串行總線一般有兩根信號線,一根是雙向的數據線SDA,另一根是時鐘線SCL。所有接到I2C總線設備上的串行數據SDA都接到總線的SDA上,各設備的時鐘線SCL接到總線的SCL上。

  • SCL - 串行時鐘線?

  • SDA - 串行數據線

????為了避免總線信號的混亂,要求各設備連接到總線的輸出端時必須是漏極開路(OD)輸出或集電極開路(OC)輸出。設備上的串行數據線SDA接口電路應該是雙向的,輸出電路用于向總線上發(fā)送數據,輸入電路用于接收總線上的數據。而串行時鐘線也應是雙向的,作為控制總線數據傳送的主機,一方面要通過SCL輸出電路發(fā)送時鐘信號,另一方面還要檢測總線上的SCL電平,以決定什么時候發(fā)送下一個時鐘脈沖電平;作為接受主機命令的從機,要按總線上的SCL信號發(fā)出或接收SDA上的信號,也可以向SCL線發(fā)出低電平信號以延長總線時鐘信號周期??偩€空閑時,因各設備都是開漏輸出,上拉電阻Rp使SDA和SCL線都保持高電平。任一設備輸出的低電平都將使相應的總線信號線變低,也就是說:各設備的SDA是“與”關系,SCL也是“與”關系。

????因此SDA和SCL 可以被拉低為低電平,但是不能被驅動為高電平,所以每條線上都要使用一個上拉電阻,默認情況下將其保持在高電平。

????IIC 總線上數據的傳輸速率在標準模式下可達 100kbit/s 在快速模式下可達 400kbit/s 在高速模式下可達 3.4Mbit/s。

通信協(xié)議

????SDA 線上的數據必須在時鐘的高電平周期保持穩(wěn)定。數據線的高或低電平狀態(tài)只有在 SCL 線的時鐘信號是低電平時才能改變。

空閑狀態(tài)

????SDA為高電平,SCL為高電平。

起始狀態(tài)

????其中一種情況是在 SCL 線是高電平時 SDA 線從高電平向低電平切換,產生一個,這個情況表示起始條件。

結束狀態(tài)

????當 SCL 是高電平時 SDA 線由低電平向高電平切換,產生一個,這個情況表示停止條件。

傳輸數據

  • 器件地址位:由于IIC總線上可能掛載著多臺設備,所以主設備在傳輸有效數據之前要先指定從設備的地址,大多數從設備的地址是7位的,還有部分設備支持10位尋址,主設備如果需要向從機發(fā)送/接收數據,首先要發(fā)送對應從機的地址,然后會匹配總線上掛載的從機的地址。將數據發(fā)送至SDA數據線上即可。

  • 讀寫位:緊接著的第 8 位是數據方向位(R/ W) ----'0’表示發(fā)送(寫),'1’表示請求數據(讀)。

  • 應答信號位

    • 主設備每發(fā)送完8bit數據后等待從設備的ACK。

    • 即在第9個clock,若從設備發(fā)ACK,SDA會被拉低。

    • 若沒有ACK,SDA會被置高,這會引起主設備發(fā)生RESTART或STOP流程,當ACK=0時為有效應答位,說明從機已經成功接收到該字節(jié),若為1則說明接受不成功。

  • 數據地址位:當找到往哪個設備寫數據之后,就開始尋址往這個設備的特定地址寫數據,和上述的發(fā)送器件地址一樣,直接將地址數據發(fā)送至SDA線即可。

  • 數據位:發(fā)送到 SDA 線上的每個字節(jié)必須為8位,每次傳輸可以發(fā)送的字節(jié)數量不受限制,每個字節(jié)后必須跟一個響應位,首先傳輸的是數據的最高位 (MSB) 。

示例

????設置器件地址為0x78(0111 1000),數據地址為0x40(0100 0000),寫入數據0xAA(1010 1010)。

????查看HAL_I2C_Mem_Write說明可以得知,目標設備地址在調用接口之前,數據表中設備的7位地址值必須左移;即發(fā)送到從設備的數據已經右移了一位,所以0x78(0111 1000)右移一位變成0x3c(011 1100)。

????通過示波器抓取的波形如下所示。

  • 在空閑狀態(tài),SDA和SCL都是處于高電平狀態(tài)。

  • 在起始狀態(tài),SDA先產生一個下降沿,之后SCL也出現一個下降沿,此時數據傳輸開始。

  • 在傳輸狀態(tài),由于傳輸速率為100kbit/s,故SCL時鐘的切換時間為5us,一個周期為10us;當SCL為1的時候,SDA不會發(fā)生改變,故檢測SDA信號線的數據,當為低電平則為0,高電平則為1.

  • 在讀寫狀態(tài),當SDA數據為0的時候,為寫狀態(tài)。

  • 在應答狀態(tài),當SDA數據為0的時候,為應答狀態(tài)。

????上述為成功傳輸的例子,若不成功傳輸,設置器件地址為0x77(0111 0111),數據地址為0x40(0100 0000),寫入數據0xAA(1010 1010)。

????由于地址位0x77(0111 0111)右移一位,故發(fā)送出去的為0x3B(011 1011),通過示波器抓取的波形如下所示。

  • 在應答狀態(tài),由于沒有連接0x77地址(實際發(fā)送為0x3B)的設備,當SDA數據為1的時候,為非應答狀態(tài),之后進入復位或者停止。


IIC通訊協(xié)議解析的評論 (共 條)

分享到微博請遵守國家法律
宽甸| 舟山市| 开平市| 昌邑市| 昆明市| 公安县| 隆子县| 马龙县| 安溪县| 义乌市| 古丈县| 荥阳市| 沂水县| 金坛市| 百色市| 卢氏县| 西华县| 宁波市| 罗山县| 杨浦区| 始兴县| 塔河县| 泰宁县| 大足县| 沂源县| 梁山县| 宁波市| 安阳市| 乌拉特前旗| 连云港市| 永丰县| 云和县| 常州市| 莲花县| 嘉善县| 张家口市| 文山县| 阿城市| 综艺| 松阳县| 汤原县|