加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶(hù)
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 導(dǎo)讀
    • 一、I2C 總線概述
    • 二、模擬 I2C 接口程序的基本框架
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于 FPGA 的模擬 I2C協(xié)議設(shè)計(jì)(上)

2023/12/18
3011
閱讀需 15 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

今天給大俠帶來(lái)基于FPGA的 模擬 I2C 協(xié)議設(shè)計(jì),由于篇幅較長(zhǎng),分三篇。今天帶來(lái)第一篇,上篇, I2C 總線解析以及模擬 I2C 接口程序的基本框架。話(huà)不多說(shuō),上貨。

導(dǎo)讀

I2C(Inter-Integrated Circuit),其實(shí)是 I2C Bus簡(jiǎn)稱(chēng),中文就是集成電路總線,它是一種串行通信總線,使用多主從架構(gòu),由飛利浦公司在1980年代為了讓主板、嵌入式系統(tǒng)或手機(jī)用以連接低速周邊設(shè)備而發(fā)展。I2C的正確讀法為“I平方C”("I-squared-C"),而“I二C”("I-two-C")則是另一種錯(cuò)誤但被廣泛使用的讀法。自2006年10月1日起,使用 I2C 協(xié)議已經(jīng)不需要支付專(zhuān)利費(fèi),但制造商仍然需要付費(fèi)以獲取 I2C 從屬設(shè)備地址。

I2C 簡(jiǎn)單來(lái)說(shuō),就是一種串行通信協(xié)議,I2C的通信協(xié)議和通信接口在很多工程中有廣泛的應(yīng)用,如數(shù)據(jù)采集領(lǐng)域的串行 AD,圖像處理領(lǐng)域的攝像頭配置,工業(yè)控制領(lǐng)域的 X 射線管配置等等。除此之外,由于 I2C 協(xié)議占用的 IO 資源特別少,連接方便,所以工程中也常選用 I2C 接口做為不同芯片間的通信協(xié)議。I2C 串行總線一般有兩根信號(hào)線,一根是雙向的數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。所有接到 I2C 總線設(shè)備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設(shè)備的時(shí)鐘線SCL接到總線的SCL上。

在現(xiàn)代電子系統(tǒng)中,有為數(shù)眾多的 IC 需要進(jìn)行相互之間以及與外界的通信。為了簡(jiǎn)化電路的設(shè)計(jì),Philips 公司開(kāi)發(fā)了一種用于內(nèi)部 IC 控制的簡(jiǎn)單的雙向兩線串行總線 I2C(Intel-Integrated Circuit bus)。1998 年當(dāng)推出 I2C 總線協(xié)議 2.0 版本時(shí),I2C 協(xié)議實(shí)際上已經(jīng)成為一個(gè)國(guó)際標(biāo)準(zhǔn)。

在進(jìn)行 FPGA 設(shè)計(jì)時(shí),經(jīng)常需要和外圍提供 I2C 接口的芯片通信。例如低功耗CMOS 實(shí)時(shí)時(shí)鐘/日歷芯片 PCF8563、LCD 驅(qū)動(dòng)芯片 PCF8562、并行口擴(kuò)展芯片 PCF8574、鍵盤(pán)/LED 驅(qū)動(dòng)器 ZLG7290 等都提供 I2C 接口。因此在 FPGA 中模擬 I2C 接口已成為 FPGA 開(kāi)發(fā)必要的步驟。

本篇將詳細(xì)講解在 FPGA 芯片中使用 VHDL/Verilog HDL 模擬 I2C 協(xié)議,以及編寫(xiě) TestBench仿真和測(cè)試程序的方法。

第一篇內(nèi)容摘要:本篇會(huì)介紹 I2C 總線解析,包括 I2C 總線概述、I2C 協(xié)議的基本概念、I2C協(xié)議的時(shí)序要求,還會(huì)介紹模擬 I2C 接口程序的基本框架等相關(guān)內(nèi)容。

一、I2C 總線概述

下面先對(duì) I2C 協(xié)議中有關(guān)數(shù)據(jù)格式和時(shí)序的內(nèi)容進(jìn)行介紹,這里沒(méi)有涉及的地方請(qǐng)參考《THE I2C-BUS SPECIFICATION VERSION 2.1 JANUARY 2000》。

1.1 I2C 總線概述

I2C 協(xié)議作為一個(gè)串行總線標(biāo)準(zhǔn)盡管沒(méi)有并行總線的數(shù)據(jù)吞吐能力,但是它的以下特點(diǎn)使其有著廣泛的應(yīng)用:

  • 只需要兩條總線—串行數(shù)據(jù)線 SDA 和串行時(shí)鐘線 SCL;
  • 每個(gè)連接到總線的器件都可以通過(guò)惟一的地址和一直存在的簡(jiǎn)單的主/從節(jié)點(diǎn)關(guān)系軟件設(shè)定地址,主節(jié)點(diǎn)可以發(fā)送數(shù)據(jù)或接收數(shù)據(jù);
  • 是真正的多主總線,當(dāng)兩個(gè)或更多主節(jié)點(diǎn)同時(shí)初始化數(shù)據(jù)傳輸時(shí),可以通過(guò)沖突檢測(cè)和仲裁防止數(shù)據(jù)被破壞;
  • 串行的 8 位雙向數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá) 100kbit/s,快速模式下可達(dá)400kbit/s,高速模式下可達(dá) 3.4Mbit/s;
  • 片上的濾波器可以濾去總線數(shù)據(jù)線上的毛刺波,保證數(shù)據(jù)完整;
  • 連接到相同總線的 IC 數(shù)量只受到總線的最大電容(400pF)限制。

總線不僅僅是互連的線,還包含系統(tǒng)通信的所有格式和過(guò)程。I2C 總線結(jié)構(gòu)上的特點(diǎn)保證了其應(yīng)用時(shí)的簡(jiǎn)潔,另外其完備的協(xié)議避免了所有混亂、數(shù)據(jù)丟失和妨礙信息的可能性。

1.2 I2C 協(xié)議的基本概念

I2C 總線支持任何 IC 生產(chǎn)過(guò)程(NMOS、CMOS 和雙極性)。串行數(shù)據(jù)線 SDA 和串行時(shí)鐘線 SCL在連接到總線的器件間傳遞信息。每個(gè)器件都有一個(gè)惟一的地址作為識(shí)別的標(biāo)志(無(wú)論是微控制器、LCD 驅(qū)動(dòng)器存儲(chǔ)器還是鍵盤(pán)接口),并且都可以發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。很明顯 LCD 驅(qū)動(dòng)器只需要接收數(shù)據(jù),而存儲(chǔ)器需要接收和發(fā)送數(shù)據(jù)。圖 1 所示的是一個(gè)高性能集成電視的例子。

圖 1 高性能集成電視

從圖 1 可以看到,應(yīng)用 I2C 總線是非常方便的。用通俗的話(huà)講 I2C 總線的硬件設(shè)計(jì)工作就是連接 SDA 和 SCL 兩條線,依靠 I2C 協(xié)議完成軟件工作。在 I2C 協(xié)議中應(yīng)理解如下的概念。

1)主/從節(jié)點(diǎn)

主節(jié)點(diǎn)負(fù)責(zé)初始化總線的數(shù)據(jù)傳輸,并產(chǎn)生允許傳輸?shù)臅r(shí)鐘信號(hào)。此時(shí)任何被尋址的器件都被認(rèn)為是從節(jié)點(diǎn)。當(dāng)有多個(gè)主節(jié)點(diǎn)在總線上傳輸數(shù)據(jù)時(shí),每個(gè)主節(jié)點(diǎn)產(chǎn)生自己的時(shí)鐘信號(hào)。掛接到總線上的所有外圍器件、外設(shè)接口都是總線上的節(jié)點(diǎn)。

2)總線上節(jié)點(diǎn)的尋址方式

在任何時(shí)刻總線上只有一個(gè)主控器件(主節(jié)點(diǎn))實(shí)現(xiàn)總線的控制操作,對(duì)總線上的其他節(jié)點(diǎn)尋址,可分時(shí)實(shí)現(xiàn)點(diǎn)-點(diǎn)的數(shù)據(jù)傳送。因此總線上每個(gè)節(jié)點(diǎn)都有一個(gè)固定的節(jié)點(diǎn)地址。

I2C 總線上主節(jié)點(diǎn)的地址由軟件給定,此地址存放在 I2C 總線的地址寄存器中。I2C 總線上所有的外圍器件都有規(guī)范的器件地址。器件地址由 7 位數(shù)字組成,它和 1 位方向位構(gòu)成了 I2C 總線器件的尋址字節(jié) SLA(Slave address)。

器件地址是 I2C 總線外圍接口器件固有的地址編碼,器件出廠時(shí)就已給定。數(shù)據(jù)方向位規(guī)定了總線上主節(jié)點(diǎn)對(duì)從節(jié)點(diǎn)的數(shù)據(jù)傳送方向。

1.3 I2C協(xié)議的時(shí)序要求

1)總線上的數(shù)據(jù)傳遞時(shí)序

I2C 總線上數(shù)據(jù)傳遞時(shí)序如圖 2 所示,具體步驟如下。

圖 2 I2C 總線的數(shù)據(jù)傳遞時(shí)序

  • 首先主節(jié)點(diǎn)器件發(fā)送一個(gè)起始信號(hào)。
  • 接下來(lái)主節(jié)點(diǎn)器件發(fā)送從節(jié)點(diǎn)地址和讀寫(xiě)方式,一共 8 位。其中從節(jié)點(diǎn)地址 7 位,讀寫(xiě)方式 1 位。
  • 與傳輸?shù)刂芬恢碌膹墓?jié)點(diǎn)器件應(yīng)答(即 ACK)。
  • 開(kāi)始數(shù)據(jù)傳輸,傳輸數(shù)據(jù)數(shù)量不限。每個(gè)字節(jié)(八位)后面跟接收數(shù)據(jù)方的應(yīng)答位。例如主節(jié)點(diǎn)器件讀取從節(jié)點(diǎn)數(shù)據(jù),從節(jié)點(diǎn)發(fā)送數(shù)據(jù),主節(jié)點(diǎn)應(yīng)答;主節(jié)點(diǎn)器件寫(xiě)數(shù)據(jù)到從節(jié)點(diǎn),主節(jié)點(diǎn)發(fā)送數(shù)據(jù),從節(jié)點(diǎn)應(yīng)答。
  • 數(shù)據(jù)傳輸結(jié)束,主節(jié)點(diǎn)器件發(fā)送一個(gè)終止信號(hào)結(jié)束整個(gè)過(guò)程。

采用 I2C 總線后對(duì)傳送的字節(jié)數(shù)沒(méi)有限制,只要求每傳送一個(gè)字節(jié)后對(duì)方回應(yīng)一個(gè)應(yīng)答位。在發(fā)送時(shí)首先發(fā)送的是數(shù)據(jù)的最高位(MSB,Most Significant Bit)。每次傳送開(kāi)始有起始信號(hào),結(jié)束時(shí)有停止信號(hào)。在總線傳送完一個(gè)字節(jié)后,可以通過(guò)對(duì)時(shí)鐘線(SCL)的控制使傳送暫停。例如當(dāng)某個(gè)外圍器件接收 N 個(gè)字節(jié)數(shù)據(jù)后需要一段處理時(shí)間以便繼續(xù)接收以后的字節(jié)數(shù)據(jù),這時(shí)可在應(yīng)答信號(hào)后使 SCL 變?yōu)榈?a class="article-link" target="_blank" href="/baike/1465710.html">電平控制總線暫停。如果主節(jié)點(diǎn)要求總線暫停也可使時(shí)鐘線保持低電平控制總線暫停。

2)總線上的時(shí)序信號(hào)

I2C 總線為同步傳輸總線,總線信號(hào)完全與時(shí)鐘同步。I2C 總線上與數(shù)據(jù)傳送有關(guān)的信號(hào)有起始信號(hào) S、終止信號(hào) P、應(yīng)答信號(hào) A 以及位傳送信號(hào)。下面將對(duì)這些信號(hào)一一介紹。

(1)起始信號(hào)

起始信號(hào)(Start Condition)如圖 3 所示。當(dāng)時(shí)鐘線 SCL 為高電平時(shí),數(shù)據(jù)線 SDA 從高電平向低電平變化將形成起始信號(hào),啟動(dòng) I2C 總線。

(2)終止信號(hào)

終止信號(hào)(Stop Condition)如圖 3 所示。當(dāng)時(shí)鐘線 SCL 為高電平時(shí),數(shù)據(jù)線 SDA 從低電平向高電平變化將形成終止信號(hào),停止 I2C 總線。

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

如圖 3 所中 ACK 第 9 個(gè)時(shí)鐘脈沖對(duì)應(yīng)應(yīng)答位,相應(yīng)數(shù)據(jù)線上低電平時(shí)為應(yīng)答信號(hào),高電平時(shí)為非應(yīng)答信號(hào)。

圖 3 起始信號(hào)和終止信號(hào)

(4)位傳送信號(hào)

在 I2C 總線啟動(dòng)后或應(yīng)答信號(hào)后的第 1~8 個(gè)時(shí)鐘脈沖對(duì)應(yīng)于一個(gè)字節(jié)的 8 位數(shù)據(jù)傳送。脈沖高電平期間,數(shù)據(jù)串行傳送;低電平期間為數(shù)據(jù)準(zhǔn)備,允許總線上數(shù)據(jù)電平變換。

二、模擬 I2C 接口程序的基本框架

模擬 I2C 接口程序的基本框架如圖 4 所示。

圖 4 模擬 I2C 接口程序的基本框架

1)程序接口

用于和應(yīng)用程序連接的接口,將應(yīng)用程序的數(shù)據(jù)按照 I2C 協(xié)議的方式通過(guò) SDA 傳遞給外部器件。包括下列內(nèi)容:

  • clk_I FPGA 外部時(shí)鐘信號(hào)。
  • rst_I 同步重起信號(hào)。
  • arst_I 異步重起信號(hào)。
  • adr_I 從節(jié)點(diǎn)地址。
  • dat_I 輸入數(shù)據(jù)。
  • dat_o 輸出數(shù)據(jù)。
  • we_I 寫(xiě)有效信號(hào)。
  • stb_I 接口有效信號(hào)。
  • cyc_I 有效總線周期輸入。
  • ack_o 應(yīng)答信號(hào)輸出。
  • inta_o 中斷信號(hào)輸出。

2)時(shí)鐘設(shè)置寄存器

I2C 協(xié)議提供了 3 種速度模式:正常速度模式 100kbit/s、快速模式 400kbit/s、高速模式3.5Mbit/s。SCL 輸出的時(shí)鐘信號(hào)頻率和速度模式一致。程序內(nèi)部使用 5 倍 SCL 信號(hào)作為時(shí)鐘,而 FPGA 外部時(shí)鐘需要經(jīng)過(guò)分頻得到程序內(nèi)部使用的時(shí)鐘。

例如:采用正常速度 100kbit/s,F(xiàn)PGA 外部時(shí)鐘為 50MHz,則時(shí)鐘設(shè)置寄存器需要設(shè)置為(50MHz/5*100kHz – 1=99)。

3)時(shí)鐘產(chǎn)生模塊

時(shí)鐘產(chǎn)生模塊產(chǎn)生 4 倍 SCL 頻率的時(shí)鐘信號(hào),它為位傳輸控制模塊中所有同步動(dòng)作提供觸發(fā)信號(hào)。

4)命令寄存器

命令寄存器共 8 位,它決定是否在總線上產(chǎn)生各種時(shí)序信號(hào)、是否讀/寫(xiě)數(shù)據(jù),各位表示的含義如表 1 所示。

表 1 命令寄存器內(nèi)容

5)狀態(tài)寄存器

狀態(tài)寄存器用來(lái)顯示當(dāng)前總線的狀態(tài),例如是否接收到從節(jié)點(diǎn)的應(yīng)答信號(hào)、是否忙、是否在傳遞數(shù)據(jù)等,具體內(nèi)容如表 2 所示。

表 2 狀態(tài)寄存器內(nèi)容

6)數(shù)據(jù)傳輸寄存器

數(shù)據(jù)傳輸寄存器用于保存等待傳輸?shù)臄?shù)據(jù)。當(dāng)傳遞從節(jié)點(diǎn)地址信息時(shí),前 7 位保存從節(jié)點(diǎn)地址,最后一位保存讀寫(xiě)命令;當(dāng)傳遞普通數(shù)據(jù)時(shí),8 位保存一個(gè)字節(jié)數(shù)據(jù)。數(shù)據(jù)傳輸寄存器具體內(nèi)容如表 3 所示。

表 3 數(shù)據(jù)傳輸寄存器內(nèi)容

7)數(shù)據(jù)接收寄存器

數(shù)據(jù)接收寄存器用于保存通過(guò) I2C 總線接收到的最后一個(gè)字節(jié)內(nèi)容,具體內(nèi)容如表4所示。

表 4 數(shù)據(jù)接收寄存器內(nèi)容

8)字節(jié)傳輸控制模塊

字節(jié)傳輸控制模塊以字節(jié)為單位控制 I2C 總線的數(shù)據(jù)傳輸。這個(gè)模塊按照命令寄存器設(shè)置的內(nèi)容將數(shù)據(jù)傳輸寄存器內(nèi)容傳遞到 I2C 總線的接收端,或者從 I2C 總線發(fā)送端接收數(shù)據(jù)并保存到數(shù)據(jù)接收寄存器中。

9)位傳輸控制模塊

位傳輸控制模塊以位為單位進(jìn)行 I2C 總線的數(shù)據(jù)傳輸和產(chǎn)生各個(gè) I2C 協(xié)議命令(如開(kāi)始、停止、重復(fù)開(kāi)始等)。字節(jié)傳輸控制模塊控制位傳輸控制模塊的各種動(dòng)作。例如讀取一個(gè)字節(jié)數(shù)據(jù),位傳輸控制模塊需要執(zhí)行 8 個(gè)讀的命令。

10)數(shù)據(jù)移位寄存器

數(shù)據(jù)移位寄存器保存的數(shù)據(jù)總是和當(dāng)前的數(shù)據(jù)傳輸相關(guān)的。例如在進(jìn)行讀操作時(shí),主節(jié)點(diǎn)通過(guò)移位寄存器依次通過(guò) SDA 獲得來(lái)自 I2C 發(fā)送端的數(shù)據(jù),完成后數(shù)據(jù)拷貝到數(shù)據(jù)接收寄存器中。在寫(xiě)操作時(shí),數(shù)據(jù)傳輸寄存器中的數(shù)據(jù)拷貝到數(shù)據(jù)移位寄存器中,然后依次通過(guò) SDA 將數(shù)據(jù)傳輸?shù)?I2C 總線的接收端。

本篇到此結(jié)束,下一篇帶來(lái)基于 FPGA 的模擬 I2C 協(xié)議設(shè)計(jì)(中),I2C 協(xié)議的具體實(shí)現(xiàn),包括位傳輸?shù)膶?shí)現(xiàn)、字節(jié)傳輸?shù)膶?shí)現(xiàn)以及程序主體的實(shí)現(xiàn)等相關(guān)內(nèi)容。

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
M1A3P600-1FG144I 1 Microchip Technology Inc Field Programmable Gate Array, 13824 CLBs, 600000 Gates, CMOS, PBGA144
暫無(wú)數(shù)據(jù) 查看
EP2C8T144C8N 1 Altera Corporation Field Programmable Gate Array, 516 CLBs, 402.5MHz, 8256-Cell, CMOS, PQFP144, LEAD FREE, TQFP-144

ECAD模型

下載ECAD模型
$27.44 查看
A3P250-PQG208I 1 Microsemi Corporation Field Programmable Gate Array, 6144 CLBs, 250000 Gates, 350MHz, CMOS, PQFP208, 28 X 28 MM, 3.40 MM HEIGHT, 0.50 MM PITCH, GREEN, PLASTIC, QFP-208

ECAD模型

下載ECAD模型
$80.27 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

任何技術(shù)的學(xué)習(xí)就好比一個(gè)江湖,對(duì)于每一位俠客都需要不斷的歷練,從初入江湖的小白到歸隱山林的隱世高人,需要不斷的自我感悟自己修煉,讓我們一起仗劍闖FPGA乃至更大的江湖。