1. ARM架构下的USB接口技术解析
1.1 USB控制器硬件架构
Philips ISP1761 USB控制器通过FPGA与ARM处理器连接,采用典型的静态内存总线接口。其内部架构包含三个关键模块:
-
OTG控制器模块:负责USB On-The-Go功能实现,包含动态端口路由和过压保护电路。当设备作为主机时,可提供500mA的5V电源输出;作为从机时则遵循USB 2.0供电规范。
-
事务翻译器:处理高速USB(480Mbps)与全速USB(12Mbps)之间的协议转换,通过内部FIFO缓冲实现不同速率匹配。
-
DMA引擎:两个独立DMA通道(通道0/1)通过USBDRQ[1:0]和USBDACK[1:0]信号线与FPGA交互,支持突发传输模式,最大传输带宽可达90MB/s。
实际调试中发现,ISP1761的REFCLK12MHZ2U引脚虽然设计为24MHz输入,但实际使用中通常由板载12MHz晶体提供时钟参考。这个细节在硬件设计时需要特别注意。
1.2 寄存器映射与配置
USB控制器寄存器被映射到ARM内存空间的0x4F000000地址,关键寄存器包括:
| 寄存器偏移 | 名称 | 功能描述 |
|---|---|---|
| 0x00 | HC_REVISION | 控制器版本号(只读) |
| 0x04 | HC_CONTROL | 主机控制器使能/复位控制 |
| 0x08 | HC_ISTATUS | 中断状态寄存器 |
| 0x20 | HC_HCDMA | DMA配置寄存器 |
| 0x34 | PORT1_CTRL | OTG端口控制寄存器 |
配置示例代码:
c复制// 初始化USB主机控制器
void usb_host_init(void) {
volatile uint32_t *usb_reg = (uint32_t*)0x4F000000;
// 复位控制器
usb_reg[0x04/4] |= (1 << 1); // 设置复位位
while(usb_reg[0x04/4] & (1 << 1)); // 等待复位完成
// 配置DMA通道
usb_reg[0x20/4] = 0x00000003; // 启用双通道DMA
}
1.3 OTG模式切换机制
通过J45连接器实现的OTG接口支持动态角色切换:
- 主机模式:当检测到ID引脚接地时,控制器自动进入主机模式,提供VBUS电源(通过nPO[
