原创 良子USB2.0摄像头开发板11_测试USB芯片的控制传输功能

2015-3-4 21:17 2621 21 21 分类: MCU/ 嵌入式 文集: USB2.0摄像头开发板

       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文件前部增加两个控制传输指令的宏定义,如下:

#define I2C_READ       0xb0 //
#define I2C_WRITE      0xb1 //
在同一个文件的函数SetupCommand()中增加对这两个命令的具体执行部分,如下:
 case I2C_READ://Liangzi   0xb0
//I2CTL |= bm400KHZ;
EP0BUF[0] = 0x0F;
EP0BUF[1] = 0xF0;
EP0BCH = 0;
EP0BCL = 2;
EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
break;
 
 case I2C_WRITE://Liangzi   0xb1
i2c_str[0]=0x09;
i2c_str[1]=0x02;
i2c_str[2]=0x84;
EZUSB_WriteI2C(0xBA,3,i2c_str);
//EP0BCH = 0;
//EP0BCL = 0;
break;
      以上部分用控制台程序发送b0、b1这两个自定义命令。命令I2C_READ实现的是IN传输,向位机返回两个字节,如下,测试是成功的。(按照前一节介绍的下载固件程序到芯片内SRAM的方法下载固件)。
lingziusb_sensor_20150301_0.jpg

      上图中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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
21
关闭 站长推荐上一条 /3 下一条