(图一)USB设备控制器框图
模块简介:
AHB:主要用于高性能模块(CPU、DMA和DSP等)间的连接;
USB ATX:USB 设备控制器内置的模拟收发器,用来收发USB总线上的D+和D-信号;
SIE(SERIAL INTERFACE ENGINE),负责处理USB协议,完全使用硬件来处理以提升速度。使用寄存器命令控制功能;
EP_RAM:为endpoint保留的、FIFO形式的SRAM,相当于缓冲区,其大小由使用的端点数、端点的最大包大小和是否使用双缓冲区决定;
EP_RAM access control:有三种方式可以访问EP_RAM:CPU通过寄存器、SIE和DMA引擎, EP_RAM access control用来控制对EP_RAM的访问;
DMA engine and bus master interface:这部分负责在AHB上的RAM和EP_RAM缓冲区间收发数据;
Register interface:CPU和USB模块间通讯的接口;
SoftConnect:通过控D+和3.3V之间的1.5kΩ的上拉电阻来控制USB和主机之间的连接;
GoodLink:用来连接指示的借口,控制外部的一个LED指示灯,当设备成功枚举和配置好之后,LED灯会亮;USB设备如果挂起,LED灯会灭。
USB的端点:
(1)端点是一款设备上主机和设备间通信的末端(LPC1768上有32个端点),每个端点有独立的端点号、带宽需求、该端点的传输类型、最大包大小等。
(2)控制端点:即端点0,默认的控制端点。主机端使用这个控制端点来初始化和操作设备,获取设备的配置信息和状态。控制端点一开始就可以被访问,其它端点只有等设备配置好之后才能使用。
(图二)LPC1768中的32个USB端点
从图中可以看到共有32个物理端点,但被划分为16个逻辑端点。
DMA传输方式:
DMA: Direct Memory Access,即不经过CPU而直接从内存存取数据交换的模式,可以在很大程度上减轻CPU的负担。
在LPC1768中,CPU和DMA控制器共享USB Device Communication Area(UDCA)的内存,该内存的首地址存储在USBUDCAH寄存器中。
(图三)描述了UDCA和USBUDCAH寄存器、DMA描述符的关系
(图四)这个图描述了DMA描述符的具体意义
DMA 引擎 DD 描述符结构体:
/*********************************************************************************************************
DMA 引擎 DD 描述符结构体
*********************************************************************************************************/
typedef struct non_iso_dd_tag {
UINT32 next_dd_addr; /* 下一个DD地址 */
UINT32 control; /* DD控制字 */
UINT32 start_addr; /* DMA 缓冲区起始地址 */
UINT32 status; /* DMA 引擎状态 */
} DD_DESCRIPTOR;
typedef struct __tagUsbStruct __CTRL_USB; /* USB数据收发控制结构体类型 */
USB相关的外部引脚:
USB_CONNECT:在软件控制下输出外部1.5kΩ的转化信号
USB_UP_LED:当设备配置好后,该引脚输出低电平;未配置好时输出高电平