文章目录
1.CY7C68013A 概述
USB 外设的主芯片 CY7C68013A,CY7C68013A 是赛普拉斯( Cypress)公司推出的带智能 USB 接口的 EZ-USB FX2 USB2.0控制芯片,它包含了智能串口接口引擎,能完成所有基本的 USB 功能,可以替 USB 外设开发者完成 USB 协议中规定的 80%~90%的通信工作,这使得开发者可以不必关心 USB 协议实现的细节而顺利地开发出所需要的 USB 外设。此外,赛普拉斯公司还提供了设备的“软”解决方案,即 CY7C68013A 开发包,该开发包提供的硬件和软件已经为开发者做了大量开发工作,开发者只需在特定的地方加入自己的功能相关的代码即可,开发极其方便。该芯片虽然是针对USB2.0 的,但是和 USB1.1 是兼容的,它仅支持两种传输速率:全速 12Mbps 和高速480Mbps,不支持低速 1.5Mbps。
2. 内部结构框图
- CY7C68013A 主要由 8051 内核、 USB2.0 的 SIE( Serial Interface Engine)、 I2C 主控端和 GPIF 和 FIFO 四部分内容组成。下面我们分别进行介绍:
- 1、8051 内核: CY7C68013A 集成了一个可配置工作时钟的增强型 8051 内核, 该内核具有 256 字节的寄存器 RAM、扩展的中断系统、三个定时器/计数器和两个 USART。有关 8051 内核的具体介绍可以参考 CY7C68013A 的数据手册,该手册给出了详细的讲解说明。
- 2、SIE: CY7C68013A 内部集成的 USB2.0 的 SIE 能完成大部分 USB2.0 协议的处理工作,减少了用户对繁杂的 USB 协议的处理。 CY7C68013A 的 SIE 对应于图中的 XCVR和 CY 智能引擎。 当接收数据时,首先需要对差分数据线( D+和 D-) 上的串行数据进行 NRZI 译码和去填充位操作,接着解码得到包, 然后对包进行 CRC 校验,最后将装载的数据传递给 USB 设备。发送数据时正好相反。
- 3、I2C 主控端:主要是用读写 EEPROM 的,我们可以利用它将固件程序写入到 EEPROM中,也可以利用它将 EEPROM 中的固件程序读出,并加载到 RAM 中。这里需要我们注意的是根据 EEPROM 的不同情况, CY7C68013A 有三种启动方式:
- 没有片外存储器被连接到 CY7C68013A 上,这时就会被枚举为缺省的 USB 设备,其中 VID(厂商 ID)、 PID(产品 ID)、 DID(设备 ID)由内部硬件提供。
- 一个包含了 VID/PID/DID 值的 EEPROM 被连接到 CY7C68013A 的 I2C 总线上,同样 CY7C68013A 会被枚举为缺省的 USB 设备。和第一种方式不同的是,它将用 EEPROM 中的 VID/PID/DID 值来代替内部的默认值。由于这种方式在EEPROM 内的数据必须以 0xC0 开头,因此这种模式被称为“C0 Load”。这种模式经常被用来让主机通过 USB 总线来为 USB 设备加载固件程序。
- 一个包含固件程序的 EEPROM 被连接到 CY7C68013A 的 I2C 总线上,固件程序会被自动加载到 CY7C68013A 的片内 RAM, CPU 将跳出复位状态并执行固件程序的代码。由于 VID/PID/DID 值包含在固件程序中,由固件程序来处理标准设备请求,因而不会被枚举为缺省的 USB 设备。在此模式 EEPROM 中的数据必须以0xC2 开头,因此被称为“ C2 Load”,我们采用的正是此种模式。
- 4、 GPIF 和 FIFO: CY7C68013A 可以配置成两种工作模式,一种是 GPIF(通用可编程接口),另一种是 SlaveFIFO(从属 FIFO)。 SlaveFIFO 与 GPIF 的存在是为了解决外部逻辑与主机稳定的高速数据传输问题,数据可以不经过 8051 内核的干预在外部逻辑与主机之间传输。 CY7C68013A 与外部逻辑连接时通信方式存在两种情况:①USB 设备作为主机,外部逻辑作为从机,这时的 CY7C68013A 工作在 GPIF 模式;②外部逻辑是主机, USB 设备作为从机,这时的 CY7C68013A 工作在SlaveFIFO 模式。 后续的讲解中我们主要以 SlaveFIFO 模式为主,至于 GPIF 模式感兴趣的朋友可以进一步学习。
3.封装和管脚
- CY7C68013A 有 128-pin TQFP、 100-pin TQFP、 56-pin SSOP 和 56-pin QFN 四种封装形式,我们采用的是 56-pinQFN 封装:
- FX2 提供了三种可用的接口模式: 1、端口模式; 2、 SlaveFIFO 方式;3、可编程的 GPIF 主控方式。在端口方式下: I/O 引脚都可作为 8051 的通用 I/O 口。在 SlaveFIFO方式下,外部设备可以像控制普通 FIFO 一样对 FX2 的多层缓冲 FIFO 进行读写。 这里我们主要来介绍一下端口的管脚功能,至于 SlaveFIFO 管脚功能我们将会在 USB 的通信协议中进行讲解。下面我们给出端口管脚的功能描述:
4. 原理图
- CY7C68013A 芯片的电源、复位电路和晶振是必不可少的, DPLUS 和DMINUS 连接到了 Micro USB 接口上;SCL 和 SDA 连接到了 AT24C128 芯片上, 容量大小和CY7C68013A 内部的 RAM 一样,由于 CY7C68013A 内部没有 ROM,在掉电期间固件程序只能放在 EEPROM 中。 通用 IO 引脚连接到了外设板的扩展接口上, 可以和 FPGA 通信,这里需要我们说明的是, SW_DIP-2 是一个 2 位的拨码开关,主要实现了复位和连接 AT24C128 芯片功能,当我们将 1 拨向 ON 处,这表示 USB 外设处于复位状态,当我们将 2 拨向 ON 处,这表示连接 EEPROM 芯片,从 EEPROM 中启动。
5. Slave FIFO 模式的工作原理与通信时序
5.1工作原理
- Slave FIFO 的硬件结构图:
- 从该图中可以看出, Slave FIFO 具备 4 个端点,分别为 EP2、 EP4、 EP6 和 EP8;时钟具备内部时钟 48MHz 和 30MHz 两种选择,或者采用外部时钟 IFCLK( 5~48MHz) 输入。数据端口可以通过 WORDWIDE 进行配置,当 WORDWIDE 为 0 时, Slave FIFO 工作在 8bit 模式下。当 WORDWIDE 为 1 时, Slave FIFO 工作在 16bit 模式下。此外, CPU 还可以通过 EPxFIFOBUF和 EPxBCH:L 等寄存器来配置 Slave FIFO。外部端口通过一些控制信号如 SLOE 和 SLRD 等信号来实现通信时序。
- Slave FIFO 和外部主设备的连接示意图:
5.2 Slave FIFO 的通信时序
- Slave FIFO 有两种通信时序,分别是异步通信时序和同步通信时序, 异步通信时序完全由 SLRD 和SLWR 控制,而同步通信时序则在 SLRD 或 SLWR 有效状态时,读写数据与 IFCLK 保持同步,这里我们需要说明的是,由于我们只用到了同步通信时序,所以这里着重讲解同步通信时序,首先我们来看下同步读时序,如图:
- 首先,我们需要拉低 SLOE(低电平有效,其他信号也如此),这样 FIFO的数据才能输出到 FD( DATA)总线上。
- 接下来在我们读取 FD 总线上的数据时,需要将 SLRD拉低。
- CY7C68013A 在接收到 SLRD 有效后,将使 FIFO 指针指向下一个地址。与此同时,如果此时读取到的数据是最后一个,相应的标志位 FLAGS 将拉低。 这里需要大家注意的是,FIFOPINPOLAR 寄存器是可以配置以上信号的高有效,还是低有效, 通常我们选择的都是低有效。
- Slave FIFO 同步写时序:
- 从该图中可以看出,当 SLWR 信号为低电平时, DATA 数据 N 将随着 IFCLK 时钟上升沿写入到 FIFO 中。此时如果 FIFO 中的数据被写满,那么 FLAGS 也将由高变低。