Cypress开发环境(二)

1.简介应用场景

cypress 行如何跑 cypress开发_usb


如图所示,这是一种典型的应用,这个系列的作品也围绕着这个典型应用展开的。将设备工作产生的数据经控制器处理之后,通过GPIF II可编程接口与FX3芯片相连,数据由此经过USB3.0总线传输到主机端。在典型应用中,设备端是图像传感器,控制器是FPGA,并辅之以必要的存储器。在一些特殊应用中,图像传感器可以通过DVP接口,与可编程接口GPIF II相连做UVC应用,主机端可以免驱读取视频流信息。Cypress还有一个CX3系列,将GPIF II接口换成了MIPI接口直接与图像传感器相连,做UVC应用。

上图所示的绿色部分是FPGA端,根据选取芯片的生产厂家的不同使用不同的开发环境,我这里使用的Xilinx vivado2019.1,关于这个开发环境后续在其他专栏中做介绍。蓝色部分是主机端应用,有多种方案可以选择,可以使用C#、Python,C++,不同语言的开发环境也不同,这里不做介绍,用到的是Qt5.15。关于蓝色部分,cypress提供了两个上位机应用,一个用于数据传输,一个用于速度测试,加上红色部分的GPIF II Designer,黄色部分用于开发固件的Eclipse,是本节介绍的主要内容。

顾名思义,速度测试软件StreamIN和StreamOUT是用来进行速度测试的;数据传输软件Control Center有下载固件,向EEPROM中烧写固件,查看描述符,数据下发和接收的功能。GPIF II Designer是用于对GPIF II接口编程的图形操作界面,本质上是一组可配置的寄存器,提供了多种编程状态,关于他的原理后续会继续介绍,本文仅介绍开发环境。还有一个黄色部分是关于Eclipse,如何生成固件,怎么规划工作空间都与这个环境密不可分。这几个开发环境在FX SDK。

2.Control Center

实际应用中,要先烧固件(.img)再烧写FPGA的bit文件,保证这样的启动顺序才不会出错。另外关于这个软件的使用请参考AN75705的8.1.2节。

① 双击打开USB Control Center,若如下图所示,说明正确。

cypress 行如何跑 cypress开发_驱动开发_02


② 点击Program,选择FX–>RAM。

cypress 行如何跑 cypress开发_cypress_03


③ 将准备的固件烧录,左下角显示Programming Succeeded代表成功烧录。

cypress 行如何跑 cypress开发_usb_04


④ 当烧写完固件之后,其左侧目录树结构应大致与下图一致。选择具体到端点后,右侧标签卡中选择Data Transfer,输入要传输的文本,字节数会自动出来,然后点击Transfer Out就可以完成一次传输。对于写操作依次点击选择到Bulk in endpoint(0x81),对于读操作点击选择到Bulk out endpoint(0x01)。(此处的0x81和0x01是固件中设置的,可以设置成其他的端点)

cypress 行如何跑 cypress开发_usb_05


⑤Transfer data,完成数据传输。

cypress 行如何跑 cypress开发_cypress 行如何跑_06


注意:此处的pktMode含义是Xferdata函数重载形式的一个参数,是一个bool型变量,当不勾选时,这个参数的值为false,此时若传输的字节数不是MaxPcktSize的整数倍时,将会导致传输错误,产生997的error。当勾选时,这个参数的值为true,此时若传输的字节数不是MaxPcktSize的整数倍时,将不会导致传输错误,将会提取所请求数量的最大的1024的整数倍。

最大数据包长度maxPktSize如何计算?请注意,以下讨论只适用与USB3.0版本。低版本的计算方式与此不同。

对于块端点:maxPktSize=wMaxPacketSize*(1+bMaxBurst)。其中,wMaxPacketSize是端点描述符中的字段,与端点属性(固件代码中的结构体)中的epcfg.pcktsize含义一致,即本端点接收或发送的最大信息包大小,对于bulk端点,此值为1024;bMaxBurst是超高速端点伙伴描述符中的字段,其设置值应为端点属性的epcfg.burstLen-1,含义是端点在一次突发中可以发送或接收的数据包的最大数量。有效值为0到15。值为0表示端点每次突发只能1个包,而15表示端点每次突发最多可以16个包。

那么设置此值对于块端点有啥意义呢?每个非控制端点都有一个传输数据量大小值为MaxPacketSize的倍数,这个传输数据量大小可以编程调整。传输量大小(即maxPktSize)决定了USB驱动栈为实现数据传输所使用的内部缓冲区大小。设置越大的值,传输过程中所需的操作越少,然而,大缓冲区也占用更多的可用内存。SetXferSize( )设置了端点当前传输量大小。它自动设置了传输量大小为大于等于xfer大小的MaxPktSize属性的倍数。但最新的版本中,这个函数不在受支持,而是对于不同类型的传输给定了缓冲区的值,如下:

cypress 行如何跑 cypress开发_cypress_07


对于同步端点:maxPktSize=wMaxPacketSize*(1+bMaxBurst)(1+bmAttributes)其中,与上述相同字段含义一致,bmAttributes字段是确定同步端点服务间隔中的最大数据包数(最大为2)(这个字段在后续同步传输原理中有详细阐述)。对于同步端点,此值可以为0~1024,计算该值的意义在于,对于同步端点,缓冲区的长度以及端点传输长度(二者指同一个意思)应该是8maxPktSize!

3.Streamer

如下图所示,C++ Streamer软件是用于速度测试,当设备已连接的时候,“connected Devices”将显示可选的设备名称和PID、VID;EndPoint显示可用于速度测试的端点;Packets per Xfer(每传输操作的数据包数量):一个传输操作指的是一组数据的数据包集合。每个传输的数据包越多,则开销越少,取得的数据速率也会越高。Xfers to Queue(队列的传输操作):该设置有助于启动多个传输,并把它们添加到任务队列中。该项减小了主机应用方上连续传输间的延迟。因此,队列的传输次数越多,数据速率也越高。分别设置“每次传输包的个数”和“队列的传输次数”、“超时时间”之后单击start将会实时的显示传输的速度,并会实时的统计传输成功包个数和传输失败包个数。

cypress 行如何跑 cypress开发_驱动开发_08

3.GPIF II Designer

请参照GPIFII_Designer_User_Guide、AN65974第9节、AN87216学习关于GPIF II Designer的使用。下面简单介绍开发环境的使用,关于GPIF II接口原理后续专门一节介绍。

①第一个table,打开GPIF II Designer软件,官方提供了几个基本配置文件,如下图所示。

cypress 行如何跑 cypress开发_驱动开发_09


点击这些基本例程,要是需要修改,先要点击file->Save Project As Editable才能进行编辑。也可以不基于这些例程进行自定义的项目设计。

cypress 行如何跑 cypress开发_usb_10


②依照顺序,进入第二个table,进行关于引脚映射、时钟源、接口类型、总线位宽、标志等内容的设置。

cypress 行如何跑 cypress开发_驱动开发_11


③进入第三个table,设计状态机,矩形框代表不同的状态,框内的文字具有特定的含义代表该状态下要做的动作,连线上代表状态跳转的外部或内部条件。开发环境允许更改所有关于状态机的设置,界面友好,操作简易。

cypress 行如何跑 cypress开发_cypress_12


④第四个界面时序仿真界面,通过设置几个参数值创建应用场景,然后运行得到波形,设置值有时序情景,缓冲区大小,水印值的设置等,菜单栏中timing scenarios也是关于这个的使用。

cypress 行如何跑 cypress开发_usb_13


⑤菜单栏

cypress 行如何跑 cypress开发_嵌入式硬件_14


常见的文件操作和编辑操作都大同小异,视图界面有output、error、action list三个窗口,State machine是用于放大缩小界面,build用来生成状态机的.h文件,help中有关于该环境的使用说明。

4.eclipse IDE

①选择工作空间,打开eclipse IDE首先要选择工作空间,这里的工作空间是项目实际组织架构。这个工作空间应该是自己新创建的文件夹(项目专属文件夹)

cypress 行如何跑 cypress开发_嵌入式硬件_15


②项目导入,选定工作空间,进行项目导入,这个导入的项目应该是想要在此项目基础上进行更改的项目。步骤如下:

A.选择file->Import。

cypress 行如何跑 cypress开发_cypress_16


B.选择General->Existing Projects into Workspace->Next

cypress 行如何跑 cypress开发_cypress 行如何跑_17


C.选择项目工程所在路径,然后勾选上复制到工作空间选项->Finish。浏览 SDK 安装包里的固件目录。点击 Browse…按钮,然后导航到 Cypress SDK firmware 文件夹。对于典型的 Windows 安装,该文件夹位于 C:\Program Files (Program Files (x86 on 64-bitmachines)\Cypress\EZ-USB FX3 SDK\firmware 路径下。

cypress 行如何跑 cypress开发_cypress_18


③Rebuild,在刚导入工作空间的例程报许多关于标识的错误,这可能是因为原例程的本地配置文件与当前的本地环境发生了变化导致的。点击rebuild 解决这个问题。具体操作如下:project->C/C++ Index->Rebuild。

cypress 行如何跑 cypress开发_cypress 行如何跑_19


④Save,如图片源自于赛普拉斯官方文档,必须要保存修改,才能编译,否则编译不生效。

cypress 行如何跑 cypress开发_cypress 行如何跑_20


⑤镜像文件,需要根据文件生成时间,来判断是否是新编译生成的。Img文件即为要烧写的镜像文件。

cypress 行如何跑 cypress开发_cypress_21


注意:

创建工作空间,以切换工作空间的方式切换项目组织结构。

具体的操作参见cypress 官方文档AN75705。

改文件名字的时候,注意相关头文件的相互引用,要及时对应修改。

更改.h文件后,先点击保存,否则.c文件中不能引用,会报错。