1.FX3
FX3是cypress公司(已被英飞凌收购)的一款USB产品,用于其他类型数据转到USB的桥接,数据接口类型可以通过配置进行修改
2.CX3
CX3是FX3的一个特例,专用于mipi CSI-2转USB,成本比FX3低
3.关于CX3的应用介绍,可以看它的AN,里面介绍了包括CX3的内部模块,工作机制,UVC协议,CX3的固件详解,如何搭硬件,太多了,因为我着急调试,也没看完,打算边调试边回头看,待整理~。另外还要参考CX3的规格书、技术参考手册(TRM)
4.想绕开文档直接上手在开发板上面跑代码,那么必须看这两个文档:
1)官方的文档:e-con_CX3RDK_Firmware_Build_Manual.pdf
2)SDK目录下的文档:GettingStartedWithFX3SDK.pdf (要先安装SDK才有)
5.使用CX3是需要安装FX3驱动的,两个文档里面都说电脑会弹出来让装驱动,那实际上我这边是没有弹出来,所以按传统方法自己去设备管理器里面找到未知设备进行添加
这里硬件上连接CX3要注意三点,
1).一个是CX3有3个不同的启动模式,如果按照USB启动模式(烧录专用,因此会进入bootloader打转),无法有camera设备出现(说明这个camera需要咱们固件里面的UVC协议支持才能识别),这里想要识别UVC设备,就必须按已经写好固件的启动模式去启动,我们写好的固件是放在SPI flash里面,也即要用如下第四种boot模式进行启动,其中字母F代表浮空(float)
2).另一个是有两个地方都会增加设备,一个是camera,一个是USB,USB那里我们不需要去给它安装驱动,在camera这里安装驱动即可(我这里已经安装好了所以显示CX3):
这里我为啥确定那个第三个USB复合设备是新增的呢,看VID和文档GettingStartedWithFX3SDK.pdf中的一样所以可以确定:
3)用HUB连的话把HUB的5V供电供上,毕竟CX3有USB3.0的能力,功率不够的话只能用出来2.0
6.CX3的boot模式
1)boot模式是通过pmode引脚来选定的:
2)pmode是一组引脚,和CX3的power mode不是一个概念,power mode如下:
7.固件开发工具为eclipse,位于SDK目录下:
8.如何烧录:
1)将pmode引脚连接设定为BOOT USB启动模式
2)编译好固件后,从下面两个地方任意一个处,打开USB control center:
3)在USB control center里,在如下地方进行烧录,烧RAM可以在线调试,这里我们是烧到SPI Flash里:
4)要烧录编译好的固件为img文件,位置的话看你把工程放在哪里:
9.camera sensor相关的 setting参数初始化、功能设定,以.a文件的形式封装好了,在开发板的例程中,是这个文件:cy_ov5640.a(例程工程属性里面有对库的引用,位置在SDK安装目录里面),然后再以 cyu3imagesensor.h文件对我们用户开放使用,那我自己sensor工程,这一部分就需要我自己去填充
10.GPIF II 和 Processor Interface Block (PIB) 的区别,图来自CX3的应用文档AN(application note)
以下图中显示,GPIF II 主要是做状态机功能,PIB包含GPIF II和后面的sockets(给DMA用),sensor图像数据传过来时以串行mipi形式传输,然后CX3的MIPI CSI-2 Controller将其转换成并行数据传输给GPIF II
上面这个图非常重要,我们在配置UI里面 Image sensor configuration 所配置的input video format和frame configuration就是MIPI CSI-2 Controller的输入,也即图像数据输入参数,而在配置UI里面的output video format,则是配置MIPI CSI-2 Controller的输出,也即GPIF II收到的格式
参考:
基于CX3的UVC摄像头应用学习笔记-二(建立工程模板) - Infineon Developer Community
再结合下图理解,是上面图的左右镜像(深入研究对于CX3应用来说不重要,可能后续想仔细研究代码需要看它):
最后结合CX3的数据传输架构图加强一下理解:
11.MIPI CSI-2 interface clocks
这个因为代码里面需要设定所以我顺着AN研究了一下,具体细节这里是我阅读EZ USB Suite看到的,它这个MIPI CSI-2接口时钟是指block里面用的,不是接收数据用的那个RX时钟,见图:
具体解释见图:
其实判定它不是接收数据用的时钟,还有一个理由是,代码里面对它进行了设定,而接收数据用的时钟是TX发出的,RX这边只是被动接收,是自适应的,不能也不需要进行设定:
12.配置应用参考:
1)经典案例:
Streaming RAW10 Format Input Data to 16/24-bit Out... - Infineon Developer Community
2)应用学习笔记:
基于CX3的UVC摄像头应用学习笔记-二(建立工程模板) - Infineon Developer Community
基于CX3的UVC摄像头应用学习笔记-三(固件调试-1) - Infineon Developer Community
基于CX3的UVC摄像头应用学习笔记-四(固件调试-2) - Infineon Developer Community
13.注意:样品的mipi tx默认clock输出模式是continuous模式,即mipi clock常开,CX3不接受这种模式,实测过,因此需要配置为gate模式,在样品的mipi tx配置结构体里面有这项配置。
14.注意:上电后一秒后CX3进入suspend模式,不会采集传输数据,此时是量不到PCLK、Vsync和Hsync 信号的,只有在host端(我们用PC)对CX3进行枚举和发送UVC请求后(可采用windows自带相机),才会唤醒CX3并执行工作,此时若MIPI CSI-2 Controller成功转换了数据,则可以量测到PCLK、Vsync和Hsync 信号,证明这一部分配置成功(UI上面的配置)。另外一部分的配置则是USB描述符,亲测probe描述符可以不进行配置CX3也可以正常工作。
15.我会在公众号上面总结一个CX3精简版配置方法,把菲哥的和我这里的糅合一下,并在文中增加必要的解释