0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

I2C通訊協(xié)議及其FPGA實(shí)測(cè)波形

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-07-10 09:07 ? 次閱讀

本篇文章介紹I2C通訊協(xié)議及其FPGA實(shí)測(cè)波形。

有哪些內(nèi)容

I2C是什么

5種速率

4種信號(hào)

讀寫時(shí)序

7位和10位地址

I2C保留字節(jié)

FPGA實(shí)測(cè)I2C波形

SPI和I2C的對(duì)比

I2C是什么

消費(fèi)電子,工業(yè)電子等領(lǐng)域,會(huì)使用各種類型的芯片,如微控制器電源管理,顯示驅(qū)動(dòng),傳感器,存儲(chǔ)器,轉(zhuǎn)換器等,他們有著不同的功能,有時(shí)需要快速的進(jìn)行數(shù)據(jù)的交互,為了使用最簡單的方式使這些芯片互聯(lián)互通,于是I2C誕生了,I2C(Inter-Integrated Circuit)是一種通用的總線協(xié)議。它是由Philips(飛利浦)公司,現(xiàn)NXP(恩智浦)半導(dǎo)體開發(fā)的一種簡單的雙向兩線制總線協(xié)議標(biāo)準(zhǔn)。對(duì)于硬件設(shè)計(jì)人員來說,只需要2個(gè)管腳,極少的連接線和面積,就可以實(shí)現(xiàn)芯片間的通訊,對(duì)于軟件開發(fā)者來說,可以使用同一個(gè)I2C驅(qū)動(dòng)庫,來實(shí)現(xiàn)實(shí)現(xiàn)不同器件的驅(qū)動(dòng),大大減少了軟件的開發(fā)時(shí)間。極低的工作電流,降低了系統(tǒng)的功耗,完善的應(yīng)答機(jī)制大大增強(qiáng)通訊的可靠性。

c7cd0430-ff1b-11ec-ba43-dac502259ad0.jpg

多主多從

5種速率

I2C協(xié)議可以工作在以下5種速率模式下,不同的器件可能支持不同的速率。

標(biāo)準(zhǔn)模式(Standard):100kbps

快速模式(Fast):400kbps

快速模式+(Fast-Plus):1Mbps

高速模式(High-speed):3.4Mbps

超快模式(Ultra-Fast):5Mbps(單向傳輸)

c7da4df2-ff1b-11ec-ba43-dac502259ad0.jpg

I2C速率模式【bps:bit/s,即SCL的頻率】其中超快模式是單向數(shù)據(jù)傳輸,通常用于LED、LCD等不需要應(yīng)答的器件,和正常的I2C操作時(shí)序類似,但是只進(jìn)行寫數(shù)據(jù),不需要考慮ACK應(yīng)答信號(hào)。

c7fa47c4-ff1b-11ec-ba43-dac502259ad0.jpg

超快模式在I2C協(xié)議的官方文檔NXP_UM10204_I2C-bus specification and user manual_Rev.6,超快模式和其他模式在3.2和3.1章節(jié)分別進(jìn)行介紹。

4種信號(hào)

I2C協(xié)議最基礎(chǔ)的幾種信號(hào):起始、停止、應(yīng)答和非應(yīng)答信號(hào)。

起始信號(hào)

I2C協(xié)議規(guī)定,SCL處于高電平時(shí),SDA由高到低變化,這種信號(hào)是起始信號(hào)。

停止信號(hào)

I2C協(xié)議規(guī)定,SCL處于高電平,SDA由低到高變化,這種信號(hào)是停止信號(hào)。

c81564aa-ff1b-11ec-ba43-dac502259ad0.jpg

起始和停止信號(hào)

數(shù)據(jù)有效性

I2C協(xié)議對(duì)數(shù)據(jù)的采樣發(fā)生在SCL高電平期間,除了起始和停止信號(hào),在數(shù)據(jù)傳輸期間,SCL為高電平時(shí),SDA必須保持穩(wěn)定,不允許改變,在SCL低電平時(shí)才可以進(jìn)行變化。

c820235e-ff1b-11ec-ba43-dac502259ad0.jpg

數(shù)據(jù)有效性

應(yīng)答信號(hào)

I2C最大的一個(gè)特點(diǎn)就是有完善的應(yīng)答機(jī)制,從機(jī)接收到主機(jī)的數(shù)據(jù)時(shí),會(huì)回復(fù)一個(gè)應(yīng)答信號(hào)來通知主機(jī)表示“我收到了”。應(yīng)答信號(hào)出現(xiàn)在1個(gè)字節(jié)傳輸完成之后,即第9個(gè)SCL時(shí)鐘周期內(nèi),此時(shí)主機(jī)需要釋放SDA總線,把總線控制權(quán)交給從機(jī),由于上拉電阻的作用,此時(shí)總線為高電平,如果從機(jī)正確的收到了主機(jī)發(fā)來的數(shù)據(jù),會(huì)把SDA拉低,表示應(yīng)答響應(yīng)。

c83c443a-ff1b-11ec-ba43-dac502259ad0.jpg

應(yīng)答信號(hào)使用MCU、FPGA等控制器實(shí)現(xiàn)時(shí),需要在第9個(gè)SCL時(shí)鐘周期把SDA設(shè)置為高阻輸入狀態(tài),如果讀取到SDA為低電平,則表示數(shù)據(jù)被成功接收到,可以進(jìn)行下一步操作。

非應(yīng)答信號(hào)

當(dāng)?shù)?個(gè)SCL時(shí)鐘周期時(shí),SDA保持高電平,表示非應(yīng)答信號(hào)。

c84e428e-ff1b-11ec-ba43-dac502259ad0.png

非應(yīng)答產(chǎn)生非應(yīng)答信號(hào)可能是主機(jī)產(chǎn)生也可能是從機(jī)產(chǎn)生,產(chǎn)生非應(yīng)答信號(hào)的情況主要有以下幾種:

I2C總線上沒有主機(jī)所指定地址的從機(jī)設(shè)備

從機(jī)正在執(zhí)行一些操作,處于忙狀態(tài),還沒有準(zhǔn)備好與主機(jī)通訊

主機(jī)發(fā)送的一些控制命令,從機(jī)不支持

主機(jī)接收從機(jī)數(shù)據(jù)時(shí),主機(jī)產(chǎn)生非應(yīng)答信號(hào),通知從機(jī)數(shù)據(jù)傳輸結(jié)束,不要再發(fā)數(shù)據(jù)了

讀寫時(shí)序

向指定寄存器地址寫入指定數(shù)據(jù)操作時(shí)序:

c85aab3c-ff1b-11ec-ba43-dac502259ad0.jpg

寫時(shí)序從指定寄存器地址讀取數(shù)據(jù)操作時(shí)序:

c88b1088-ff1b-11ec-ba43-dac502259ad0.jpg

讀時(shí)序注意,讀數(shù)據(jù)時(shí)有兩次起始信號(hào)。

7位和10位地址

大多數(shù)I2C器件支持7位地址模式,有一些器件還支持10位地址,而且兩種類型的器件可以連接在同一個(gè)I2C總線上,目前10位地址的器件還沒有被廣泛使用。主機(jī)發(fā)送,從機(jī)接收。使用10位地址進(jìn)行寫時(shí)序:

c8b20c2e-ff1b-11ec-ba43-dac502259ad0.jpg

10位地址寫主機(jī)接收,從機(jī)發(fā)送。使用10位地址進(jìn)行讀時(shí)序:

c8ba38ae-ff1b-11ec-ba43-dac502259ad0.jpg

10位地址讀

I2C保留字節(jié)

I2C讀寫時(shí)起始位之后的第一個(gè)字節(jié),除了廠商指定的設(shè)備地址外,還有一些保留字節(jié),主要有兩組0000 xxx和1111 xxx,保留字節(jié)的含義:

c8cc82de-ff1b-11ec-ba43-dac502259ad0.jpg

保留字節(jié)上述的10位地址模式,就是使用到了最后一種保留字節(jié)。第一種廣播模式,可以通過寫入第二個(gè)字節(jié)06h來復(fù)位I2C總線上所有的從機(jī)器件。具體操作時(shí)序可以查看文檔NXP_UM10204_I2C-bus specification and user manual_Rev.6:3.1.12 Reserved addresses章節(jié)有詳細(xì)介紹。其中device ID控制字(1111 1xx1),可以讀取I2C器件內(nèi)部的24位器件ID,通過對(duì)照NXP I2C協(xié)議器件列表可以查詢到器件所屬的廠商和型號(hào)。

c8f8a602-ff1b-11ec-ba43-dac502259ad0.jpg

24位ID設(shè)備ID與器件廠商對(duì)應(yīng)表

c9037b22-ff1b-11ec-ba43-dac502259ad0.jpg

ID與廠商對(duì)照

FPGA實(shí)測(cè)I2C波形

FPGA實(shí)現(xiàn)UART、SPI、I2C等串行時(shí)序,最常用的實(shí)現(xiàn)方式就是狀態(tài)機(jī)大法,將各個(gè)步驟分解為各個(gè)狀態(tài),然后根據(jù)不同的狀態(tài)去控制輸出或讀取輸入,細(xì)節(jié)方面需要考慮數(shù)據(jù)的對(duì)齊、建立和保持時(shí)間、一些異常情況時(shí)狀態(tài)的跳轉(zhuǎn),不能進(jìn)入死循環(huán),或卡死在某一個(gè)狀態(tài)。I2C控制狀態(tài)機(jī)狀態(tài)定義:

//general S0_IDLE = 0, S1_START1 = 1, S2_CTRL_BYTE1 = 2, S3_ACK1 = 3, S4_ADDR = 4, S5_ACK2 = 5, //write: 0-1-2-3-4-5-》6-7-13-14 S6W_DATA = 6, S7W_ACK3 = 7, //read: 0-1-2-3-4-5-》8-9-10-11-12-13-14 S8R_START2 = 8, S9R_CTRL_BYTE2 = 9, S10R_ACK3 = 10, S11R_DATA = 11, S12R_NACK = 12, //general S13_STOP = 13, S14_DONE = 14, S15_ERR = 15;注意SDA雙向端口的方向控制。

output eeprom_scl, inout eeprom_sda, localparam DIR_IN = 1‘b0; localparam DIR_OUT = !DIR_IN; reg dir; reg i2c_sda; reg i2c_scl; assign eeprom_scl = i2c_scl; assign eeprom_sda = (dir == DIR_OUT) ? i2c_sda : 1’bz; wire sda_in = eeprom_sda;SDA應(yīng)該在第9個(gè)SCL時(shí)鐘周期設(shè)置為輸入狀態(tài):

c92deab0-ff1b-11ec-ba43-dac502259ad0.jpg

SDA方向控制下圖的波形是使用Xilinx FPGA對(duì)AT24C1024的驅(qū)動(dòng),使用片上邏輯分析儀ChipScope抓取的實(shí)際波形,AT24C1024B存儲(chǔ)空間為1024K Bit = 131072 Byte,存儲(chǔ)單元地址位寬為17位。AT24C1024B寫時(shí)序:

c949b7ea-ff1b-11ec-ba43-dac502259ad0.jpg

i2c_writeAT24C1024B讀時(shí)序:

c9588428-ff1b-11ec-ba43-dac502259ad0.jpg

i2c_read

SPI和I2C的對(duì)比

I2C是半雙工,SPI是全雙工。

I2C支持多主多從模式,而SPI只能有一個(gè)主機(jī)。

從GPIO占用上來看,I2C占用更少的GPIO,更節(jié)省資源。

I2C有應(yīng)答響應(yīng)機(jī)制,數(shù)據(jù)可靠性更高,SPI沒有應(yīng)答機(jī)制。

I2C速率不會(huì)太高,最高速率3.4Mbps,SPI可以達(dá)到很高的速率。

I2C通過器件地址來選擇從機(jī),從機(jī)數(shù)量的增加不會(huì)導(dǎo)致GPIO的增加,而SPI通過CS選擇從機(jī),每增加一個(gè)從機(jī)就要多占用一個(gè)GPIO。

SPI協(xié)議在SCLK邊沿進(jìn)行數(shù)據(jù)采樣,I2C在SCL高電平期間進(jìn)行數(shù)據(jù)采樣。

兩者大多都應(yīng)用于板內(nèi)器件短距離通訊。

原文標(biāo)題:一文看懂I2C協(xié)議

文章出處:【微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1625

    文章

    21640

    瀏覽量

    601362
  • 數(shù)據(jù)傳輸
    +關(guān)注

    關(guān)注

    9

    文章

    1809

    瀏覽量

    64419
  • 通訊協(xié)議
    +關(guān)注

    關(guān)注

    10

    文章

    268

    瀏覽量

    20312

原文標(biāo)題:一文看懂I2C協(xié)議

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SPI和I2C的對(duì)比 FPGA實(shí)測(cè)I2C波形

    I2C協(xié)議對(duì)數(shù)據(jù)的采樣發(fā)生在 SCL高電平期間,除了起始和停止信號(hào),在數(shù)據(jù)傳輸期間,SCL為高電平時(shí),SDA必須 保持穩(wěn)定,不允許改變,在SCL低電平時(shí)才可以進(jìn)行變化。
    的頭像 發(fā)表于 03-25 16:16 ?5491次閱讀

    I2C通訊協(xié)議

    目錄 I2C協(xié)議 I2C 物理層I2C協(xié)議層STM32的硬件I2C軟件模擬
    發(fā)表于 08-11 07:36

    I2C通訊協(xié)議簡介

    I2C簡介I2C 通訊協(xié)議(Inter-Integrated Circuit)是由Phiilps公司開發(fā)的,由于它引腳少,硬件實(shí)現(xiàn)簡單,可擴(kuò)展性強(qiáng),不需要USART、CAN等
    發(fā)表于 08-19 07:00

    I2C協(xié)議通訊流程分享

    I2C協(xié)議通訊過程發(fā)送時(shí)1.產(chǎn)生起始信號(hào)s,產(chǎn)生EV5事件,SR1
    發(fā)表于 01-20 06:16

    I2C總線接口模塊設(shè)計(jì)

    本實(shí)驗(yàn)是基于EasyFPGA030的I2C總線接口模塊設(shè)計(jì),用EasyFPGA030開發(fā)套件通過I2C協(xié)議實(shí)現(xiàn)對(duì)二線制
    發(fā)表于 11-02 17:01 ?41次下載

    I2C總線協(xié)議及其應(yīng)用(圖)

    I2C總線協(xié)議及其應(yīng)用
    發(fā)表于 06-01 20:22 ?7020次閱讀

    I2C總線協(xié)議及其應(yīng)用

    I2C總線協(xié)議及其應(yīng)用 一、I2C總線介紹: ---- 由于大規(guī)模集成電路技術(shù)的發(fā)展,在單個(gè)芯片集成CPU以及組成一個(gè)單獨(dú)工作系統(tǒng)
    發(fā)表于 02-08 11:23 ?1548次閱讀
    <b class='flag-5'>I2C</b>總線<b class='flag-5'>協(xié)議</b><b class='flag-5'>及其</b>應(yīng)用

    一文看懂I2C協(xié)議

    文章目錄I2C是什么5種速率4種信號(hào)起始信號(hào)停止信號(hào)數(shù)據(jù)有效性應(yīng)答信號(hào)非應(yīng)答信號(hào)讀寫時(shí)序7位和10位地址I2C保留字節(jié)FPGA實(shí)測(cè)I2C
    發(fā)表于 12-05 19:21 ?15次下載
    一文看懂<b class='flag-5'>I2C</b><b class='flag-5'>協(xié)議</b>

    基于I2C下的溫濕度采集實(shí)驗(yàn)

    相關(guān)代碼3、設(shè)備連線及其設(shè)置4、實(shí)驗(yàn)結(jié)果四、總結(jié)一、I2C相關(guān)了解及介紹1、基本介紹I2C 通訊協(xié)議(Inter-Integrated Ci
    發(fā)表于 12-07 09:21 ?3次下載
    基于<b class='flag-5'>I2C</b>下的溫濕度采集實(shí)驗(yàn)

    I2C通訊協(xié)議詳解

    I2C協(xié)議總結(jié)兩個(gè)方面物理層電氣特性協(xié)議I2C基本讀寫過程#寫過程通訊復(fù)合格式通訊信號(hào)的判斷
    發(fā)表于 12-29 19:32 ?9次下載
    <b class='flag-5'>I2C</b><b class='flag-5'>通訊</b><b class='flag-5'>協(xié)議</b>詳解

    一文看懂I2C協(xié)議

    電子行業(yè)最常用的3種串行通訊協(xié)議:UART、SPI和I2C。前面介紹了串口通訊協(xié)議及其
    發(fā)表于 01-25 18:32 ?40次下載
    一文看懂<b class='flag-5'>I2C</b><b class='flag-5'>協(xié)議</b>

    什么是I2C協(xié)議I2C的功能特點(diǎn)有哪些

    I2C協(xié)議是一個(gè)允許多個(gè) “從機(jī)” 芯片和一個(gè)或更多的 “主機(jī)” 芯片進(jìn)行通訊協(xié)議。它就像串行外設(shè)接口(SPI)一樣,只能用于短距離通信。
    的頭像 發(fā)表于 09-06 10:03 ?8334次閱讀

    I2C通信協(xié)議及其工作原理

    "也許你聽說過I2C,或者你也正在使用I2C,但你有沒有了解過什么是I2C?I2C是如何工作的?讓我們一起了解一下什么是I2C?以及它的工作
    的頭像 發(fā)表于 04-19 09:36 ?4764次閱讀

    I2C通訊協(xié)議

    I2C通訊協(xié)議是一種由飛利浦公司開發(fā)的串行通信協(xié)議,具有引腳少、硬件實(shí)現(xiàn)簡單、可擴(kuò)展性強(qiáng)等優(yōu)點(diǎn)。它僅使用兩條線(SCL時(shí)鐘線和SDA數(shù)據(jù)線)就能實(shí)現(xiàn)多機(jī)
    的頭像 發(fā)表于 08-04 11:39 ?1583次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>通訊</b><b class='flag-5'>協(xié)議</b>

    i2c采樣是上升沿嗎?

    數(shù)據(jù)。在本文中,我們將詳細(xì)討論I2C采樣的工作原理,采樣時(shí)機(jī)以及如何進(jìn)行I2C采樣。 I2C采樣的原理 I2C采樣是基于I2C
    的頭像 發(fā)表于 09-19 17:16 ?2480次閱讀