CMOS摄像头芯片都有用于配置功能的I2C接口,现在通用的接法有两种,一种是用FPGA来驱动CMOS的I2C接口;另一种是用68013的I2C模块驱动CMOS的I2C接口。用FPGA驱动I2C接口,上位机需要将配置数据先发到68013芯片内,68013芯片再将配置数据发送给FPGA,FPGA再发给CMOS;用68013驱动I2C,则在信号流中省去了FPGA,比较方便,这也是现在比较通用的做法。
68016芯片提供了对I2C的支持,配套有相应的软件函数。在开发包的目录C:\Program Files\Cypress\CY3684-FX2LP DVK\Target\Lib\LP下,有文件i2c_rw.c,定义了I2C读写的两个函数EZUSB_ReadI2C( )和EZUSB_WriteI2C( )。在文件i2c.c里,定义了I2C的初始化函数EZUSB_InitI2C(void)。用户可以使用这些函数,不需要自己重新编写寄存器一级的I2C驱动函数。以下简单介绍了在固件程序中增加I2C功能的过程。
1、在函数TD_Init(void)中增加I2C的初始化函数。
EZUSB_InitI2C();// Initialize I2C Bus
2、两个库函数,一个为读,一个为写。对I2C进行写操作的函数为EZUSB_WriteI2C(BYTE addr,BYTE length,BYTE xdata*dat),其中addr用于指定I2C设备地址;length为传送数据长度;*dat为发送数据缓冲区的起始地址。
3、在FW.C文件前部增加两个控制传输指令的宏定义,如下:
上图中1是要选择控制端点;2是选择数据传输的方向为IN ;3是自定义命令;4是自定义命令为0xb0;5是单击”Transfer Data“命令按钮后采集到的数据是0x0F,0xF0,这和KEIL程序中的设定是完全一致的。
上面只测试了一个命令0xb0,程序中还有一个命令0xb1,是对EEPROM进行写操作的,具体的操作见下一篇文章。
(另公布一群号178338109,CYUSB3014开发专业讨论区)
淘宝店铺:http://liangziusb.taobao.com
良子.2015年 承接USB开发工程
QQ:2687652834
文章评论(0条评论)
登录后参与讨论