• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      主從可配置I2C總線接口IP及其應用*

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

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

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

      1 引 言

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

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

      2 IP核的硬件結構

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

      圖1 I2C IP核的硬件結構Fig.1 Hardware architecture of the I2C IP core

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

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

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

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

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

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

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

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

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

      圖2 I2C IP核應用的硬件/軟件結構

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

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

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

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

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

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

      4 IP核的應用編程

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

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

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

      int fd;

      fd=open(I2C_MASTER_0_NAME,O_RDWR);

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

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

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

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

      struct InitData{

      unsigned volatile char address;

      unsigned volatile char clk;

      unsigned volatile char Speed;

      unsigned volatile char master_slave;

      };

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

      例如,給出如下設置,這個I2C IP核將工作于主端口方式,當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從端口(或從設備)地址,此時的arg將以左移1位的形式寫入從端口的數(shù)據寄存器,并將與從端口的本地地址寄存器內容比較。例如,當從端口實際I2C設備地址為0xD0時,應給出如下編程命令:

      ioctl(fd,SETSLAVEADDR,0x68);

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

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

      (5)DATARD:采用該請求的ioctl()函數(shù)調用返回I2C IP核的數(shù)據寄存器內容,相應DATARD請求的arg缺省為0;

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

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

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

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

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

      4.5 int close(int fd)

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

      5 應用實例

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

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

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

      圖4 24LC64的隨機寫/讀時序

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

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

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

      6 結束語

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

      參考文獻:

      [1] 何立民.I2C總線應用系統(tǒng)設計[M].北京:北京航空航天大學出版社,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串行總線控制器設計及實現(xiàn)[J].電子技術應用,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總線從模式控制核設計[J].火控雷達技術,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主設備接口的設計[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
      一種端口故障的解決方案
      科學家(2021年24期)2021-04-25 13:25:34
      Lite寄存器模型的設計與實現(xiàn)
      計算機應用(2020年5期)2020-06-07 07:06:44
      No.10 “字節(jié)跳動手機”要來了?
      端口阻塞與優(yōu)先級
      簡談MC7字節(jié)碼
      分簇結構向量寄存器分配策略研究*
      初識電腦端口
      電腦迷(2015年6期)2015-05-30 08:52:42
      生成樹協(xié)議實例探討
      高速數(shù)模轉換器AD9779/AD9788的應用
      昌图县| 宁陕县| 通榆县| 阿拉善右旗| 炉霍县| 普兰店市| 浦东新区| 潮安县| 通辽市| 牙克石市| 曲阳县| 玉门市| 南川市| 杨浦区| 富锦市| 古交市| 丰原市| 温宿县| 安远县| 隆德县| 泸州市| 黔东| 齐齐哈尔市| 杭锦旗| 邻水| 武功县| 车险| 小金县| 江达县| 磐石市| 望都县| 永嘉县| 轮台县| 武功县| 黄平县| 靖安县| 台州市| 太原市| 调兵山市| 吴川市| 巴林右旗|