cypress68013USB固件例程及PCB板


i.             构建并运行第一个FX2LP项目

一、FX2LP DVK及Suite USB的安装

二、绑定cyusb.sys至已连接的FX2LPDVK

当FX2LP DVK第一次连接至PC时,须安装FX2LP DVK Windows驱动程序。其各个步骤如下:

1.      当使用某个USB 2.0线缆将FX2LP  DVK连接至PC时, 它将枚举供应商ID(VID) 0x04B4和产品ID(PID)0x8613 。打开DeviceManager(设备管理器),并寻找新的设备。如图1所示。

cypress68013USB固件例程及PCB板_第1张图片

图1  设备管理器

2.  如果首次连接FX2LPDVK,FX2LP设备将显示在Other Devices(其他设备)列表中。 

3.  右击FX2LP设备并选择UpdateDriver(更新驱动程序)。

4.  指示FX2LP DVK 安装文件夹附带的cyusb.inf文件的位置( 即C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK

\1.0\Drivers\cyusbfx1_fx2lp\wxp\x86)。下面各步骤介绍了如何绑定FX2LP设备的cyusb.sys驱动程序文件。

cypress68013USB固件例程及PCB板_第2张图片

图2  更新FX2LP的驱动程序

5.  选中No, notthis time并点击Next,如图2所示。

cypress68013USB固件例程及PCB板_第3张图片

图3  更新FX2LP的驱动程序

6.  选中Installfrom a list or specific location 并点击Next,如图3所示。

cypress68013USB固件例程及PCB板_第4张图片

图4 “cyusb.inf”文件的位置

7. 浏览“cyusb.inf”文件的位置(C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Drivers\cyusbfx1_fx2lp\wxp\x86)并点击Next,如图4所示。 

8. Windows识别了cyusb.inf 文件中的FX2LP设备后,则已连接的FX2LP器件被绑定到由赛普拉斯提供的USB驱动程序,并可在Device Manager找到它,如图5所示。

cypress68013USB固件例程及PCB板_第5张图片

图5  FX2LP 被绑定到CyUSB.sys后的器件管理程序

ii.             下载“.hex”文件到RAM内

一、使用Cypress Suite USBControlCenter下载

1.      点击StartAll ProgramsCypress Cypress Suite USBControl Center来打开“ControlCenter”(控制中心)。如果FX2LP DVK电路板被插上电脑,它会显示在控制中心的左侧面板。 

cypress68013USB固件例程及PCB板_第6张图片

图6 控制中心罗列了已连接的FX2LP器件

2.       使用ControlCenter窗口中的 Program 选项来下载“.hex”文件到FX2LP RAM内;请查看图7。

cypress68013USB固件例程及PCB板_第7张图片

图7  Control Center窗口中的Program选项

3.        选择Program FX RAM,在C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Firmware\Bulkloop 浏览“Bulkloop.hex”文件。 现在FX2LP重新枚举在Bulkloop示例项目中所提供的VID(0x4B4)和PID(0x1004)。Windows  Device Manager目前已经确定了“新”的USB器件(带有批量循环软件的FX2LP DVK电路板已安装好),如图8所示。

cypress68013USB固件例程及PCB板_第8张图片

图8  在cyusb.inf中带有已给名称的FX2LP器件

、使用CypressSuite USB  Console下载

在弹出的EZ-USB Interface窗口中点击download和lg EEPROM分别进行.hex和.iic固件下载。

iii.             向Cyusb.inf添加了自定义VID和PID

在Bulkloop示例使用的VID 0x4B和PID 0x1004已经添加到安装FX2LPDVK时出现的cyusb.inf文件中(C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Drivers\cyusbfx1_fx2lp\wxp\x86)。但是,如果修改了FX2LP固件项目中的VID和PID值,并且没有将这些值罗列在cyusb.inf文件中,则需要将这些值添加到cyusb.in文件中,这样赛普拉斯的开发工具(USB控制中心)才可识别所使用的设备。下面各步说明如何将自定义VID和PID值添加到cyusb.inf文件内。

1.  打开C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Drivers\cyusbfx1_fx2lp\wxp\x86路径下的cyusb.inf文件。

2.  添加您的自定义VID和PID,如图9和图10所示。假设自定义VID为0x4B4和PID为0x1005。

 

cypress68013USB固件例程及PCB板_第9张图片

图9 向Cyusb.inf添加了自定义VID和PID

cypress68013USB固件例程及PCB板_第10张图片

图10 向Cyusb.inf添加了自定义VID和PID

4.      更改cyusb.inf文件后,连接FX2LP DVK到PC,然后下载具有VID 0x4B4和PID 0x1005的固件映射图(.hex文件)。现在,指向更改后的cyusb.inf 文件(如绑定cyusb.sys至已连接的FX2LP DVK),以便绑定该文件到CyUSB.sys。FX2LP器件绑定到CyUSB.sys时,它将出现在Control Center的左侧面板,如图11所示。可以使用Control Center窗口来执行数据传输。

cypress68013USB固件例程及PCB板_第11张图片

图11 Control Center窗口中所罗列的自定义FX2LP器件

iv.             执行USB传输

Bulkloop程序使用OUT和IN 端点:它接收从主机PC的OUT数据,并通过IN将同样的数据传输到PC。Bulkloop示例项目使用四个端点。端点2和端点4被配置为BULK OUT点。端点6和端点8被配置为BULK IN端点。数据将从端点OUT 2和OUT 4分别回送到端点IN 6 和IN 8。  

图12显示的是通过使用“ControlCenter”中的“Data Transfers”选项卡将10字节的数据传输到端点2。Transfer Data-OUT按键被用于执行在所选数据管上的数据批量传输(在这种情况下,选择“Bulk out endpoint (0x02)”)。从0至9的数值被传输到EP2。可在“Control  Center”的信息窗口中查看到BULK  OUT的传输结果。图12显示的是该传送操作的结果。


cypress68013USB固件例程及PCB板_第12张图片

图12  BULK OUT传输结果

现在,在端点6上执行BULK IN传输操作,以读回刚刚从PC传送到FX2LPOUT数据。选择Bulk  in endpoint  (0x86),然后点击Transfer  Data-IN按键。可看见从端点6 IN返回的数据。图13显示了通过端点6接收到的数据。也可使用端点4和8来进行同样的操作。即使Bytes  to Transfer字段过大(为512个字节),USB仍传输正确的字节数(10个字节)。

cypress68013USB固件例程及PCB板_第13张图片

图13  使用“Control Center”中的“TransferData-IN”按键传输BULK IN

当开发USB  2.0高速设备的硬件时,电路板布局和设计会决定项目的成功。AN1168和AN15456应用手册给出了FX2LP的设计指南。此外,FX2LP  DVK安装的hardware(硬件)子目录中还包含FX2LP开发套件原理图、物料清单(BOM)(用于开发电路板)以及开发电路板布局和设计文件。  

 

v.             固件示例项目

表1  FX2LP 固件示例的说明

序号

固件示例

说明

1

hid_kb

是指示例固件。该示例固件通过使用DVK电路板上各按键和7段显示来仿真HID级键盘。

2

Bulkloop

包含一个批量回送测试操作,该操作执行EZ-USB批量端点。它将EP2OUT和EP4OUT分别回送到EP6IN和EP8IN。

3

Bulkext

包含一个批量回送测试操作,该操作执行EZ-USB批量端点。使用外部自动指针来执行回送功能。将数据从OUT端点缓冲区复制到DVK电路板上的外部RAM内,然后再返回到IN端点缓冲区。它将EP2OUT和EP4OUT分别回送到EP6IN和EP8IN。

4

Bulksrc

包含了BULK数据的无限提供者和消费者,用于测试。使用CyConsole或CyBulk来驱动它。EP2OUT和EP4OUT接收所有BULK数据包。在高速传输时,EP6IN始终返回一个大小为512字节的数据包,但在全速运行时返回大小为64个字节的数据包。根据EP8IN中缓冲区的可用性,将EP4OUT的最新数据包写入到EP8IN内。

5

dev_io

包含各源文件,用于创建简单的开发电路板I/O 的示例。该软件说明了如何使用EZ-USB开发套件中的按键和LED。

6

EP_Interrupts

描绘端点中断的使用的批量回送固件。

7

extr_intr

是指表示外部中断处理INT0、INT1、INT4、INT5和INT6的固件。

8

Ibn

包含了一个固件。该固件使用IBN(In Bulk NAK)中断将EP2OUT和EP4OUT分别批量回送到EP6IN和EP8IN,以启动传输操作。

9

LEDCycle

是指表示使用DVK上的通用指示器LED(D2、D3、D4、D5)的简单固件示例。

10

Pingnak

包含一个固件。该固件使用PING NAK中断来将EP2OUT和EP4OUT分别批量回送到EP6IN和EP8IN,以启动传输操作。

11

iMemtest

是指存储器测试固件示例。测试片上的RAM。

12

vend_ax

包含创建供应商特定指令示例的源文件。该示例说明了如何实现不同的供应商指令。

hid_kb Firmware Example

TD_poll ()函数在固件中的功能是定期的检查按键十分有按下。按键的功能表如下:

表2 按键功能描述

开发板上的按键

功能

F1

Shift

F2

Send ‘a’

F3

Send ‘b’

F4

Send ‘c’

 

Bulkloop Example

接收从主机传来的块数据并回送到主机,四个端点的配置在TD_init()中,两个输出端点和两个输入端点。同时四个端点还需在描述符文件配置中有定义。

EP2CFG = 0xA2;                          //Endpoint2 - OUT, Bulk, double buffered

  SYNCDELAY;                   

  EP4CFG = 0xA0;                      //Endpoint 4 - OUT, Bulk,double buffered

  SYNCDELAY;                   

  EP6CFG = 0xE2;                      //Endpoint 6 - IN, Bulk,double buffered

  SYNCDELAY;                   

  EP8CFG = 0xE0;                      //Endpoint 8 - IN, Bulk,double buffered

数据回送在TD_Poll函数中实现。端点2和端点4被配置为接收主机传来的数据。这些数据然后被传送到端点6和8。为实现这个功能,端点2首先需要检查是否已有数据,这可通过读取端点2状态寄存器空标志查看。如果端点2有从主机传来的数据,则可检查端点6是否可以接收数据。这可以通过读取端点状态寄存器中端点6的满标志位。如果端点6不满,可以传输数据。

if(!(EP2468STAT &bmEP2EMPTY))                    //如果端点2有数据不为空时(即bmEP2EMPTY为0),端点6可以接//收数据

  { // check EP2 EMPTY(busy)bit in EP2468STAT (SFR), core set's this bit when FIFO is empty

     if(!(EP2468STAT &bmEP6FULL))    //如果端点6数据不满时(即bmEP6FULL为0),端点6才接收数据

     {  // check EP6 FULL(busy) bit in EP2468STAT(SFR), core set's this bit when FIFO is full

数据指针初始化相应的缓冲。第一个自动指针初始化为端点2FIFO缓冲的第一个字节。第二个自动指针初始化为端点6FIFO缓冲的第一个指针。被传输的字节数是从端点2的字节计数寄存中读取的。EP2BCL, EP2BCH寄存器包含着从主机写入到FIFO缓冲的字节数。这两个寄存器会一直给输出事务的FIFO进行数据传输计数,只要数据还没有被发送到外围设备。

APTR1H = MSB( &EP2FIFOBUF ); // Initializing the first datapointer

APTR1L = LSB( &EP2FIFOBUF );

AUTOPTRH2 = MSB( &EP6FIFOBUF ); // Initializing the second datapointer

AUTOPTRL2 = LSB( &EP6FIFOBUF );

count = (EP2BCH << 8) + EP2BCL; // The count value is loadedfrom the byte count registers

以下为数据回送

for( i = 0x0000; i < count; i++ )

{

// setup to transfer EP2OUT buffer to EP6IN buffer usingAUTOPOINTER(s)

EXTAUTODAT2 = EXTAUTODAT1;

}

因为已经使能自动指针,指针会自动加计数,EXTAUTODAT2 = EXTAUTODAT1;这个语句会传输数据从端点2到端点6。每执行一次以上语句,自动指针加1,上述语句会重复执行来传输字节从端点2到端点6。数据传输完成后,端点2会再一次被配置来接收从主机发来的新包。端点6也会使FIFO缓冲对主机的读取有效。

测试固件功能使用的软件有:

Ø  Cyconsole ,如图14

选择EP2 OUT作为块输出数据传输管道,且键入长度为512字节0x5实际数据。然后点击BulkTrans按键传输。同理选择EP6 IN回送在EP2中的数据。

cypress68013USB固件例程及PCB板_第14张图片

图14  EP2 OUT Data Transfer使用CyConsole

 

Ø  CyBulk,在C:\Cypress\Cypress Suite USB3.4.7\CyAPI\examples\cybulk\x64\Release软件如图15

cypress68013USB固件例程及PCB板_第15张图片

图15  Bulkloop 使用CyBulk Application

Ø  Bulkloop,位于Windows Start->All programs->Cypress->Cypress SuiteUSB3.4.7->Bulkloop,如图16

cypress68013USB固件例程及PCB板_第16张图片

图16  Bulkloop 使用Bulkloop C#Application

Bulksrc Firmware Example(与Bulkloop类似)

Bulksrc固件程序描述的是配置USB设备为接收主机传来的数据并回送到主机。打开bulksrc.Uv2工程可以查看代码。 TD_init()函数有5个端点来处理块传输:两个输出端点EP2/EP4和两个输出端点EP6/EP8都被配置为双重缓冲。第五个端点EP1为64字节缓冲输入和输出端点。这些要被定义在描述符文件中。端点配置是在TD_init()函数中。

Bulkext Firwmare Example(与Bulkloop类似)

唯一的区别在于Bulkloop和Bulkext的来源和目的缓冲区的存储地址不同。在bulkloop中端点FIFO直接作为源和目标缓冲区。这些都是内部RAM缓冲区存储在EZ-USB设备。在TD_Poll函数中端点 2数据缓冲区的目的定义在外部RAM存储地址address-0x2800中,同时存储地址也被定义为EP6输入端点的源缓冲区,且数据是通过AUTOPTR来复制的。

Vend_ax Example

这个例子演示了不同供应商的命令的使用。用供应商的命令来完成独特的任务,如EZ-USB复位,RAM的下载,为实现I2C接口设置不同的频率,与一个外部SRAM内存进行通信,等。供应商的命令被定义在vend_ax C例子源文件中。通过点击vend_ax.uv2打开项目。

 

 

 

序号

厂商命令及宏定义

功能

1

0xA2/VR_EEPROM

下载数据到小的EEPROM

2

0xA3/ VR_RAM

下载数据到内部或外部RAM存储中

3

0xA6/

VR_GET_CHIP_REV

获得EZ-USB当前的版本号

4

0xA8/VR_RENUM

EZ-USB设备的断开和重连

5

0xA9/VR_DB_FX

此命令选择双字节寻址的大的EEPROM-U5且内容可上传和下载到EEPROM

6

0xAA/VR_I2C_100 

设置I2C接口为100kHZ

7

0xAB/VR_I2C_400

设置I2C接口为400kHZ

 

vi.             USB通信模块PCB设计


图14  USB模块原理图

cypress68013USB固件例程及PCB板_第17张图片

图15  USB模块PCB板

cypress68013USB固件例程及PCB板_第18张图片

图16  USB模块3D效果

 

 

 

 

 

你可能感兴趣的:(cypress68013USB固件例程及PCB板)