国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

主從可配置I2C總線接口IP及其應(yīng)用*

2010-09-26 04:24:36龔向東黃虹賓2劉春平
電訊技術(shù) 2010年1期
關(guān)鍵詞:字節(jié)寄存器端口

龔向東,黃虹賓2,劉春平

(1.深圳大學(xué) 電子科學(xué)與技術(shù)學(xué)院,廣東 深圳 518060;2.深圳大學(xué) 機(jī)電與控制工程學(xué)院,廣東 深圳 518060)

1 引 言

I2C總線作為一種簡單、高效的二線制雙向串行傳輸總線,在電子器件及系統(tǒng)中應(yīng)用非常普遍[1],其嚴(yán)格的通信規(guī)范[2]保證了數(shù)據(jù)傳輸?shù)目煽啃?。在基于FPGA的可編程片上嵌入式系統(tǒng)的研究開發(fā)中,往往需要設(shè)計定制I2C總線控制器,并以IP核的形式集成到系統(tǒng)中。目前,文獻(xiàn)中介紹的關(guān)于I2C總線接口的設(shè)計或?qū)Φ谌絀2C總線接口IP核的應(yīng)用研究[3~5],功能上局限于作為I2C主設(shè)備端口使用,或僅能用作I2C從設(shè)備端口。本文介紹一種I2C總線控制器IP,可以編程配置為主設(shè)備端口或從設(shè)備端口,因此,提供了更廣泛的應(yīng)用選擇。這個IP核由美國SLS公司(System Level Solutions, Inc.)發(fā)布[6],具有完全兼容Philips I2C標(biāo)準(zhǔn)、支持多I2C主端口工作、寬輸入時鐘頻率范圍等特點。

本文首先簡要介紹該主從可配置I2C總線控制器IP的硬件結(jié)構(gòu),然后著重論述在Altera 的Nios II可編程片上嵌入式系統(tǒng)中該IP核的系統(tǒng)集成和應(yīng)用編程技術(shù),最后給出了實際應(yīng)用例子。

2 IP核的硬件結(jié)構(gòu)

SLS的I2C總線控制器IP的內(nèi)部硬件結(jié)構(gòu)如圖1所示,主要由波特率時鐘發(fā)生器、寄存器模塊、并行I/O編程接口、I2C編程接口以及I2C接口內(nèi)核5個模塊組成,其它模塊用于連接Nios II系統(tǒng)的Avalon總線或用于臨時數(shù)據(jù)存儲。

圖1 I2C IP核的硬件結(jié)構(gòu)Fig.1 Hardware architecture of the I2C IP core

在5個主要模塊中,波特率時鐘發(fā)生器模塊向I2C接口內(nèi)核提供可編程設(shè)置的時鐘信號,以便后者產(chǎn)生合適的I2C移位時鐘SCL;寄存器模塊包括數(shù)據(jù)移位寄存器、本地地址寄存器、控制寄存器、狀態(tài)寄存器和時鐘寄存器以及這些寄存器的控制電路;并行I/O編程接口模塊用于訪問寄存器時的接口命令處理;I2C編程接口模塊則為上述寄存器以及波特率時鐘寄存器建立相應(yīng)的訪問地址;而最核心的I2C接口內(nèi)核模塊實現(xiàn)符合I2C串行協(xié)議的數(shù)據(jù)傳輸。

除了產(chǎn)生SCL時鐘信號外,為了確保數(shù)據(jù)傳輸符合嚴(yán)格的I2C規(guī)范,I2C接口內(nèi)核模塊具有處理5種級別I2C總線活動的功能:

(1)握手命令處理,檢測來自并行接口的I2C傳輸開始命令和結(jié)束命令;

(2)工作模式處理,確定工作模式(包括從端口接收、從端口發(fā)送、主端口接收、主端口發(fā)送)和相應(yīng)的傳輸方向;

(3)宏幀處理,檢測幀類型(地址幀或數(shù)據(jù)幀)以及幀內(nèi)的不同階段;

(4)微幀處理,幀的移位過程處理;

(5)信號處理,確定I2C總線SDA上的start、stop信號以及SCL時鐘的躍遷變化條件。

3 IP核的系統(tǒng)集成

目前,在采用32位軟核處理器的可編程片上嵌入式系統(tǒng)中,Nios II[7]系統(tǒng)的應(yīng)用最為廣泛。Nios II片上嵌入式系統(tǒng)通過Altera設(shè)計軟件Quartus II中的SOPC Builder工具構(gòu)建,并在其FPGA器件上實現(xiàn)。Nios II 處理器、各種系統(tǒng)組件或外設(shè)接口IP通過系統(tǒng)內(nèi)部Avalon總線互連,本I2C總線控制器IP核在系統(tǒng)中的應(yīng)用結(jié)構(gòu)如圖2(a)所示。用戶應(yīng)用程序通過硬件抽象層(HAL)系統(tǒng)訪問硬件,作為軟件運行環(huán)境的HAL系統(tǒng)將C標(biāo)準(zhǔn)庫、應(yīng)用程序接口(API)和設(shè)備驅(qū)動程序集成在一起,其關(guān)系如圖2(b)所示。

圖2 I2C IP核應(yīng)用的硬件/軟件結(jié)構(gòu)

Fig.2 Hardware/software schemes of the I2C IP core application

為了將I2C IP核封裝到系統(tǒng)中,需要的文件包括:

(1)硬件文件:IP核的HDL語言硬件設(shè)計文件;

(2)軟件文件:定義IP核內(nèi)部寄存器映像的C語言頭文件以及設(shè)備驅(qū)動程序文件;

(3)組件描述文件:用SOPC Builder的組件編輯器編輯IP核組件時自動生成的文件,這個文件提供了將IP核集成到系統(tǒng)的信息。

當(dāng)采用SOPC Builder創(chuàng)建了Nios II應(yīng)用硬件系統(tǒng)后,就可以在Altera的Nios II集成開發(fā)環(huán)境(IDE)中創(chuàng)建相應(yīng)的HAL系統(tǒng)庫,并進(jìn)行IP核的應(yīng)用編程。

4 IP核的應(yīng)用編程

該I2C總線控制器的使用涉及到以下5個HAL API函數(shù)。

4.1 int open(const char* pathname,int flags)

該函數(shù)以指定的讀寫方式(O_RDONLY、O_WRONLY或O_RDWR)打開設(shè)備文件,并返回該設(shè)備文件號,如:

int fd;

fd=open(I2C_MASTER_0_NAME,O_RDWR);

即以可讀可寫方式打開設(shè)備宏名為I2C_MASTER_0_NAME的I2C總線控制器IP核,設(shè)備宏名已在構(gòu)建Nios II應(yīng)用系統(tǒng)時生成的系統(tǒng)描述文件(system.h)中定義。

4.2 ioctl(int fd,int req,void*arg)

該函數(shù)用于對fd指定的已打開設(shè)備進(jìn)行I/O操作管理,其中參數(shù)req給出操作請求、參數(shù)arg給出與req請求相應(yīng)的信息。本I2C總線控制器定義了以下操作請求:

(1)INITBUS:用于設(shè)置I2C主/從工作方式和SCL時鐘頻率的操作請求,相應(yīng)的arg是類型為InitData的一個結(jié)構(gòu)變量指針。該InitData結(jié)構(gòu)在I2C IP核的設(shè)備驅(qū)動程序頭文件中定義為:

struct InitData{

unsigned volatile char address;

unsigned volatile char clk;

unsigned volatile char Speed;

unsigned volatile char master_slave;

};

其中,address為此IP核的I2C設(shè)備地址,該地址以左移1位的形式寫入IP核的本地地址寄存器中,clk為波特率時鐘寄存器設(shè)置值,Speed為時鐘寄存器設(shè)置值,master_slave為主/從方式選擇:1選擇此IP核為主端口方式,0選擇為從端口方式。由clk和Speed確定的SCL頻率按下式計算:

例如,給出如下設(shè)置,這個I2C IP核將工作于主端口方式,當(dāng)Nios II系統(tǒng)頻率為50 MHz時,其傳輸速率為100 kHz。

struct InitData InitI2C;

InitI2C.address=0x55;

InitI2C.clk=0x01;

InitI2C.master_slave=1;

InitI2C.Speed=0x7D;

ioctl(fd,INITBUS,&InitI2C);

(2)SETSLAVEADDR:I2C主端口采用該操作發(fā)送I2C從端口(或從設(shè)備)地址,此時的arg將以左移1位的形式寫入從端口的數(shù)據(jù)寄存器,并將與從端口的本地地址寄存器內(nèi)容比較。例如,當(dāng)從端口實際I2C設(shè)備地址為0xD0時,應(yīng)給出如下編程命令:

ioctl(fd,SETSLAVEADDR,0x68);

(3)CHECKASS:從端口采用該操作請求檢查其狀態(tài)寄存器中的地址匹配位,當(dāng)主端口發(fā)送的從端口地址與從端口的本地地址一致時,該位有效并允許從端口進(jìn)行后續(xù)的數(shù)據(jù)收發(fā)工作,相應(yīng)CHECKASS請求的arg缺省為0;

(4)CHECKDONEFLAG:主、從端口都可以使用這個操作請求檢查自己的數(shù)據(jù)讀寫操作是否完成,當(dāng)數(shù)據(jù)傳送完成時,該ioctl()函數(shù)調(diào)用返回1,相應(yīng)CHECKDONEFLAG請求的arg缺省為0;

(5)DATARD:采用該請求的ioctl()函數(shù)調(diào)用返回I2C IP核的數(shù)據(jù)寄存器內(nèi)容,相應(yīng)DATARD請求的arg缺省為0;

(6)STOPTYPE:該請求用于I2C主端口選擇產(chǎn)生停止條件或重復(fù)起始條件,前者相應(yīng)的arg參數(shù)為0,后者相應(yīng)的arg參數(shù)為1。

4.3 int read(int fd,void *ptr,int len)

該函數(shù)實現(xiàn)I2C IP核的數(shù)據(jù)接受操作,所讀入的len個字節(jié)數(shù)據(jù)存于ptr指針指向的數(shù)據(jù)緩沖區(qū)中。

4.4 int write(int fd,void *ptr,int len)

該函數(shù)實現(xiàn)I2C IP核的數(shù)據(jù)發(fā)送操作,ptr為發(fā)送數(shù)據(jù)緩沖區(qū)指針,len為待發(fā)送數(shù)據(jù)字節(jié)數(shù)。

4.5 int close(int fd)

該函數(shù)關(guān)閉fd指定的I2C IP核。

5 應(yīng)用實例

眾多的電子器件及系統(tǒng)采用了I2C總線傳輸,如多種實時時鐘/日歷(RTC)芯片、音/視頻編解碼器件(CODEC)、LED/LCD驅(qū)動芯片以及MCU器件等。在EEPROM存儲器、CMOS圖像傳感器等器件中,I2C的應(yīng)用更為普遍。我們采用本文所述的I2C控制器IP核對RTC器件M41T00、音頻CODEC器件WM8731、CMOS圖像傳感器MT9M011以及EEPROM器件24LC64分別進(jìn)行了I2C傳輸測試,同時也對Nios II應(yīng)用系統(tǒng)中集成多個I2C控制器IP核的情況進(jìn)行了實驗驗證。為此構(gòu)建的Nios II應(yīng)用系統(tǒng)的Quartus II工程頂層模塊如圖3所示,其中包括一個I2C主端口(i2c_master_0)和一個I2C從端口(i2c_slave_0),硬件上只需將主端口的m_scl和m_sda線通過外部上拉電阻與I2C從設(shè)備(或從端口)的相應(yīng)信號線相連,應(yīng)用程序在外部SDRAM中運行。該Nios II系統(tǒng)中添加了一個1 MHz的信號源(tout),用作內(nèi)嵌SignalTap II邏輯分析儀的采樣時鐘。

圖3 驗證I2C IP核的Quartus II工程頂層模塊Fig.3 Top block of Quartus II project for verifying the I2C IP core

限于篇幅,在此僅給出對24LC64的測試結(jié)果。24LC64是Microchip公司的一款64K位I2C串行EEPROM器件[8],當(dāng)該器件內(nèi)部控制寄存器的3位芯片選擇位(A2A1A0)置0時,該器件的I2C設(shè)備寫地址為0xA0,其I2C設(shè)備讀地址為0xA1。24LC64共有8K字節(jié)存儲單元,故存儲單元需要通過2個地址字節(jié)尋址。24LC64的寫方式包括字節(jié)寫和頁寫(連續(xù)32個存儲字節(jié)為1頁),其讀取方式包括當(dāng)前位置讀、隨機(jī)讀和順序讀,圖4給出了隨機(jī)寫/讀一個數(shù)據(jù)字節(jié)的I2C總線時序要求。隨機(jī)寫過程如圖4(a)所示,I2C主端口首先發(fā)出低電平start位,然后發(fā)出寫控制字節(jié)(I2C從設(shè)備寫地址),在收到從設(shè)備的應(yīng)答信號(ACK)后,發(fā)送待寫入單元的2個地址字節(jié)和待寫入數(shù)據(jù)字節(jié),從設(shè)備每接收到一個字節(jié)都需返回一個ACK位到主端口,最后主端口發(fā)出高電平stop信號結(jié)束寫過程。在圖4(b)所示的隨機(jī)讀過程中,至地址字節(jié)的寫入部分與圖4(a)類似。此后,主端口在重復(fù)起始條件下發(fā)出一個讀控制字節(jié)(I2C從設(shè)備讀地址),在從設(shè)備的ACK認(rèn)可后,從設(shè)備將所尋址地址單元里的數(shù)據(jù)發(fā)送到SDA線上,主端口接收該數(shù)據(jù)字節(jié)后返回非應(yīng)答信號(NO ACK)并以stop信號結(jié)束讀過程。

圖4 24LC64的隨機(jī)寫/讀時序

Fig.4 Timing diagrams for random write/read of 24LC64

作為一個驗證例子,將I2C時鐘SCL速率設(shè)置為100 kHz,并以隨機(jī)寫/讀方式向24LC64的第2 500(即0x09c4)個存儲單元寫入數(shù)據(jù)0x56后再從中讀出,并通過Quartus II內(nèi)嵌的SignalTap II邏輯分析工具捕獲I2C時鐘線m_scl和I2C數(shù)據(jù)線m_sda信號,所得到的這一寫入、讀出過程時序分別如圖5所示,可見與圖4要求的I2C總線時序一致。

圖5 24LC64的0x09c4單元寫入/讀出數(shù)據(jù)0x56Fig.5 Timing diagrams showing write/read data 0x56 to/from Cell0x09c4 of 24LC64

6 結(jié)束語

本文介紹了一種新的I2C總線控制器IP核,該IP核既可以I2C主端口形式也可以I2C從端口形式集成到基于FPGA的可編程片上嵌入式系統(tǒng)中,且在一個系統(tǒng)中可以定制封裝多個這樣的IP,因此為各種I2C總線傳輸?shù)膽?yīng)用提供了靈活性。采用這個IP核,通過本文設(shè)計Nios II應(yīng)用系統(tǒng),對多種電子器件的I2C總線傳輸進(jìn)行了測試。實驗結(jié)果表明,與其它I2C總線接口IP相比,該I2C總線控制器IP核在應(yīng)用上更具有先進(jìn)性。

參考文獻(xiàn):

[1] 何立民.I2C總線應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1995.

HE Li-min.Design of I2C bus application systems[M].Beijing:Beijing University of Aeronautics & Astronautics Press,1995.(in Chinese)

[2] Philips Semiconductors.The I2C-bus Specification,Version 2.1[EB/OL].2000.http://www.nxp.com/acrobat_download/literature/9398/39340011.pdf.

[3] 錢敏,黃秋萍,李富華,等.基于VHDL/ CPLD的I2C串行總線控制器設(shè)計及實現(xiàn)[J].電子技術(shù)應(yīng)用,2006,32(8):109-112.

QIAN Min,HUANG Qiu-ping,LI Fu-hua,et al.Design and implementation of I2C serial bus controller based on VHDL/CPLD [J]. Application of Electronic Technique,2006,32(8):109-112.(in Chinese)

[4] 段沛沛,鄧曄.基于VHDL的I2C總線從模式控制核設(shè)計[J].火控雷達(dá)技術(shù),2008,37(4):86-89.

DUAN Pei-pei,DENG Ye.Design of I2C bus slave mode control core based on VHDL[J].Fire Control Radar Technology,2008,37(4):86-89.(in Chinese)

[5] 康文崢.基于NiosⅡ的I2C主設(shè)備接口的設(shè)計[J].艦船電子工程,2009,29(3):118-120.

KANG Wen-zheng.Design of I2C master device interface based on Nios II[J].Ship Electronic Engineering,2009,29(3):118-120.(in Chinese)

[6] System Level Solutions,Inc..IP Core I2C Controller [EB/OL].2009.http://www.slscorp.com/pages/ipi2ccontrollersls.php.

[7] Altera Corporation. Nios II Processor Reference Handbook[EB/OL].[2009]http://www.altera.com/literature/hb/nios2/n2cpu_nii5v1.pdf.

[8] Microchip Technology,Inc..24AA64/24LC64 64K I2C Serial EEPROM[EB/OL].[2002]http://ww1.microchip.com/downloads/en/devicedoc/21189f.pdf.

猜你喜歡
字節(jié)寄存器端口
No.8 字節(jié)跳動將推出獨立出口電商APP
一種端口故障的解決方案
Lite寄存器模型的設(shè)計與實現(xiàn)
No.10 “字節(jié)跳動手機(jī)”要來了?
端口阻塞與優(yōu)先級
簡談MC7字節(jié)碼
分簇結(jié)構(gòu)向量寄存器分配策略研究*
初識電腦端口
電腦迷(2015年6期)2015-05-30 08:52:42
生成樹協(xié)議實例探討
高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
虞城县| 稻城县| 台中市| 合肥市| 蓝山县| 迁安市| 尼木县| 依兰县| 紫金县| 商都县| 醴陵市| 易门县| 望奎县| 犍为县| 大方县| 积石山| 台湾省| 日喀则市| 长治县| 兴化市| 瓦房店市| 仙居县| 平潭县| 栾城县| 华宁县| 汤阴县| 曲阳县| 惠来县| 宜城市| 肃北| 永修县| 班戈县| 漳浦县| 昌宁县| 榆社县| 武隆县| 达拉特旗| 祁门县| 福鼎市| 侯马市| 周至县|