I2C基礎知識

来源:http://www.cnblogs.com/xiaojiang1025/archive/2016/11/15/6067585.html
-Advertisement-
Play Games

常識 兩條匯流排線路:串列數據匯流排SDA,串列時鐘匯流排SCL 每個連接到匯流排的器件都有唯一的地址供其他設備定址 每個連接到匯流排的器件都可以作為發送器和接收器 是多主機匯流排,如果兩個或更多主機同時初始化,數據傳輸可以通過重提檢測和仲裁防止數據被破壞 串列的8bit雙向數據傳輸位速率在標準模式下可達100 ...


常識

  • 兩條匯流排線路:串列數據匯流排SDA,串列時鐘匯流排SCL
  • 每個連接到匯流排的器件都有唯一的地址供其他設備定址
  • 每個連接到匯流排的器件都可以作為發送器和接收器
  • 是多主機匯流排,如果兩個或更多主機同時初始化,數據傳輸可以通過重提檢測和仲裁防止數據被破壞
  • 串列的8bit雙向數據傳輸位速率在標準模式下可達100kbit/s,快速模式下可達400kbit/s,高速模式下可達3.4Mbit/s
  • 連接到相同匯流排的I2C數量只受到匯流排的最大電容400pF的限制
  • I2C通信的數據以8bit為單位,每次發送完一個數據都要等待接收方的ACK信號

術語

  • 發送器:發送數據到匯流排的器件
  • 接收器:從匯流排接收數據的器件
  • 主機:發送起始/終止信號和時鐘信號的器件
  • 從機:被主機定址的器件
  • 仲裁 :是一個在有多個主機同時嘗試控制匯流排但只允許其中一個控制匯流排並使傳輸不被破壞的過程
  • 同步:兩個或多個器件同步時鐘信號的過程
  • SDA:數據線通信期間,SDA的電平改變只能發生在SCL在低電平期間
  • SCL:時鐘線

起始與終止

通信的起始條件和終止條件都必須在SCL是高電平的時候被觸發,SCL為高SDA由高->低為起始條件(S,start),SCL為高SDA由低->高為終止條件(P,stop)
正是因為正常通信的過程中如果SCL是高電平,SDA不允許改變,所以這兩種情況可以用來標識S和P

匯流排在start後被認為處於忙碌狀態,在stop的某段時間後匯流排被認為再次處於空閑狀態
除了S作為起始信號,I2C還有重啟信號Sr,如果在處於忙碌狀態的匯流排中發送Sr(restart)而不產生P(stop),匯流排會一直處於忙碌的狀態。Sr的作用是保證一個主機不間斷的占用匯流排,它既是前一次數據傳輸的結束,又是後一次數據傳輸的開始,可以用來保證一臺主機不間斷的掌控匯流排。eg:主機發送了讀請求之後,從機進行了應答,接下來還有隨之而來的寫請求,為了主機的讀寫操作能連貫的執行完畢再釋放匯流排,此時就需要Sr來保證該主機不間斷掌控匯流排,因為一旦在讀之後發出停止信號,匯流排就有可能被其他主機掌管,該主機的寫操作就會被延遲。

定址


主機首先檢測匯流排是否處於空閑狀態,如果空閑就首先發送一個從機地址(MSB)+控制位(LSB)。7位定址的話就是1111 XXX,高4位屬於固定地址不可改變,如果器件沒有CPU,則由廠家固化,有CPU的話就由器件的初始化代碼指定(註意不能和匯流排上其他器件的地址重疊),低3位為引腳設定地址,可以由外部引腳來設定(並非所有器件都可以設定)。控制位即0表示主機會寫W信息到從機,1表示從從機中讀R數據。和其他數據一樣,主機發完這個byte繼續產生一個時鐘周期,並釋放SDA為高阻態(I2C的SDA和SCL都需要上拉電阻保持高阻態),等待從機的ACK信號。

應答

一個主機設備發送了希望讀寫的設備地址到匯流排之後,匯流排上的所有器件都會收到一個主機發送的地址並與自身比對,如果與自身的地址相同,表示自己就是主機打算通信的對象。接下來從機可以有三種行為:ACK,NACK,拉低SCL。
ACK就是從機在第9個時鐘周期將SDA電平拉低,表示從機成功的接收了剛纔的8bit數據,主機收到了從機的ACK信號就可以繼續發數據,或者準備好接收從機的數據。

NACK就是從機在第9個時鐘周期不響應,表示從機沒有成功的接收到剛纔的8bit,主機接收到這個信號就可以發送Sr或採取其他行為。如果最後一次通信中主機是接收方,主機就會回應一個NACK信號(不響應)通知從機表示通信結束,併發送P或Sr。

如果從機沒有準備好應答,就可以將SCL鉗位在低電平,這樣就可以使主機進入等待狀態,直到從機準備就緒接收接下來的數據再釋放SCL,通信就可以繼續了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 由於目前目標檢測及分類等研究方向廣泛使用深度學習的方法,而多數神經網路框架(如caffe和tensorflow等)在windows下安裝極為困難,所以本文將記錄我安裝Ubuntu的部分筆記,並就出現過的一些問題提供適合新手的簡單辦法。本文所安裝ubuntu版本為14.04。 新手採用本文所介紹的安裝 ...
  • 今天使用kali的時候,由於虛擬機太多,密碼還不一樣,就忘記kali的登錄密碼了(我就是魚的記憶,只有七秒)。。。。 1.重啟kali,進入恢復系統,按e鍵進入編輯模式 2.游標移動到/boot/vmlinuz行修改singal前的ro為rw,並且在initrd=/install/initrd.gz ...
  • 虛擬機:VMware12.0 操作系統:Ubuntu16.04 LTS (新安裝系統) 已經按照網上的步驟: 1.安裝git: 2.安裝依賴包: 3.安裝Pyenv: 4.配置環境: 最終結果: ...
  • Atlas是360團隊弄出來的一套基於MySQL-Proxy基礎之上的代理,修改了MySQL-Proxy的一些BUG,並且優化了很多東西。而且安裝方便。配置的註釋寫的蠻詳細的,都是中文。英文不好的同學有福了。 Atlas官方鏈接: https://github.com/Qihoo360/Atlas/ ...
  • 由於工作需要,經常要使用遠程桌面連接到Windows伺服器。Windows的預設遠程桌面埠號為3389,為增加伺服器安全性,除了在硬體設備做規則外,還可以用Windows自帶的策略來增加Windows伺服器的安全下。 下麵以Windows2008R2為例,分別設置二種策略:(兩種任選一種,不能同時 ...
  • 在windows下,一個文件有:創建時間、修改時間、訪問時間。而在Linux下,一個文件也有三種時間,分別是:訪問時間、修改時間、狀態改動時間。 1、訪問時間,讀一次這個文件的內容,這個時間就會更新。比如對這個文件使用more命令。ls、stat命令都不會修改文件的訪問時間。 2、修改時間,對文件內... ...
  • 為什麼要使用 HTTPS ? 首先來說一下 HTTP 與 HTTPS 協議的區別吧,他們的根本區別就是 HTTPS 在 HTTP 協議的基礎上加入了 SSL 層,在傳輸層對網路連接進行加密。簡單點說在 HTTP 協議下你的網站是光著身子在奔跑,但到了 HTTPS 下你穿了一件衣服,別人看不到你的肌肉 ...
  • 在傳統模式中,開發團隊在開發環境中完成軟體開發,自己做了一遍單元測試, 測試通過,ᨀ交到代碼版本管理庫。運維把應用部署到測 試環境, QA 進行測試,沒問題後通知部署人員發佈到生產環境。 在上述過程中涉及到至少三個環境:開發、測試和生產。現實情況是,開發自測 沒問題,但到了測試或者生產環境程式無法運 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...