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

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

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

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

電子設(shè)計(jì) ? 來(lái)源:面包板社區(qū) ? 作者:面包板社區(qū) ? 2021-03-25 16:16 ? 次閱讀

I2C是什么

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

多主多從

5種速率

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

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

快速模式(Fast):400kbps

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

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

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

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

pIYBAGBcReSAZMf_AAD1C9un248023.png

超快模式在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)。 起始和停止信號(hào)

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

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

pIYBAGBcRfCAA7NNAAE4f20AZRk049.png

數(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)來(lái)通知主機(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ā)來(lái)的數(shù)據(jù),會(huì)把SDA拉低,表示應(yīng)答響應(yīng)。

pIYBAGBcRf2ALCNCAAG_3z0rBog572.png

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

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

從機(jī)正在執(zhí)行一些操作,處于忙狀態(tài),還沒(mé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ù)了

讀寫(xiě)時(shí)序

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

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

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

7位和10位地址

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

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

10位地址讀

I2C保留字節(jié)

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

pIYBAGBcRj-ACfRQAAJyIqeOS04142.png

保留字節(jié)上述的10位地址模式,就是使用到了最后一種 保留字節(jié)。第一種廣播模式,可以通過(guò)寫(xiě)入第二個(gè)字節(jié)06h來(lái) 復(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,通過(guò)對(duì)照NXP I2C協(xié)議器件列表可以查詢到器件所屬的 廠商和型號(hào)。 24位ID設(shè)備ID與器件廠商對(duì)應(yīng)表

o4YBAGBcRk6AE1nhAAVxCjM39zs140.png

ID與廠商對(duì)照

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

FPGA實(shí)現(xiàn)、、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):

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

i2c_writeAT24C1024B讀時(shí)序:

i2c_read

SPI和I2C的對(duì)比

I2C是 半雙工,是全雙工。

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

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

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

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

I2C通過(guò) 器件地址來(lái)選擇從機(jī),從機(jī)數(shù)量的增加不會(huì)導(dǎo)致GPIO的增加,而SPI通過(guò)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)準(zhǔn)文檔下載

目前網(wǎng)上比較詳細(xì)的介紹I2C文檔主要有以下3個(gè):

1. I2C官方標(biāo)準(zhǔn)文檔_UM10204

I2C的官方文檔是原飛利浦(Philips)半導(dǎo)體事業(yè)部,現(xiàn)恩智浦(NXP)半導(dǎo)體發(fā)布的UM10204文檔,全文共64頁(yè),是目前最權(quán)威最詳細(xì)的I2C協(xié)議介紹文章,最新版本Rev. 6發(fā)布于20140404, UM10204_4 April 2014: I2C-bus specification and user manual_Rev.6

2. TI:理解I2C文檔_SLVA704

TI在2015年發(fā)布了一篇SLVA704文檔, 全文共8頁(yè),精簡(jiǎn)的概括了I2C協(xié)議的電氣特性,操作時(shí)序,讀寫(xiě)時(shí)序等,比較適合I2C入門(mén)學(xué)習(xí)。

3. ZLG:I2C總線規(guī)范中文版

這篇文檔發(fā)布于2000年左右,是對(duì)飛利浦官方文檔UM10204_v2.1的翻譯。

I2C協(xié)議文檔只是最基礎(chǔ)的文檔,具體寄存器讀寫(xiě)操作等操作,還是要結(jié)合所使用芯片的數(shù)據(jù)手冊(cè)來(lái)使用。
編輯:hfy

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

    關(guān)注

    1629

    文章

    21748

    瀏覽量

    603920
  • I2C總線
    +關(guān)注

    關(guān)注

    8

    文章

    391

    瀏覽量

    60980
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    i2c總線ppt(I2C總線器件應(yīng)用)

    I2C總線器件應(yīng)用第一節(jié) I2C總線器件應(yīng)用概述I2C總線工作原理I2C總線系統(tǒng)結(jié)構(gòu)I2C總線系統(tǒng)結(jié)構(gòu)如圖7-1所示。其中,SCL是時(shí)鐘線,
    發(fā)表于 08-13 17:34 ?0次下載

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

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

    I2C Guid I2C指南

    I2C Guid  I2C指南 The I2C bus is used in a wide rangeof applications because it is simpleand
    發(fā)表于 04-23 13:55 ?36次下載

    什么是i2c總線

    什么是i2c總線  下載請(qǐng)點(diǎn)擊: i2c總線協(xié)議中文版 
    發(fā)表于 11-05 09:26 ?2924次閱讀

    SPI總線及I2C總線工作原理

    SPI總線及I2C總線工作原理,本內(nèi)容詳細(xì)介紹了SPI總線和I2C總線的工作原理和比較
    發(fā)表于 12-08 16:55 ?0次下載

    i2c

    單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;
    發(fā)表于 05-17 11:09 ?35次下載

    CAN、I2S、I2C、SPI、SSP總線的介紹和比較

    CAN、I2S、I2C、SPI、SSP總線的介紹和比較。
    發(fā)表于 07-14 16:20 ?53次下載

    淺談I2C總線,I2C接口和SPI接口的作用相同

    SDA 和 SCL 都是雙向的。SPI 總線有兩根單獨(dú)的線,分別用于兩個(gè)方向的通信,而 I2C 總線不同,它使用同一根線來(lái)完成主機(jī)發(fā)送數(shù)據(jù)和接收從機(jī)響應(yīng)。另外,與 SPI 總線具有多個(gè)工作模式
    的頭像 發(fā)表于 03-21 10:24 ?2.5w次閱讀
    淺談<b class='flag-5'>I2C</b>總線,<b class='flag-5'>I2C</b>接口和<b class='flag-5'>SPI</b>接口的作用相同

    一文看懂I2C協(xié)議

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

    硬件I2C與模擬I2C

    硬件I2C對(duì)應(yīng)芯片上的I2C外設(shè),有相應(yīng)I2C驅(qū)動(dòng)電路,其所使用的I2C管腳也是專用的,因而效率要遠(yuǎn)高于軟件模擬的I2C;一般也較為穩(wěn)定,但
    發(fā)表于 12-28 19:14 ?81次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    一文看懂I2C協(xié)議

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

    I2C debug出現(xiàn)問(wèn)題怎么解決

    _transfer 返回值為 -6? 返回值為 -6 表示為 NACK 錯(cuò)誤,即對(duì)方設(shè)備無(wú)應(yīng)答響應(yīng),這種情況一般為外設(shè)的問(wèn)題,常見(jiàn)的有以下幾種情況: I2C 地址錯(cuò)誤,解決方法是測(cè)量 I2C 波形,確認(rèn)是否
    的頭像 發(fā)表于 07-22 15:00 ?3755次閱讀

    I2CI3C關(guān)于功耗和傳輸速率的對(duì)比

    I2CI3C 關(guān)于功耗和傳輸速率的對(duì)比I3C 使用推挽功能的雙線串行接口,速度可達(dá) 12.5 MHz I3C 同一總線上共存的傳統(tǒng)
    的頭像 發(fā)表于 07-22 16:24 ?1916次閱讀
    <b class='flag-5'>I2C</b>和<b class='flag-5'>I3C</b>關(guān)于功耗和傳輸速率的<b class='flag-5'>對(duì)比</b>

    I2CSPI的區(qū)別是什么 速率對(duì)比

    I2CSPI 對(duì)比 ? 功能 I2C SPI 線數(shù) 2(SDA,SCL) 4(MOSI,M
    的頭像 發(fā)表于 07-27 10:55 ?3763次閱讀

    UART、SPI、I2C比較 串口通信介紹

    UART、SPI、I2C比較 I2C線更少,比UART、SPI更為強(qiáng)大,但是技術(shù)上也更加麻煩些,因?yàn)?b class='flag-5'>I2C需要有雙向IO的支持,而且使用上拉
    的頭像 發(fā)表于 11-09 18:06 ?1460次閱讀
    UART、<b class='flag-5'>SPI</b>、<b class='flag-5'>I2C</b>比較 串口通信介紹