用CYUSB3014去控制并口摄像头再合适不过,如果是MIPI接口可以换成CYUSB3065芯片,不过I2C接口还是通用的,因为两种芯片的I2C控制器是完全相同的。
开发包提供了关于I2C通信的接口函数,其中比较基础的有两个,分别是单字节读写函数
CyU3PI2cReceiveBytes ()和CyU3PI2cTransmitBytes()。下面以单字节读函数为例,简单分析一下大致的用法。函数声明是:
extern CyU3PReturnStatus_t
第1个参数是I2C通信的一个数据结构,在读写必须设置好。
第2 个参数是读出的数据保存的位置。
第3 个参数是读出数据的数量。
第4个参数是如果I2C从器件如果不响应的话,控制器发出读请求的次数。
此函数的调用实例如:apiRetStatus = CyU3PI2cReceiveBytes(&preamble, buf, 2, 0);其中第一个参数是一个关于I2C的结构体,在调用函数CyU3PI2cReceiveBytes()前必需初始化,如下例:
preamble.buffer[0] = slaveAddr & I2C_SLAVEADDR_MASK; /* Mask out the transfer type bit. */
APTINA的SENSOR寄存器地址,一般是双字节的,因此需要对上面的基本读写函数进行进一步的封装,以适合双字节地址及数据的存储。
以下是对USB3.0开发板上的EEPROM进行读写的测试图,EEPROM型号是24LC256,是官方USB3.0开发板标配型号(实际上此款EEPROM容量太小,不太适用) 。 先测试向EEPROM中写入数据,如下图,
上图共标记为5部分,
1是24LC256的器件地址,由厂家决定,二进制是1010,16进制是A;
2是芯片引脚A2、A1、A0的电平,开发板上这三个引脚为下拉,所以均为0;
3是读写位,现为0,是向EEPROM中写入数据;
4是ACK位,低电平,有效,EEPROM已经接受了命令;
5是起始位。如果不考虑起始位及ACK位,上面的数据共计是8位,4位1010,3位000,1位0,合在一起就是二进制的1010 0000,16进制是A0,10进制是160。
对上图的2再做说明,如果上位机发的指令地址与A2、A1、A0的实际电平不同,EEPROM就不会对指令产生反应,结果就是ACK位不会为低。测试图如下:
上图发送的地址是7,不是0,测试图如下,
上图的6均为111,和发送的一致。7说明ACK位一直为高,EEPROM对这个地址没有反应。
第二是测试一下上位机发如下的寄存器地址,
上图说明要发送的寄存器地址为0x1234,测试波形如下,
16位寄存器地址为0x1234,上图显示先发送高字节12,再发送低字节34,后面紧跟着要发送的数据0xA5、0xA6。
(另公布一群号333917885,SPARTAN6开发专业讨论区。)
淘宝店铺:http://liangziusb.taobao.com
良子.2014年 承接USB开发工程 USB毕设指导
QQ:1345482533
文章评论(0条评论)
登录后参与讨论