原创 USB3.0芯片终于出来了(50)_摄像头I2C函数测试波形1

2014-6-6 10:31 4497 17 17 分类: MCU/ 嵌入式 文集: USB3.0芯片终于出来了

            用CYUSB3014去控制并口摄像头再合适不过,如果是MIPI接口可以换成CYUSB3065芯片,不过I2C接口还是通用的,因为两种芯片的I2C控制器是完全相同的。

开发包提供了关于I2C通信的接口函数,其中比较基础的有两个,分别是单字节读写函数

CyU3PI2cReceiveBytes ()和CyU3PI2cTransmitBytes()。下面以单字节读函数为例,简单分析一下大致的用法。函数声明是:

extern CyU3PReturnStatus_t

CyU3PI2cReceiveBytes (
        CyU3PI2cPreamble_t *preamble,   /**< Preamble information to be sent out before the data transfer. */
        uint8_t *data,                  /**< Pointer to buffer where the data is to be placed. */
        uint32_t byteCount,             /**< Size of the transfer in bytes. */
        uint32_t retryCount             /**< Number of times to retry request in case of a NAK response or error. */
        );

第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. */

preamble.buffer[1] = highAddr;
preamble.buffer[2] = lowAddr;
preamble.buffer[3] = slaveAddr;
preamble.length = 4;
preamble.ctrlMask = 0x0004; /*  Send start bit after third byte of preamble. */

           APTINA的SENSOR寄存器地址,一般是双字节的,因此需要对上面的基本读写函数进行进一步的封装,以适合双字节地址及数据的存储。

          以下是对USB3.0开发板上的EEPROM进行读写的测试图,EEPROM型号是24LC256,是官方USB3.0开发板标配型号(实际上此款EEPROM容量太小,不太适用) 。  先测试向EEPROM中写入数据,如下图,

 

liangziusb_eeprom_0.jpg

上图共标记为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位不会为低。测试图如下:

 

liangziusb_eeprom_1.jpg

       上图发送的地址是7,不是0,测试图如下,

 

liangziusb_eeprom_2.jpg

        上图的6均为111,和发送的一致。7说明ACK位一直为高,EEPROM对这个地址没有反应。

         第二是测试一下上位机发如下的寄存器地址,

 

liangziusb_eeprom_3.jpg

        上图说明要发送的寄存器地址为0x1234,测试波形如下,

 

liangziusb_eeprom_6.jpg

         16位寄存器地址为0x1234,上图显示先发送高字节12,再发送低字节34,后面紧跟着要发送的数据0xA5、0xA6。

 

(另公布一群号333917885,SPARTAN6开发专业讨论区。)

 

 

淘宝店铺:http://liangziusb.taobao.com

良子.2014年    承接USB开发工程  USB毕设指导

QQ:1345482533

PARTNER CONTENT

文章评论0条评论)

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