學習嵌入式之硬件——I2C

一、I2C

1.定義

????????內部集成電路的簡稱,半雙工串行同步通信,是芯片和芯片之間的通信方式;通常只有一個主機,多個從機,采用主從應答的方式

  • 上圖所示是IIC的總線的使用場景,所有掛載在IIC總線上的設備都有兩根信號線,一根是數據線SDA, 另一根是時鐘線SCL。這兩個信號線都是雙向的。
  • 作為一種通信方式,IIC總線在某一時刻,總線只允許有一個設備處于發送狀態,所發生的數據被總 線上所有的設備所接收。IIC通信協議包含有設備地址,只有發送方攜帶的地址與某個接收方的地址 相同時,接收方才真正執行相關的指令。
  • 主從應答:命令總是由主機發起,從機應答,如果主機只有一個,叫單主機,兩個或兩個以上,是多主機,通常情況下為單主機;主機再發命令的時候,所有從機都能收到,從機的回答所有也都能收到;
  • 時鐘信號線永遠只有主機發;

2.釋放總線:

  • 整根線為高電平
  • 釋放總線的權利(1)應該由接收方來,誰要接收數據,誰要提前釋放總線

3.上拉電阻

  • ?IIC總線規定,設備在空閑時,兩根總線都處于高電平狀態。為保證這種狀態,數據線SDA和時鐘線SCL都 要外接上拉電阻。對于I.MX來說,這個上拉電阻也可以在引腳電器配置中設置。
  • 上拉電阻的作用就是當雙方在發1的時候,保證最后線上是1,防止內阻拉低,看過原理圖10k

4.I2C時序圖:

  • 空閑時,兩根線均處于高電平;
  • 每次通信前,發送方首先發送一個“起始”信號,其實信號就是在SCL為高電平 時,SDA發送一個低電平。時鐘信號是由主機來控制和發送;
  • 時鐘信號線為低電平時,數據信號線可以發生改變,當為高電平時,數據信號線必須保持穩定,接收方要在高電平階段來采樣。
  • 高位先行原則
  • 當發完信號時,接收方需要應答,應答為ACK(0)或者NACK(1)(芯片手冊寫);
  • 如果后續還有發送數據,就接著應答后面,繼續發,依舊遵循上述原則
  • 如果后續沒有發送數據,在時鐘信號線為高電平時,把數據信號線拉為高電平,從此置空閑狀態

每一個從機都有占有一個字節的地址值,而主機發完一個起始信號后,先發從機的地址,地址占7位;最后一個bit,是數據流向位。0:主機發從機收;1:從機發主機收,

5.I.MA6ULL

???????I.MX6U 提供了 4 個 I2C 外設,通過這四個 I2C 外設即可完成與 I2C 從器件進行通信I.MX6U
的 I2C 支持兩種模式:標準模式和快速模式,標準模式下 I2C 數據傳輸速率最高是 100Kbits/s,在快速模式下數據傳輸速率最高為 400Kbits/s。

6.寄存器I2C_I2CR

  • IEN(bit7):I2C 使能位,為 1 的時候使能 I2C,為 0 的時候關閉 I2C;
  • IIEN(bit6):I2C 中斷使能位,為 1 的時候使能 I2C 中斷,為 0 的時候關閉 I2C 中斷;
  • MSTA(bit5):主從模式選擇位,設置 IIC 工作在主模式還是從模式,為 1 的時候工作在主模式,為 0的時候工作在從模式;
  • MTX(bit4):傳輸方向選擇位,用來設置是進行發送還是接收,為 0 的時候是接收,為 1 的是發送;
  • TXAK(bit3):傳輸應答位使能,為 0 的話發送 ACK 信號,為 1 的話發送 NO ACK 信號;
  • RSTA(bit2):重復開始信號,為 1 的話產生一個重新開始信號。

7.寄存器 I2Cx_I2SR?

  • ICF(bit7):數據傳輸狀態位,為 0 的時候表示數據正在傳輸,為 1 的時候表示數據傳輸完成;
  • IAAS(bit6):當為 1 的時候表示 I2Cx_IADR 寄存器中的地址是從設備地址。為0表示I2Cx_IADR是自己的地址;
  • IBB(bit5):I2C 總線忙標志位,當為 0 的時候表示 I2C 總線空閑,為 1 的時候表示 I2C 總線忙;
  • IAL(bit4):仲裁丟失位,為 1 的時候表示發生仲裁丟失。仲裁丟失在手冊第1455頁有說明,如果多個設備同時嘗試連接總線,則其中一個成為主設備。硬件會立即將仲裁失敗的設備切換到Slave
  • Receive模式 。那么仲裁失敗的設備就會產生仲裁丟失,導致此位置位。需要理解的是這種情況一定發生在發送起始位的時候,也就是說在發送完起始位之后應該判斷此位是否為1;
  • SRW(bit2):從機讀寫狀態位,當 I2C 作為從機的時候使用,此位用來表明主機發送給從機的是讀還是寫命令。為 0 的時候表示主機要向從機寫數據,為 1 的時候表示主機要從從機讀取數據;
  • IIF(bit1):I2C 中斷掛起標志位,當為 1 的時候表示有中斷掛起,此位需要軟件清零;
  • RXAK(bit0):應答信號標志位,無論作為主機還是從機,為 0 的時候表示接收到 ACK 應答信號,為1 的話表示檢測到 NO ACK 信號。

8.寄存器I2Cx_I2DR

????????這是 I2C 的數據寄存器,此寄存器只有低 8 位有效,當要發送數據的時候將要發送的數據寫入到此寄存器
注意:此時LSB代表的是數據流向,需要按照實際情況設置為1或者0;如果要接收數據的話
? ? ? ? ? 直接讀取此寄存器即可得到接收到的數據

二、電可擦存儲器

1.時序圖

(1)寫8個bit數據

(2)連續寫數據

寫操作:首先主從機釋放總線處于空閑狀態,主機在clk處于高電平時,將sda電平拉高,發送起始位。接著主機發送8個bit的設備地址,第8位為數據流向位(0為主機寫,1為主機讀),從機收到后會發送ACK應答。主機收到從機的應答后,再發送寄存器的地址位,從機收到后發送ACK應答;之后主機發送數據,從機收到后發送ACK應答。主機發送完之后在clk位高電平時拉高電平發送停止位。

(3)當前位置發數據給主機

(3)主機從指定位讀

讀操作:主機先發送起始位,之后發送8位的設備地址,其中第8個bit寫操作,從機收到發送ACK應答,主機再發送寄存器地址,從機回復ACK應答。之后主機會重發設備地址,但第8bit為讀操作,從機收到回復ACK應答,從機發送數據,主機收到后回復ACK,主機在最后一個數據字節后回復NACK表示結束,之后主機發送停止位。

  • 如果最后主機回應NACK是從機不發了,如果主機發ACK的話,就繼續發

三、I2C原理

1.總原理圖

  • 作為發送方,是否要檢測對面回應的ACK;
  • 作為接收方,回應的是ACK/NACK;

  • 一般用于停止位是否發送并且置1成功

四、I2C操作流程

1.初始化的流程圖、寫設備、讀設備流程圖

五、邏輯分析儀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93333.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93333.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93333.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用websockt

封裝websocktHooksimport { ref, onMounted, onUnmounted } from vue;/*** webSocket的Hooks* param {string} websocket鏈接地址* */ export function useWebSocket(url: string) {// 核心狀態 const data: Ref<any> ref(null);//收到websocket返回的數據const socke…

Jmeter自定義腳本

目錄 log&#xff1a;輸出類 Label&#xff1a;你自定義的組件的名稱 FileName&#xff1a;添加的腳本文件的文件名 Parameters&#xff1a;你傳入的參數&#xff0c;是一個字符串 args&#xff1a;你傳入的參數&#xff0c;是一個數組 Parameters和args的異同&#xff1…

飛算 JavaAI 電商零售場景實踐:從訂單峰值到供應鏈協同的全鏈路技術革新

目錄 一、電商核心場景的技術攻堅 1.1 分布式訂單系統的事務一致性設計 1.1.1 TCC 模式下的訂單創建流程 1.1.2 訂單狀態機的可靠流轉 1.2 高并發秒殺系統的架構設計 1.2.1 多級限流與流量削峰 1.2.2 庫存防超賣機制 1.3 智能推薦與用戶行為分析 1.3.1 用戶行為實時采…

51單片機-51單片機介紹

51單片機介紹單片機簡介什么是單片機呢&#xff1f;單片機是一種集成電路芯片&#xff0c;采用超大規模集成電路技術將中央處理器&#xff08;CPU&#xff09;、隨機存儲器&#xff08;RAM&#xff09;、只讀存儲器&#xff08;ROM&#xff09;、多種I/O口、中斷系統、定時器/計…

8月AI面試工具測評:破解規模化招聘難題

金秋校招臨近&#xff0c;企業面臨“百萬簡歷涌入VS面試官團隊告急”的典型困境。傳統線下面試效率低下、標準參差&#xff0c;難以應對短時間內爆發式的人才篩選需求。AI面試工具憑借自動化與智能化特性成為破局關鍵&#xff0c;但市面上產品良莠不齊——究竟哪款能兼顧效率與…

Debian新一代的APT軟件源配置文件格式DEB822詳解

Debian 的 DEB822 格式詳解&#xff1a;新一代 APT 源配置 DEB822 是一種基于 RFC 822 數據格式的配置文件語法&#xff0c;Debian 新一代的 APT 軟件源配置文件格式就采用了 DEB822。DEB822 格式從 Debian 11 (Bullseye) 開始被引入&#xff0c;并在 Debian 12 (Bookworm) 中成…

實戰 AI8051U 音視頻播放:USART-SPI→DMA-P2P→SPI+I2S 例程詳解

視頻P2P播放&#xff0c;時間計算&#xff1a;fps20,50ms 周期刷屏時間&#xff1a;160*80 一幀刷屏時間28.2ms幀間隔&#xff1a;50ms-28.2ms21.8ms音頻雙緩沖區交叉播放&#xff0c;利用視頻播放幀間隔加載下一個緩沖區音頻數據&#xff0c;時間計算&#xff1a;16000采樣率 …

解釋器模式C++

解釋器模式&#xff08;Interpreter Pattern&#xff09;是一種行為型設計模式&#xff0c;它用于定義一種語言的語法規則&#xff0c;并構建一個解釋器來解釋該語言中的句子。這種模式適用于需要處理固定語法規則的場景&#xff0c;如表達式解析、配置文件解析等。 解釋器模式…

debian 13 顯示中文字體 不再顯示菱形塊 終端顯示中文

找了很多坑。。其它就安裝一下中文字體即可 。 apt install ttf-wqy-zenhei 之后測試命令 fc-list &#xff1a;langzh 顯示了剛字體的路徑和中文字即成功了。 rootdebian:~# dpkg-reconfigure locales 以上命令配置中文語言。 debian 12.11 安裝 MySQL 下載配置文件 &am…

51單片機-驅動蜂鳴器模塊教程

本章概述思維導圖&#xff1a; 51單片機驅動蜂鳴器模塊教程 蜂鳴器簡介 蜂鳴器是一種將電信號轉換為聲音信號的電子元件&#xff0c;廣泛應用于報警、提示、通知等場景。其核心原理基于壓電效應或電磁感應&#xff1a;因此可分為兩種類型蜂鳴器&#xff1a;壓電式蜂鳴器和電磁…

常用Linux指令:Java/MySQL/Tomcat/Redis/Nginx運維指南

一、基礎Linux指令1. 文件與目錄操作ls -lh # 查看文件詳情(人類可讀格式) pwd # 顯示當前目錄路徑 cd /path # 切換目錄 mkdir dirname # 創建目錄 rm -rf dirname # 強制刪除目錄 cp -r src dest # 遞歸復制目錄 mv old new # 移動/重命…

小紅書帖子評論的nodejs爬蟲腳本

從小紅書上爬取評論&#xff0c;但是目前還不能完全爬取子評論&#xff0c;使用GPT沒能解決這個問題。后續博主可能會改進。或者如果你懂的話&#xff0c;可以在博主代碼基礎上改進。需要安裝nodejs軟件&#xff0c;部署環境變量。博主是在pycharm中運行的。代碼無套路獲取。自…

【iOS】多線程原理

目錄 前言 基本概念及原理 線程、進程與隊列 線程的定義&#xff1a; 進程的定義&#xff1a; 線程與進程之間的聯系與區別&#xff1a; 線程和runloop的關系 影響任務執行速度的因素 多線程 多線程生命周期 線程池的原理 iOS中多線程的實現方式 線程安全問題 互斥…

藥房發藥的“時間密碼”:同步時鐘用藥安全?

在醫院的藥房里&#xff0c;每一粒藥片的流轉都暗藏“時間密碼”。從藥品入庫到患者服藥&#xff0c;時間記錄的精確性直接關乎生命安全。一旦時間數據出現偏差&#xff0c;輕則導致用藥爭議&#xff0c;重則引發醫療事故。近年來&#xff0c;隨著醫療數字化進程加速&#xff0…

UI-TARS-Desktop 深度解析:下一代智能自動化桌面平臺

目錄 1. 產品概述 2. 核心功能與技術架構 2.1 關鍵技術 2.2 功能亮點 3. 競品對比分析 4. 部署與成本分析 4.1 部署方案 4.2 隱性成本 5. 商業化前景 5.1 目標市場 5.2 盈利模式 5.3 風險挑戰 6. 未來演進方向 7. 總結 1. 產品概述 UI-TARS-Desktop 是一款基于A…

STM32L051同時處理Alarm A和Alarm B中斷

同時處理Alarm A和Alarm B中斷 當同時啟用Alarm A和Alarm B時&#xff0c;需要在中斷處理程序中準確判斷是哪個鬧鐘觸發了中斷。以下是完整的解決方案&#xff1a; 中斷判斷與處理流程 1. 在RTC中斷服務程序中判斷中斷源 // stm32l0xx_it.c void RTC_IRQHandler(void) {/* USER…

OpenCV---morphologyEx形態學操作

在計算機視覺與圖像處理領域&#xff0c;形態學操作是一種基于圖像形狀的非線性處理方法&#xff0c;廣泛應用于噪聲去除、邊緣檢測、目標分割等任務。OpenCV提供的morphologyEx函數是形態學操作的“瑞士軍刀”&#xff0c;它整合了多種高級形態學運算&#xff0c;能夠實現開運…

RuoYi-Cloud 接入 Sentinel 的 3 種限流方式

場景&#xff1a; 服務&#xff1a;ruoyi-robot&#xff08;對外接口統一在 /external/gs/**&#xff09; 網關&#xff1a;ruoyi-gateway&#xff08;轉發到 ruoyi-robot&#xff09; 注冊/配置&#xff1a;Nacos 流控&#xff1a;Sentinel 1.8.x 控制臺 Dashboard&#x…

快速搭建python HTTP Server測試環境

這里用python http.server搭建一個api測試環境&#xff0c;自定義請求處理程序&#xff0c;以模擬不同api相應。 1 服務代碼 /api/data&#xff0c;端口8000&#xff0c;GET 返回json數據為"{"message": "This is a sample API response"}" 代…

Docker容器定時任務時區Bug導致業務異常的環境變量配置解決方案

Docker容器定時任務時區Bug導致業務異常的環境變量配置解決方案 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般絢爛的技術棧中&#xff0c;我是那個永不停歇的色彩收集者。 &#x1f98b; 每一個優化都是我培育的花朵&#xff0c;每一個特性都是…