在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

主機通過發送設備地址后由應答位確定該設備是否存在

lhl545545 ? 來源:玩轉單片機 ? 作者:玩轉單片機 ? 2020-06-11 16:17 ? 次閱讀

I2C(Inter-Integrated Circuit BUS) 集成電路總線,該總線由 NXP(原 PHILIPS)公司設計,多用于主控制器和從器件間的主從通信,在小數據量場合使用,傳輸距離短,任意時刻只能有一個主機等特性。連接到總線的 IC 數量只是受到總線的最大負載電容 400pf 限制。

I2C 支持 0kHz~5MHz 的設備:

普通模式(100kHz)、快速模式(400kHz)、快速模式+(1MHz)、高速模式(3.4MHz)和超高速模式(5MHz)。

兩根數據線:SDA,SCL,均為漏級開路結構。一般接上拉電阻,形成“線與”邏輯(只要一方為低電平,則此線即為低電平)。當 SDA,SCL 為高電平時,表示總線空閑。一般來說,主機發起傳輸之前都要檢查總線的電平狀態(稱為仲裁),以確定是否進行數據傳輸(當總線上只有一個主機時,可以不用)。如果 I/O 口既能輸入也能輸出,可以配置成開漏輸出,但是必須外接拉電阻;如果 I/O 不能配置成開漏輸出,則可以轉換 I/O 輸入輸出方向,輸出采用推挽輸出,輸入使用上拉輸入即可。注意使用轉換方向的方式時必須先轉換方向之后才開始釋放總線。

支持多主控,但是同一時間只能有一個主控。每個設備都有自己的設備地址(共 7bit,有的是 10bit),用于區分掛在在總線上的設備,廣播地址 0x00。最低位用于讀寫控制位,1 表示讀數據,0 表示寫數據。”

?

開始信號

當開始進行一次數據傳輸時,需要向從設備發送一個開始信號,表示數據傳輸開始。

SCL 為高電平期間,SDA 由高到低表示開始信號。

主機通過發送設備地址后由應答位確定該設備是否存在

?

結束信號

當結束一次傳輸時,需要發送結束信號

SCL 為高電平期間,SDA 由低到高表示結束信號。

(若主機在對一個從機操作之后,若主機希望繼續占用總線進行新的數據傳送,則可以不產生終止信號,馬上再次發出起始信號對另一從機進行尋址)

主機通過發送設備地址后由應答位確定該設備是否存在

?

數據位

當傳輸數據位時,在 SCL 為低時改變 SDA,在 SCL 為高時保持 SDA 穩定。高位先傳輸。

主機通過發送設備地址后由應答位確定該設備是否存在

?

應答位

數據的第 9 位為應答位。

應答:第 9 個 CLK 時鐘為高電平期間,如果 SDA 為為低電平,則為應答信號。

非應答:第 9 個 CLK 時鐘為高電平期間,如果 SDA 為為高電平,則為非應答信號。

主機每向從機發送一個字節數據,從機都需要發送一個應答信號,而主機每接收一個字節都需要發送一個應答信號,當主機不準備接收下一個字節時,發送一個非應答信號,也就是說,非應答信號是由主機發送的,從機只能發送應答信號。應答位的數據狀態則遵循“誰接收誰產生”的原則,即總是由接收器產生應答位

可以通過發送設備地址后由應答位確定該設備是否存在。

注意:任何在 SCL 為高電平期間的 SDA 上的電平改變都會被認為是起始或者停止信號,所以數據線 SDA 必須要在時鐘線 SCL 為低電平時改變。

如下為傳輸一個字節的情況:

主機通過發送設備地址后由應答位確定該設備是否存在

所有數據傳輸的發起者都是主設備,從設備只能被動接受主設備的請求。

實際上發送一個字節之后就馬上發送停止信號一般是不能實現一次完整的數據傳輸的,那么正常傳輸流程應該是怎樣的呢?

因為 I2C 總線上可能掛在了很多設備,所以首先需要在總線上發送一個設備地址,并且指明本次傳輸的方向。然后又因為一個設備里面有很多寄存器,所以還要再發送一個寄存器地址,最后才是發送寄存器的內容。

? 發送數據(橘色為從機發送應答位)

? 接收數據(灰色部分為主機應答)

以上這些理論知識只是和 I2C 有關的,實際使用的時候根據驅動器件的不同又會有所不同。比如 AT2402,只能連續發送 8 個字節的寄存器內容(類似 8 字節緩存),下次再發送的話需要重新發送開始信號,另外,進行下一次數據的傳輸時,需要延時一段時間,讓器件將 8 字節緩存的內容實際寫入 EEPROM 中才可,否則會將緩存內容覆蓋,導致寫入錯誤。

主機通過發送設備地址后由應答位確定該設備是否存在

通過編寫 I2C 驅動程序,并利用 KEIL仿真功能可以得到如下波形:

主機通過發送設備地址后由應答位確定該設備是否存在

這是一個發送設備地址 0xA0 的波形,因為沒有從機,所以在第 9 個 CLK 的高電平期間 SDA 為高。當總線上有設備地址為 0xA0 的從機時,SDA 應被從機設置為低電平。

以上知識實際上是比較簡單的,基礎的,適合用于單主機的情況下,如果是多主機通信,遠比單主機復雜的多,涉及到時鐘同步和總線仲裁,有興趣的同學可以自行研究。

更多關于 I2C 的問題,可以查閱《I2C 總線規范》。

關于總線死鎖問題:

“總線死鎖主要是因為主從設備中的主機異常復位造成從機始終處于應答狀態(應答狀態時 SDA 為低電平,只有在 SCL 變為低電平的時候,才會變為高電平,從而釋放 SDA),解決方案可在鏈接中找到。”

STM32 的硬件 I2C 有缺陷,但是可以通過一些方法避免,具體尋找網上的方法。

一直以為可以連續寫入數據,每寫入一個數據加入寫入延時,給 EEPROM 寫入時間,當寫完最后一個數據之后發送一個寫入停止信號即可,可實際是上是必須要有一個停止信號,EEPROM 在收到這個停止信號后才會進行寫寫入操作,否則必然導致寫入出錯。正是因為有這樣錯誤的認識,所以在讀取數據的時候讀出的數據和自己想要的數據不一致,而這個數據剛好用于指針索引,好巧不巧的是因為這指針錯誤的指向,剛好將某個函數指針地址改變了,導致程序一直運行不正常。后來花了半天時間調試,才發現了函數指針數據被更改。但是我又奇怪為什么我的程序又能運行(正是因為能運行而不是直接死在某一個地方,才讓自己尋找 bug 的方向錯了)。后來才想通,雖然我的函數指針指向錯誤,運行出錯,但是因為我開啟了看門狗,所以當函數運行出錯后,程序無法喂狗,導致成程序自動復位,又重新運行了,但是表明上看程序又運行到起來了,實際上呢,它已經從程序的最開始重新運行了。記錄此教訓,以提醒后來人。

還有一點就是單字節寫入數據效率特別低,如果寫入數據超過兩個字節,在內存足夠的情況下,最好開啟一個頁緩沖區,以加快寫入速度。但是如果你認為寫入數據是你可以接受的,那么不需要這個頁緩沖區了,畢竟一旦加入頁緩沖,也是要加入不少邏輯去維護的。

再介紹一個頁寫入的算法,之前看了一些頁寫入的算法,發現實在是太麻煩了。我就在想肯定有一種更為簡單的算法的,直到這次更新筆記的時候才偶然發現了該算法。

主機通過發送設備地址后由應答位確定該設備是否存在

自行理解吧,不是很難的邏輯思路。
責任編輯:pj

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據傳輸
    +關注

    關注

    9

    文章

    1963

    瀏覽量

    64878
  • 數據線
    +關注

    關注

    8

    文章

    289

    瀏覽量

    37973
收藏 人收藏

    評論

    相關推薦

    iic協議的主從設備配置

    。 I2C協議概述 I2C協議的基本特性包括: 多主機支持 :多個主設備可以控制同一總線。 多從機支持 :多個從設備可以連接到同一總線。 地址識別 :每個從
    的頭像 發表于 02-05 11:42 ?228次閱讀

    I2C總線設備地址設置方法

    I2C總線是一種廣泛使用的串行通信協議,它允許多個設備在兩條線上(數據線SDA和時鐘線SCL)進行通信。每個設備都有一個唯一的地址,以確保數據能夠正確地發送到目標
    的頭像 發表于 01-17 15:17 ?426次閱讀

    決定IP地址的是電腦主機還是網絡?

    要搞清楚這個問題,首先要明確一點就是IP地址它本身是用于標識網絡中的設備或接口的邏輯地址,一般是有IPv4和IPv6兩種。 進一步講,IP地址并不是電腦
    的頭像 發表于 11-25 10:32 ?1378次閱讀

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-i2c與從設備通訊編程示例之i2c硬件原理

    無論是主機還是從機,當i2c設備接受一個字節數據后,會在下一個時鐘發送1個應答發送的數據為0
    發表于 10-29 16:29

    飛凌嵌入式ElfBoard ELF 1板卡-i2c與從設備通訊編程示例之i2c硬件原理

    無論是主機還是從機,當i2c設備接受一個字節數據后,會在下一個時鐘發送1個應答發送的數據為0
    發表于 10-28 08:58

    通過TMS320C6655的I2C接口配置PCM1864時,PCM1864無應答是怎么回事?

    地址分別是0x94和0x96, 通過I2C接口初始化AIC3106時沒有任何問題,發送的從設備地址是0x18;
    發表于 10-14 07:06

    PCM2912A 聲卡通過USB連接到電腦,設備的顯示名及硬件ID地址是否可以修改?

    PCM2912A 聲卡 通過 USB 連接 到 電腦,設備的顯示名 及 硬件ID 地址 是否可以修改?? 如果可以修改的話請教下方法 。謝謝
    發表于 10-09 06:35

    外部設備必須通過什么與主機

    外部設備(外設)必須通過特定的接口與主機進行連接和通信。這些接口可以是物理的,也可以是邏輯的,它們確保了數據、控制信號和狀態信息能夠在主機和外設之間有效傳輸。 物理接口 : 串行接口
    的頭像 發表于 09-30 14:16 ?761次閱讀

    usb主機模式和設備模式的區別

    : USB主機模式 在USB主機模式下,計算機或其他設備扮演主機的角色,負責管理USB總線上的通信。主機控制數據流,包括初始化連接、傳輸數據
    的頭像 發表于 09-25 09:06 ?1192次閱讀

    EEPROM的地址怎么確定

    關于EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲器)的地址確定,涉及多個方面,包括設備地址
    的頭像 發表于 09-05 10:53 ?2189次閱讀

    【龍芯2K0300蜂鳥板試用】+IIC設備讀取陀螺儀數據

    I2C 設備的器件地址訪問指定的 I2C 設備了,一個 I2C 總線連接多個 I2C 設備。 幀起始:I2C 通信起始標志,通過這個起始
    發表于 08-17 21:02

    工業設備IP地址沖突如何通過NAT網關解決

    已經陷入枯竭,IP地址重復便有可能導致數據送錯,通信網絡便會出現故障,無論是廣域網還是局域網都有可能面對到IP沖突的問題。 對此,物通博聯提供基于NAT網關的解決方案。網關可以通過WAN和LAN多個接口形成不同防火墻區域,從而對設備
    的頭像 發表于 08-07 15:21 ?404次閱讀
    工業<b class='flag-5'>設備</b>IP<b class='flag-5'>地址</b>沖突如何<b class='flag-5'>通過</b>NAT網關解決

    stm i2c的主機10地址尋機,從機7地址,能找到嗎?

    stm i2c的 主機10地址尋機,從機7地址,能找到么? 開發時都用的10
    發表于 04-10 07:10

    如何注冊星閃Sparklink設備媒體接入層標識、地址碼?

    媒體接入層標識介紹媒體接入層標識(Layer-2ID)是星閃設備用于在星閃網絡中通信的作為網絡地址的唯一標識,標識為48,支持通過擴展標
    的頭像 發表于 04-08 17:14 ?563次閱讀
    如何注冊星閃Sparklink<b class='flag-5'>設備</b>媒體接入層標識、<b class='flag-5'>地址</b>碼?

    虛擬機的ip地址主機一樣嗎

    虛擬機的ip地址主機一樣嗎? 虛擬機的IP地址主機的IP地址通常不相同。虛擬機是在主機
    的頭像 發表于 03-26 15:34 ?5677次閱讀
    主站蜘蛛池模板: 国产亚洲精品久久久极品美女 | 欧美成人综合在线 | 77788色淫视频免费观看 | 成人免费视频一区 | 色猫成人网 | jinv在线视频 | 狠狠色噜噜狠狠狠狠2021天天 | 狠狠乱| 国产色婷婷免费视频 | 欧美性区| 日本三级精品 | 国产精品美乳在线观看 | 欧美三级网 | 一级毛片在线不卡直接观看 | 香港三级理论在线观看网站 | 人人艹人人射 | 天天操国产 | 色聚网久久综合 | 日本aaaaa高清免费看 | 色偷偷女男人的天堂亚洲网 | bt 电影天堂 | 精品色 | 国产精品免费看久久久 | 亚洲综合精品成人啪啪 | 性欧美f | 亚洲免费成人 | 天天干天天拍天天射天天添天天爱 | 大色综合色综合网站 | 国产毛片农村妇女aa板 | 久久久久久国产精品免费 | 全免费一级毛片在线播放 | 四虎网址大全 | 伊人久久成人 | japanese色系tube日本护士 | 热re久久精品国产99热 | 日日摸夜夜爽夜夜爽出水 | 四虎www成人影院免费观看 | 丁香激情小说 | 国产国产人免费人成免费视频 | 中文字幕v视界影院 | 天天看天天射天天碰 |