ISP1161x 嵌入式编程指南

  • 格式:pdf
  • 大小:709.85 KB
  • 文档页数:75

ISP1161x嵌入式编程指南1. 简介 (3)2. ISP1161X软件模块 (3)2.1仅为主机模式 (3)2.2仅为设备模式 (4)2.3同时用作主机和设备模式 (5)3. ISP1161X硬件模块 (5)3.1主机控制器硬件模块 (5)3.2设备控制器硬件模块 (6)4. ISP1161X软件系统结构 (8)4.1USB主机软件系统结构 (8)4.2主机堆栈系统结构 (9)4.3USB设备软件系统结构 (11)5. 编程ISP1161X的主机控制器 (11)5.1可软件访问的硬件构件 (11)5.2HC控制和状态寄存器 (12)5.2.1 16位和32位寄存器的写和读 (13)5.3ATL和ITL缓冲区的写和读 (15)5.4典型的硬件初始化时序 (15)5.4.1 检测主机控制器 (16)5.4.2 软件复位主机控制器 (17)5.4.3 配置HcHardwareConfiguration寄存器 (19)5.4.4 配置中断 (20)5.4.5 配置HcFmInterval寄存器 (23)5.4.6 配置根集线器寄存器 (24)5.4.7 设置ITL和ATL缓冲区长度 (26)5.4.8 设置INT1中断服务程序 (26)5.4.9 设置主机控制器为可操作的状态 (27)5.4.10 设置主机控制器来执行USB枚举 (28)5.5主机控制器驱动程序操作流程 (31)5.6访问ATL缓冲区 (31)5.6.1 使用SOFITLInt与ATLInt (31)5.6.2 启动硬件扫描ATL缓冲区 (33)5.7访问ITL缓冲区 (35)5.8可操作模式下主机控制器的流程图 (37)5.9设置传输PTD (38)5.9.1 控制传输 (40)5.9.2 批量、中断和同步传输 (41)5.10数据结构链表的处理 (42)5.11错误处理 (43)6. 编程ISP1161X的设备控制器 (43)6.1设备控制器的固件结构 (43)6.1.1 硬件抽象层-HAL4SYS.C (44)6.1.2 硬件抽象层-HAL4D13.C (44)6.1.3 中断服务例程-ISR.C (44)6.1.4 协议层-CHAP_9.C (44)6.1.5 协议层-D13BUS.C (44)6.1.6 主循环-MAINLOOP.C (44)6.2固件到其它CPU平台的端口连接 (45)6.3在查询模式下开发固件 (45)6.4硬件抽象层 (45)6.4.1 系统的硬件抽象层 (45)6.4.2 ISP1161x设备控制器的硬件抽象层 (46)6.5中断服务例程 (47)6.5.1 总线复位 (51)6.5.2 挂起变化 (51)6.5.3 EOT处理器 (51)6.5.4 控制端点处理器 (51)6.5.5 控制OUT处理器 (52)6.5.6 控制IN处理器 (54)6.5.7 批量端点处理器 (55)6.5.8 ISO端点处理器 (60)6.6主循环 (64)6.7标准的设备请求 (65)6.7.1 清除特性请求 (65)6.7.2 取出状态请求 (67)6.7.3 设置地址请求 (67)6.7.4 取出配置请求 (68)6.7.5 取出描述符请求 (69)6.7.6 设置配置请求 (70)6.7.7 取出和设置接口请求 (71)6.7.8 设置特性请求 (72)6.7.9 类请求 (72)6.8厂商请求 (72)6.8.1 厂商请求批量传输 (73)6.8.2 CATC捕获一个PIO OUT传输 (73)6.8.3 CATC捕获一个PIO IN传输 (74)6.8.4 厂商请求ISO传输 (74)6.8.5 CATC捕获一个ISO OUT传输 (75)6.8.6 CATC捕获一个ISO IN传输 (75)1. 简介ISP1161x(表示ISP1161和ISP1161A)是一个单片通用串行总线(USB)主机控制器(HC)和设备控制器(DC),它符合通用串行总线2.0规范(全速)。

这两个USB控制器——主机控制器和设备控制器,共用一个微处理器总线接口。

这些控制器有相同的数据总线,但I/O地址不同。

它们也有各自的中断请求输出管脚和独立的直接存储器存取(DMA)通道,DMA通道含有各自的DMA请求输出管脚(DREQ)和DMA应答输入管脚(DACK)。

这就使微处理器在应用中可以对USB主机控制器和USB设备控制器同时进行控制。

ISP1161x为USB主机控制器提供两个下行端口,为USB设备控制器提供一个上行端口。

每一个下行端口都有它自身的过流(OC)检测输入管脚和电源转换控制输出管脚。

上行端口有它自身的V BUS检测输入管脚。

ISP1161x还分别为USB主机控制器和USB设备控制器提供单独的唤醒输入管脚和挂起状态输出管脚,这就使电源管理起来很灵活。

主机控制器的下行端口可与任意一个符合USB规范的USB设备和包含USB上行端口的USB集线器相连。

类似地,设备控制器的上行端口可与任意一个符合USB规范的USB 主机和包含USB下行端口的USB集线器相连。

主机控制器根据发布的USB 1.0a开放式主机控制器接口规范修改得到,请参考本文档其它部分中的OHCI。

设备控制器符合大多数USB器件的分类规格,比如:成像类、海量存储器件、通信器件、打印设备以及人机接口设备。

ISP1161x十分适用于仅需要一个USB主机、一个USB设备或一个综合可配置为USB主机和USB设备功能的嵌入式系统和便携式设备。

ISP1161x在系统中的使用非常灵活,应用时甚至可将其内置到系统中。

例如,内置有ISP1161x的系统不但可以与含有USB下行端口的PC机或USB集线器相连,而且还可以与含有USB上行端口的设备相连:如USB打印机、USB相机、USB键盘和USB鼠标等。

因此,ISP1161x实现了嵌入式系统的点对点连接。

其中最引人注意的例子是将一个ISP1161x的主机控制器和一个ISP1161x的设备控制器相连。

2. ISP1161x软件模块ISP1161x有3种工作模式(仅为主机模式、仅为设备模式以及同时用作主机和设备模式),每种模式采用不同的软件模块进行操作。

2.1 仅为主机模式仅为主机模式的软件模块由主机堆栈、一个或多个类驱动程序、零或多个设备驱动程序以及应用软件组成。

图2-1所示为数据流程和此软件模块中各部分软件组件的调用次序。

图2.1 ISP1161x仅为主机模式的软件模块由于单个USB主机控制器可与多个USB从机设备相连,因此仅为主机模式的软件模块可包含多个类驱动程序,其中每个类驱动程序服务一种类型的USB从机设备。

通常,应用软件通过直接访问类驱动程序来执行USB操作。

然而,在某些情况下,类驱动程序和应用软件之间的多个层、被描述为(dubbed)设备驱动程序会有意义。

例如,用户可以使有不同类型打印机的设备驱动程序,这些设备驱动程序访问一个通用的USB打印机类驱动程序来实现打印机操作。

2.2 仅为设备模式仅为设备模式的软件模块由设备堆栈、一个类驱动程序和应用软件组成。

数据流程和此软件模块中各部分软件组件的调用次序如图2-2所示。

图2.2 ISP1161x仅为设备模式的软件模块由于一个USB从机设备执行一个单一的类功能,因此一个USB从机设备只能有一个类驱动程序。

当执行USB操作时,应用软件访问类驱动程序。

2.3 同时用作主机和设备模式ISP1161x的大多数通用模式为同时用作主机和设备模式。

该模式的软件模块通过结合仅为主机模式和仅为设备模式的软件模块为一个单一的模块来实现。

软件模块如图2-3所示。

图2.3 ISP1161x同时用作主机和设备模式的软件模块在这种模式下,ISP1161x就像单独用作USB主机和设备控制器那样工作。

该模式的软件模块中的主机端部分与设备端部分相互独立。

也就是说,设备端的软件与主机端的软件可完全独立运行。

3. ISP1161x硬件模块3.1 主机控制器硬件模块OHCI主机控制器和ISP1161x之间的主要差别是:OHCI主机控制器是一个总线主器件而ISP1161x不是。

在OHCI主机控制器内,系统存储器中的USB数据包通过OHCI主机控制器的总线主机DMA被发送和接收。

然而,在ISP1161x中,ISP1161x内部的ITL和ATL缓冲区和系统存储器之间的USB数据包的传输由微处理器控制执行。

ISP1161x无需使用I/O总线接口和总线主机DMA,因而它也被称为“从机主机控制器”。

这是因为ISP1161x非常适用于选择主机控制器IC的低成本和设计简单的嵌入式应用中。

图3.1 ISP1161x主机控制器硬件模块3.2 设备控制器硬件模块当ISP1161x的设备控制器部分正在运行时,微处理器通过编程设置的I/O(PIO)或内置在ISP1161x 的从机DMA来传输系统存储器和端点FIFO之间的USB数据包。

USB数据的发送和接收都由端点FIFO来完成。

图3.2 ISP1161x设备控制器硬件模块4. ISP1161x软件系统结构4.1 USB主机软件系统结构图4.1 USB主机软件系统结构如图4-1中所示,USB主机软件系统结构包括通用串行总线驱动程序(USBD)、主机控制器驱动程序(HCD)和客户软件。

客户软件可以是应用代码或USB类驱动程序。

USBD和HCD共同用作USB主机堆栈。

在USB主机堆栈中,USBD处理与硬件无关的USB协议事件而HCD处理与硬件相关的USB协议事件。

因此,由HCD来访问USB主机控制器硬件。

也就是说,HCD通过控制主机控制器内的可编程硬件寄存器来驱动主机控制器。

本文档描述了当ISP1161x用作USB主机控制器时,如何通过编程ISP1161x的主机控制器硬件寄存器来使能相应的硬件执行HCD功能。

4.2 主机堆栈系统结构图4-2所示为内置于USB主机堆栈中的主要功能。

类驱动程序图4.2 主机堆栈系统结构执行一个USB传输时典型的软件调用次序如下:1.启动USB总线上的一个写或读操作的应用程序。

2.类驱动程序调用USBD API来实现应用程序启动的写或读操作。

BD API调用HCD API以便调用类驱动程序。

4.HCD API使USB传输产生。

5.通知类驱动程序传输已经完成。

6.通知应用软件传输完成。

下面的例子为在主机堆栈中执行的从类驱动程序到USBD和HCD的调用次序。

图4.3 主机堆栈调用次序实例在这个例子中,USB_API()(在类驱动程序内)用来调用USBD API。

HcdControlTransfer()函数是其中一个可用的HCD API,由它来执行一次控制传输。

4.3 USB设备软件系统结构图4.4 USB设备软件系统结构USB设备是一个从机设备,它的工作是响应主机发出的请求。