亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,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è)計(jì)定制I2C總線控制器,并以IP核的形式集成到系統(tǒng)中。目前,文獻(xiàn)中介紹的關(guān)于I2C總線接口的設(shè)計(jì)或?qū)Φ谌絀2C總線接口IP核的應(yīng)用研究[3~5],功能上局限于作為I2C主設(shè)備端口使用,或僅能用作I2C從設(shè)備端口。本文介紹一種I2C總線控制器IP,可以編程配置為主設(shè)備端口或從設(shè)備端口,因此,提供了更廣泛的應(yīng)用選擇。這個(gè)IP核由美國SLS公司(System Level Solutions, Inc.)發(fā)布[6],具有完全兼容Philips I2C標(biāo)準(zhǔn)、支持多I2C主端口工作、寬輸入時(shí)鐘頻率范圍等特點(diǎn)。

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

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

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

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

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

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

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

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

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

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

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

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

        目前,在采用32位軟核處理器的可編程片上嵌入式系統(tǒng)中,Nios II[7]系統(tǒng)的應(yīng)用最為廣泛。Nios II片上嵌入式系統(tǒng)通過Altera設(shè)計(jì)軟件Quartus II中的SOPC Builder工具構(gòu)建,并在其FPGA器件上實(shí)現(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)訪問硬件,作為軟件運(yùn)行環(huán)境的HAL系統(tǒng)將C標(biāo)準(zhǔn)庫、應(yīng)用程序接口(API)和設(shè)備驅(qū)動(dòng)程序集成在一起,其關(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è)計(jì)文件;

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

        (3)組件描述文件:用SOPC Builder的組件編輯器編輯IP核組件時(shí)自動(dòng)生成的文件,這個(gè)文件提供了將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個(gè)HAL API函數(shù)。

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

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

        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)時(shí)生成的系統(tǒng)描述文件(system.h)中定義。

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

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

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

        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í)鐘寄存器設(shè)置值,Speed為時(shí)鐘寄存器設(shè)置值,master_slave為主/從方式選擇:1選擇此IP核為主端口方式,0選擇為從端口方式。由clk和Speed確定的SCL頻率按下式計(jì)算:

        例如,給出如下設(shè)置,這個(gè)I2C IP核將工作于主端口方式,當(dāng)Nios II系統(tǒng)頻率為50 MHz時(shí),其傳輸速率為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è)備)地址,此時(shí)的arg將以左移1位的形式寫入從端口的數(shù)據(jù)寄存器,并將與從端口的本地地址寄存器內(nèi)容比較。例如,當(dāng)從端口實(shí)際I2C設(shè)備地址為0xD0時(shí),應(yīng)給出如下編程命令:

        ioctl(fd,SETSLAVEADDR,0x68);

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

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

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

        (6)STOPTYPE:該請(qǐng)求用于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ù)實(shí)現(xiàn)I2C IP核的數(shù)據(jù)接受操作,所讀入的len個(gè)字節(jié)數(shù)據(jù)存于ptr指針指向的數(shù)據(jù)緩沖區(qū)中。

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

        該函數(shù)實(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)用實(shí)例

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

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

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

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

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

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

        圖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)中,且在一個(gè)系統(tǒng)中可以定制封裝多個(gè)這樣的IP,因此為各種I2C總線傳輸?shù)膽?yīng)用提供了靈活性。采用這個(gè)IP核,通過本文設(shè)計(jì)Nios II應(yīng)用系統(tǒng),對(duì)多種電子器件的I2C總線傳輸進(jìn)行了測試。實(shí)驗(yàn)結(jié)果表明,與其它I2C總線接口IP相比,該I2C總線控制器IP核在應(yīng)用上更具有先進(jìn)性。

        參考文獻(xiàn):

        [1] 何立民.I2C總線應(yīng)用系統(tǒng)設(shè)計(jì)[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è)計(jì)及實(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ì)[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ì)[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é)跳動(dòng)將推出獨(dú)立出口電商APP
        一種端口故障的解決方案
        Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
        No.10 “字節(jié)跳動(dòng)手機(jī)”要來了?
        端口阻塞與優(yōu)先級(jí)
        簡談MC7字節(jié)碼
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        初識(shí)電腦端口
        電腦迷(2015年6期)2015-05-30 08:52:42
        生成樹協(xié)議實(shí)例探討
        高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
        日本免费一区二区三区在线播放 | 岛国熟女精品一区二区三区| 中文字幕午夜精品久久久| 欧美疯狂性受xxxxx喷水| 精品久久香蕉国产线看观看亚洲| 日韩av高清无码| 成人日韩av不卡在线观看| 中国少妇和黑人做爰视频| 日本在线中文字幕一区二区| 日韩熟女精品一区二区三区视频| 麻豆国产精品久久天堂| 人妻少妇中文字幕在线观看| 人妻少妇被粗大爽.9797pw| 国产女厕偷窥系列在线视频| 日躁夜躁狠狠躁2001| 99国产精品丝袜久久久久| 日本一区二区三区看片| 国产午夜福利av在线麻豆| 校园春色日韩高清一区二区| 亚洲精品美女久久777777| 色www视频永久免费| 国产a三级久久精品| 国产亚洲精品自在久久77| 亚洲综合天堂一二三区| 一区二区激情偷拍老牛视频av| 午夜免费观看日韩一级视频| 成人综合网站| 国产成人精品免费久久久久| av资源在线播放网站| 日韩美女亚洲性一区二区| 中文无码人妻有码人妻中文字幕| 无码一区二区三区在线| 丰满少妇爆乳无码专区| 日本精品久久性大片日本| 日本免费视频一区二区三区| 天天躁夜夜躁av天天爽| 久久九九久精品国产| 一本一道波多野结衣av中文| 精品一区二区三区不老少妇| 亚洲中文av中文字幕艳妇| 日韩av无码中文字幕|