element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
FPGA
  • Technologies
  • More
FPGA
Forum NiosII的I2C控制IP及其在成像系统中的应用
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join FPGA to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • Replies 0 replies
  • Subscribers 532 subscribers
  • Views 487 views
  • Users 0 members are here
  • 图像传感
  • sopc
  • nios
Related

NiosII的I2C控制IP及其在成像系统中的应用

Flush
Flush over 14 years ago

1 IP的硬件结构及寄存器

 

1.1 IP硬件结构

 

IP内部结构如图1所示。主要由波特率时钟寄存器、寄存器组控制器、并行I/O接口、I2C可编程接口、I2C接口引擎5个模块组成。
image
波特率时钟产生器用来产生I2C IP工作的基本时钟频率;寄存器组控制器用来对寄存器进行设置,设置数据通过并行I/O接口传送到该模块中;并行I/O接口模块用来处理可编程接口模块传送过来的命令;I2C可编程接口模块用来设置IP各个寄存器的地址;I2C接口引擎模块执行I2C总线上数据的传输。

1.2 寄存器结构

 

I2C控制IP主要由6个寄存器构成,如表1所列。通过对寄存器的读写可以方便地控制I2C总线数据的传输,从而实现NiosII处理器与设备之间的通信。数据寄存器用来存放I2C总线上要传送的数据;波特率产生模块,波特率时钟寄存器和时钟寄存器共同决定I2C总线上SCL的频率。SCL的计算公式为其中System_clk是系统时钟;Value是时钟寄存器的值;divider是波特率时钟寄存器的值所对应的分频数(寄存器的值与分频数相差为1,如寄存器设置为0,则分频数为1;寄存器设置为1,则分频数值为2)。

 

本地地址寄存器、控制寄存器、状态寄存器的详细介绍略——编者注。

 

2 I2C控制lP在成像系统中的应用

 

在成像系统中,CMOS传感器应用非常普遍。这些传感器大多数都自带I2C串行通信接口,本文以MT9M011为例介绍I2C控制IP在成像系统中的应用。MT9M011传感器根据读写位数可分为两种方式:16位数据读写方式和8位数据读写方式。这里选用曝光寄存器,采用16位读写方式进行操作,时序如图2所示。
image

从设备地址(写模式)与从设备地址(读模式)高7位为从器件地址,第8位是读写控制位(R/W),它控制数据的传输方向。

 

向曝光寄存器0x09写入数据:主器件启动传输,然后发送它所要寻址的从设备地址(写模式)。MT9M011监视总线,当其地址与传送的从器件地址相符时,响应一位应答信号,接着主器件发送曝光寄存器地址,MT9M011再次应答,在向曝光寄存器中写入16位数据后主器件停止写数据。每传送8位数据,从器件MT9M011都会产生一位应答信号。
image

从曝光寄存器0x09读出数据:开始部分与写数据时序是相同的,当主器件发送完从设备地址(写模式)和寄存器地址后,需要重新启动,并发送从设备地址(读模式),然后才能从寄存器中读出数据。每读完1字节数据,主器件都会产生1位应答信号。当16位数据被读出后,主器件发送1位非应答信号,传输结束。
image

3 IP应用实例

 

3.1 硬件设计

 

本文使用I2C控制IP对图像传感器MT9M011寄存器进行并行配置。硬件设计基于SOPC技术,将系统组件库提供的32位Nios II软核处理器、SDRAM接口模块、TIMER定时器模块(提供SignaltapII中对信号进行采样的频率)、PIO模块以及I2C控制IP(配置为主设备)集成在一块FPGA内。QuartusII顶层原理略——编者注。

 

3.2 软件设计

 

软件的编写有两种方式:一种是对I2C控制IP应用程序编程接口(API)函数的操作;另一种是利用Altera提供的读写函数对寄存器进行操作。为了提高系统运行的速度,采用第二种方法。系统软件部分是在NiosII IDE中,通过编写C代码完成的。

 

对CMOS寄存器的并行配置程序主要包括以下两个部分:

 

①IP初始化设置:包括设置波特率、设置本地址寄存器、设置时钟寄存器值。
②选择CMOS1,对其寄存器进行读写;选择CMOS2,对其寄存器进行读写。寄存器选择曝光寄存器。
关键代码如下:
image
image
image

 


函数checkBus查询状态寄存器的丽来判断I2C总线忙/闲状态,checkProgres函数查询状态寄存器的PIN来判断总线数据是否传输完成。为了便于观察读出的数据和写入的数据是否一致,通常将程序包含在while语句中。

 

4 实验验证

 

将硬件系统生成的下载文件烧写到FPGA芯片上并运行C代码程序,用QuartusII自带的SignahapII逻辑分析仪对I2C总线上的数据进行观察。图3为所得到的波形,信号由上至下分别为CMOS2/CMOS1上的I2C总线信号m_sclk_2、m_sda_2、m_sclk_1、m_sda_1。前半部分给CMOS1写入0x06、0x07,然后读出;后半部分对CMOS2写入相同的数并读出。此波形满足MT9M011图像传感器时序读写要求。

 

5 系统扩展

 

在需要多路CMOS配置的应用中,使用该I2C控制IP可以很容易地实现多路并行CMOS寄存器配置。例如,8路并行CMOS配置系统:在电路板上焊接8片CMOS传感器芯片,通过对分配器3路信号的控制 将使能并行加载到8块CMOS芯片,3路控制信号和使能信号通过对SOPC系统的PIO接口模块的控制来实现,配置数据的传输则在I2C控制IP的控制下完成。电路板结构简单,系统容易实现。

 

结 语

 

本文所介绍的I2C IP可作为自定义组件加载到SOPC系统中,使系统的设计更为灵活,功能扩展上具有较大的潜力。在采用CMOS图像传感器的成像系统中,I2C接口应用普遍,本文通过给出该IP应用实例,说明了该IP的使用具有广阔的前景和较高的应用价值。

  • Sign in to reply
  • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube