I2C(Inter Integrated Circuit)雙向二線制串行總線,是由飛利浦公司制定的。I2C總線是一個多主機的總線,使用串行數據線(SDA)和串行時鐘線(SCL)在總線上傳遞信息。每個器件都有一個唯一的識別地址,而且都可以作為一個發送器或接收器。當連接在I2C總線上的多個主機器件同時傳輸數據時,通過仲裁來避免沖突。SDA和SCL都是雙向線路,通過一個電流源或上拉電阻連接到電源。器件輸出級必須是漏極開路或集電極開路,當總線空閑時,兩條線路處于高電平,執行線與的功能。 Actel公司免費提供I2C IP核——Core I2C。Core I2C是基于APB總線形式的,它的優點是可以連接到Core 8051或者是Cortex M1處理器上,方便用戶進行SoC設計,本文將主要介紹Core I2C的原理與應用。 1. Core I2C介紹 (1)I2C協議簡介 I2C總線協議定義如下:只有在總線處于“非忙”狀態時,才能開始數據傳輸。在數據傳輸期間,只要時鐘線為高電平,數據線都必須保持穩定,否則數據線上的任何變化都被當作“啟動”或“停止”信號。圖1所示為總線狀態的定義。 I2C總線的工作方式為:當SCL為高電平時,如果檢測到SDA的下降沿,則啟動數據的傳輸;在數據傳輸時,只要SCL為高電平時,SDA數據必須保持穩定,SDA數據可以在SCL的低電平時發生變化;當SCL為高電平時,如果檢測到SDA的上升沿,則停止數據的傳輸。 (2)Core I2C內部結構 Core I2C的內部結構框圖如圖2所示。它主要由串行時鐘發生器、地址寄存器、控制寄存器、狀態寄存器和APB總線接口等組成的。 ● 串行時鐘發生器模塊:提供SCL時鐘脈沖。 ● 地址寄存器模塊:包含了內核編程的地址信息。 ● 控制寄存器模塊:控制串行傳輸的啟動、重啟、終止、位速率、地址識別和應答等功能。 ● 狀態寄存器模塊:包含了Core I2C內部寄存器工作的狀態信息。 ● APB總線接口:提供了I2C和APB總線通信的接口。 (3)Core I2C內部寄存器 Core I2C的寄存器的地址映射如表 1所示。 ● 控制寄存器——I2C_CTRL Bit7:串行時鐘位2,和第0位、第1位一起決定分頻系數。 Bit6:I2C使能位,1表示I2C被使能,否則被禁止。 Bit5:起始標志位,1表示起始標志位有效,總線在空閑時將會產生一個起始狀態位。 Bit4:停止標志位,1表示停止標志位有效,總線將會產生一個停止狀態位。 Bit3:串行中斷標志位,在狀態寄存器的值被更新以后,這位必須被清零。 Bit2:主/從機設置位,1表示工作在從機模式,0表示工作在主機模式。 Bit1:串行時鐘位1,和第7位、第0位一起決定分頻系數。 Bit0:串行時鐘位0,和第7位、第一位一起決定分頻系數。 Core I2C時鐘頻率的定義如表 2所示。 ● 狀態寄存器——I2C_STA 狀態寄存器取出所有內部狀態位并將它們壓縮成一個5位的代碼,該代碼與每個I2C總線狀態位一一對應,5位代碼可用于產生向量地址,以便快速處理不同的服務程序,每個服務程序處理一個特定的總線狀態。如果I2C模塊的所有模式都被使用,則有26種可能的總線狀態。 ● 數據寄存器——I2C_DAT 數據寄存器包含要發送或剛接收的數據,當它沒有處理字節的移位時,APB控制器可以對其進行讀寫。 ● 地址寄存器——I2C_ADDR Bit7~Bit1:自身從機地址。 Bit0:通用調用位,該位設置為1,通用調用地址有效,否則無效。 (4)Core I2C的基本操作 Core I2C可以配置成主機或從機,總線時鐘速率可調整,最高可支持400kb/s的總線傳輸速率。使用I2C總線時,在總線上要連接兩個上拉電阻,阻值為1~10k歐姆。 ● 主機發送模式 主機發送模式的數據發送格式如圖 3所示。先發送起始條件,然后發送從機地址和寫方向位,這時從機會產生一個應答,主機在接收到應答位后,依次發送n個數據,每個數據發送后,從機都會產生一個應答位,發送完n個數據后,主機發送停止位。 ● 主機接收模式 主機接收模式的數據接收格式如圖4所示。主機先發送起始條件,然后發送從機地址和讀方向位,這時從機會產生一個應答,主機在接收到應答位后,依次讀出n個數據,主機在接收到每個數據后,都會產生一個應答位,接收完數據后,主機發送停止位。 (5)應用場合 I2C協議主要應用于對串行設備的控制,如各種串行的存儲器等。圖5所示為使用I2C接口控制EEPROM。 2.小結 本文主要介紹了Actel FPGA的Core I2C IP核,除了Core I2C,Actel公司還提供了UART、SPI、PWM、Timer等IP核,請關注周立功公司的網站獲得更多的信息。我們有著一個接近30人的FPGA團隊提供強有力的售后服務,解決用戶在產品使用和研發過程中遇到的困難。若有更多的需求可以與我們聯系,我們將會竭誠為您服務,并能關注下期的FPGA專題技術講座。 |