资源描述
资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。
文档编号:
保密级别:
众志-863系统芯片通用串行总线设备控制 芯片设计规范
UNITY-863 USBDC Specification
北京大学微处理器研究开发中心
▔▔▔▔▔▔▔▔▔▔▔▔▔
此硬件参考手册属机密级, 仅供北京大学微处理器研究中心相关成员查看
版本说明
版本号 日期 描述
00100 05/26/ 完成unity-863 usb specification 初稿
目 录
版本说明…………………………………………………………………………..1
目 录………………………………………………………………………………2
图片目录…………………………………………………………………………..3
表格目录…………………………………………………………………………..4
1 概述…………………………………………………………………………..5
1,1 功能简述……………………………………………………………….6
1.1.1 宏观特性…………………………………………………………6
1.1.2 主要功能…………………………………………………………6
1.2 Block Diagram………………………………………………………….8
1.3 引脚配置……………………………………………………………….9
1.3.1 USB接口描述………………………………………………….9
2 寄存器配置………………………………………………………………….10
2.1 可编程寄存器…………………………………………………………11
3 接口和时序………………………………………………………………….20
3.1 USB接口描述………………………………………………………….21
3.1.1 USB输入信号…………………………………………………22
3.1.2 USB输出信号…………………………………………………22
3.2 主要接口信号时序…………………………………………………….23
附录一 文档维护人……………………………………………………………21
附录二 文档评审情况…………………………………………………………21
图片目录
表格目录
.
+
1 概 述
众志-863系统芯片 USBDC( univer serial bus devce control通用串行总线设备控制芯片, 以下简称USBDC) 是和带有USB主机控制器的设备进行通信的支持部件, 实现和带有USB主机控制器的设备进行数据交换。
USBDC和APB连接进行寄存器的初始化配置, 和DMAC连接进行大量的数据交换。
1.1 功能简述
1.1.1宏观特性
众志-863系统芯片 USBDC具有以下特征:
l 48MHZ的系统时钟
l USB外挂FIFO,发送和接受FIFO都为128x16
l 一个配置, 三个端点
l DMAC传输方式
1.1.2主要功能
INTERFACE模块的功能 暂存数据( 读写数据) 、 地址信号、 读写信号
FSM模块的功能 把APB的时序转化为USB的时序同时返回FINISH信号和读数据
USBDC 使用SYNOPSYS公司的DESIGNWARE, 设备端的控制芯片, 把有效负载转换为满足协议的数据格式。
三个模块连在一起和具有USB主机控制器的设备( 主要是PC) 进行数据交换。
1.2 Block Diagram
在UNITY-863中, USBDC和其它模块的连接图如下:
图 1 与APB MASTER的连接
图 2 与DMAC和RAM的连接
1. 3引脚配置
本节简要描述USBDC的接口信号, 对每一个信号更详细的描述以及时序图参阅第三章接口信号和时序描述。
输入输出管脚
总模块输入输出信号和描述参见下表:
表1-1总模块输入输出信号
信号
方向
作用
描述
PCLK
输入
INTERFACE模块的时钟
APB MASTER发出
PSEL
输入
片选信号
1 有效
PENABLE
输入
使能信号
1 有效
PWRITE
输入
读写信号
1 有效
PADDR
输入
地址信号
宽度是10
PWDATA
输入
写数据
宽度是8
PRESETn
输入
复位信号
0 有效
USB_CLK
输入
FSM,USBDC的时钟信号
48MHZ
PRDATA
输出
读数据
宽度是8
app2usb_rxpkt_accepted
输入
OUT事务的ACK信号
1 有效
app2usb_rxpkt_rejected
输入
OUT事务的NAK信号
1 有效
app2usb _rdma_ack
输入
DMA读请求的响应信号
1 有效
app2usb _wdma_ack
输入
DMA写请求的响应信号
1 有效
app2usb _wdma_data
输入
DMA写操作的数据信号
宽度是16
usb2app_rdma_req
输出
读操作的请求信号
1 有效
usb2app_wdma_req
输出
写操作的请求信号
1 有效
app2usb _rdma_data
输出
DMA读操作的数据信号
宽度是16
1.3.1 INTERFACE接口信号的描述
表1-2 INTERFACE接口信号
信号
方向
作用
描述
PCLK
输入
INTERFACE模块的时钟
APB MASTER发出
PSEL
输入
片选信号
1 有效
PENABLE
输入
使能信号
1 有效
PWRITE
输入
读写信号
1 有效
PADDR
输入
地址信号
宽度是10
PWDATA
输入
写数据
宽度是8
PRESETn
输入
复位信号
0 有效
USB_CLK
输入
FSM,USBDC的时钟信号
48MHZ
FINISH
输入
表明FSM已经完成当前操作
1 有效
RDATA
输入
FSM返回的数据
宽度是8
PRDATA
输出
读数据
宽度是8
READY
输出
准备好信号, 有效表明能够进行下一次操作
1 有效
WDATA
输出
发给FSM的数据信号
宽度是8
WR
输出
发给FSM的读写信号
1 有效
ADDR
输出
发给FSM的地址信号
宽度是10
RSTn
输出
发给FSM的复位信号
0有效
1.3.2FSM的接口信号
app2usb_rxpkt_accepted
输入
OUT事务的ACK信号
1 有效
app2usb_rxpkt_rejected
输入
OUT事务的NAK信号
1 有效
app2usb _rdma_ack
输入
DMA读请求的响应信号
1 有效
app2usb _wdma_ack
输入
DMA写请求的响应信号
1 有效
app2usb _wdma_data
输入
DMA写操作的数据信号
宽度是16
usb2app_rdma_req
输出
读操作的请求信号
1 有效
usb2app_wdma_req
输出
写操作的请求信号
1 有效
app2usb _rdma_data
输出
DMA读操作的数据信号
宽度是16
l 与APB的接口的信号说明:
APB MASTER和INTERFACE接口的信号
PCLK 输入 APB的时钟
PSEL 输入 APB MASTER发出的片选信号
PENABLE 输入 APB MASTER 发出的使能信号。
PWRITE 输入 APB MASTER 发出的读写信号。
PADDR 输入 APB MASTER 发出的地址信号。宽度是10。
PWDATA 输入 APB MASTER 发出的写数据。宽度是8。
PRDATA 输出 APB MASTER 要读回的数据。宽度是8
PRESETn 输入 APB MASTER 发出的复位信号。低电平有效。
READY 输出 准备好信号, 表明当前操作已经完成, 等待下一个操作。
INTERFACE和FSM之间的信号
USB_CLK 输入 USB的时钟(48MHZ)
REQ 输入 INTERFACE模块请求FSM对INTERFACE进行读操作。
FINISH 输出 FSM返回给INTERFACE的信号, 表明FSM已经完成当前操作。INTERFACE收到这个信号之后, 就把HREADY置位。
WDATA 输入 INTERFACE发出的写数据。宽度是8
RDATA 输出 FSM返回给INTERFACE的数据。宽度是8
ADDR 输入 INTERFACE发出的地址信号。宽度是10。
WR 输入 INTERFACE发出的读写信号。
RSTn 输入 INTERFACE发出的复位信号,低电平有效。
FSM和USB之间的信号
app_addr 输出 FSM发出的地址信号。
app_wr_n 输出 FSM发出的写信号。低电平有效。
app_rd_n 输出 FSM发出的读信号。低电平有效。
app_reg_sel 输出 FSM发出的片选信号。
app2usb_drdy 输出 FSM发出的准备好信号。
usb2app_drdy 输入 USB发出的准备好信号。
app2usb_data 输出 FSM发出的数据信号。宽度是8。
usb2app_data 输入 USB返回的数据信号。宽度是8。
未说明的电平有效的均为高电平有效。
功能描述:
工作流程:
1.INTERFACE和FSM复位, 此时READY, FLAG信号置为高电平, REQ清零, 等待读写指令。
2.读写指令发出后, APB会发出地址, 读写信号,PSEL,PENABLE.
3.在PSEL, PENABLE都有效的时候, 在PCLK的上升沿, 此时把读写信号、 地址信号和数据( 读操作无数据) 保存在INTERFACE里边, 同时把HREADY置为无效, 而且向FSM发出请求信号REQ。( 上次的文档是下一个周期发REQ信号) 。
4.FSM在USB_CLK的上升沿, 如果FLAG(请参看说明)和 REQ都为1, 就把APB的时序变为USB要求的时序, 同时把FLAG置为0。
5.FSM从USB得到数据和结束信号FINISH之后, 把数据( 如果写操作此时没有数据) , 放到INTERFACE里边, 同时向INTERFACE发出HREADY的置位信号。
6.等待软件的查询。
一些说明:
对软件查询的要求: 当发现READY为高时, 如果上次发出的指令为写指令, 这时能够对USB进行读写。如果上次发出的是读指令, 就把数据读走。
我们在APB的PENABLE, PSEL两个信号都有效时的时钟上升沿把地址, 读写信号和写数据保存在INTERFACE。在PSEL下降沿我们向FSM发出一个请求信号REQ( 因为两个时钟频率不同, 一个为166MHZ, 一个为48MHZ,因此REQ至少要4个166时钟宽度才能保证FSM的时钟采样到正确的REQ为了防止REQ信号被采样两次, 要设一个标志信号FLAG, 在时钟( USB时钟) 上升沿采样到REQ有效之后, 就把标志信号FLAG清零。系统复位时标志信号FLAG置1, 这样就防止被采样两次。FSM采样到数据和控制信号之后,FSM按照USB的时钟和要求的时序发给USB, 当USB操作完成之后, 发数据( 写操作不返回数据) 和FINISH信号给FSM,FSM接到这个信后之后, 把数据发到INTERFACE, 而且置位信号READY。FSM的时钟和USB的时钟一致。INTERFACE的时钟和APB的时钟保持一致。
因为两个时钟频率相差比较大, 因此复位信号的宽度要求很宽, 至少为3个USB时钟周期(48MHZ)。
寄存器的读写数据总线宽度是8。
l 与DMAC的接口信号的说明:
APP2USB_RXPKT_ACCEPTED DMAC通知USB发出一个OUT事务的ACK信号。
APP2USB_RXPKT_REJECTED DMAC通知USB发出一个OUT事务的NAK信号或者是IN 令牌( 标志) 的NAK信号。
APP2USB_RXMEM_AVAIL DMAC发出的RAM是否还有空间的信号。
USB2APP_RDMA_REQ USB发出的DMA读操作的请求信号。
APP2USB_RDMA_ACK DMAC对USB读请求的响应信号。
USB2APP_WDMA_REQ USB发出的DMA写操作的请求信号。
APP2USB_WDMA_ACK DMAC对USB写请求的响应信号。
USB2APP_EPINDEX USB发出的信号, 表明当前要操作的端点号和端点的方向。这个信号和DMA当前的地址构成了对RAM操作的地址。宽度是5。
USB2APP_RDMA_DATA 读操作的数据线。
APP2USB_WDMA_DATA 写操作的数据线。
DMA的传输方式采用INCREMNTING方式, 传输类型为BULK传输。DMAC和USB接口的时钟和USB的时钟一致, 而且时序关系和徐兴文已经协商好了, 她给出的信号和时序关系符合USB的要求。USB采用外挂FIFO的方式, FIFO的宽度采用halfword(16位),深度采用32位 。这样FIFO正好能够容纳一个包的大小。
操作流程:
l 写操作
当USB发出DMA写请求后, DMAC会发出响应信号, 如果当前RAM没有数据时或者DMAC忙, DMAC就不同意当前的操作。否则DMAC发出响应ACK, 同时把数据放到总线上。USB就会在ACK等于1 的时钟的上升沿读取数据。送出数据( 读操作)
l 读操作
当USB发出DMA读请求, 同时把数据放到总线上。就DMAC会发出响应信号ACK, 。DMAC就会在ACK 的下一个时钟的读取数据。DMAC数据读取操作结束之后, 会发出ACK或者NAK 响应。
主要信号时序图:
寄存器配置:
DW_usbd MacroCore有一个可见的能被编程的寄存器组, 她用来对管理配置、 控制、 监视USB的所有操作。具体的寄存器组以及如何管理说明如下:
所有的寄存器按照功能能够分为三类:
l 终端信息寄存器组
l 请求、 控制和状态寄存器组
l 统计寄存器组
她们的功能基于两个出发点:
l 保持当前与配置相关的信息
l 保持状态和中断控制
终端信息寄存器组:
Core中对于每个终端都给分配一个24字节的寄存器块, 块内的寄存器说明如下:
寄存器名字: ep_bEndpoitAddress
寄存器宽度( bits) : 8
属性: 只读
偏址: ‘h000
复位值:
寄存器名字: ep_bmAttributes
寄存器宽度( bits) : 8
属性: 对Endpoint 0只读,别的Endpoint读/写
偏址: ‘h001
复位值:
寄存器名字: ep_wMaxpacketSize
寄存器宽度( bits) : 16
属性: 读/写
偏址: ‘h002
复位值:
寄存器名字: ep_bInterfaceNumber
寄存器宽度( bits) : 8
属性: 读/写
偏址: ‘h004
复位值: ‘h00
寄存器名字: ep_stat
寄存器宽度( bits) : 8
属性: Bits7,5,3,2,0: 读/写,屏蔽
Bits6,4: 保留
Bits1: 读/写
偏址: ‘h005
复位值: ‘h00
寄存器名字: ep_setup_bmRequestType
寄存器宽度( bits) : 8
属性: 读/写
偏址: ‘h006
复位值: ‘h00
寄存器名字: ep_setup_bRequest
寄存器宽度( bits) : 8
属性: 只读
偏址: ‘h007
复位值: ‘h00
寄存器名字: ep_setup_wValue
寄存器宽度( bits) : 16
属性: 只读
偏址: ‘h008(低位在’h008,高位在’h009)
复位值: ‘h0000
寄存器名字: ep_setup_wIndex
寄存器宽度( bits) : 16
属性: 只读,屏蔽
偏址: ‘h00A(低位在’h00A,高位在’h00B)
复位值: ‘h0000
寄存器名字: ep_setup_wLength
寄存器宽度( bits) : 16
属性: 只读
偏址: ‘h00C(低位在’h00C,高位在’h00D)
复位值: ‘h0000
寄存器名字: ep_synchFrame
寄存器宽度( bits) : 16
属性: 读/写
偏址: ‘h00E(低位在’h00E,高位在’h00F)
复位值: ‘h0000
寄存器名字: app_intr
寄存器宽度( bits) : 8
属性: 读/写,屏蔽
偏址: ‘h000
复位值: ‘h00
寄存器名字: app_imask
寄存器宽度( bits) : 8
属性: 读/写
偏址: ‘h001
复位值: ‘hFF
寄存器名字: app_ctrl
寄存器宽度( bits) : 8
属性: 读/写
偏址: ‘h002
复位值: ‘h00
寄存器名字: ep_info
寄存器宽度( bits) : 8
属性: 只读, Bits4,3,2,1,0屏蔽
偏址: ‘h003
复位值: ‘h00
寄存器名字: cfg_bConfigurationValue
寄存器宽度( bits) : 8
属性: 读/写
偏址: ‘h004
复位值: ‘h00
寄存器名字: cfg_bmAttributes
寄存器宽度( bits) : 8
属性: Bit7: 只读
Bit6: 读/写, 屏蔽
Bit5: 读/写
Bits4-0: 保留
偏址: ‘h005
复位值: ‘h00
寄存器名字: dev_speed
寄存器宽度( bits) : 8
属性: Bits7-2: 保留
Bits1-0: 只读
偏址: ‘h006
复位值: ‘h00
寄存器名字: frame_number
寄存器宽度( bits) : 16
属性: 只读
偏址: ‘h00E(低位在’h00E,高位在’h00F)
复位值: ‘h0000
寄存器名字: ep_transaction0
寄存器宽度( bits) : 16
属性: 读/写
偏址: ‘h010(低位在’h010,高位在’h011)
复位值: ‘h0000
寄存器名字: ep_transaction1
寄存器宽度( bits) : 16
属性: 读/写
偏址: ‘h012(低位在’h012,高位在’h013)
复位值: ‘h0000
寄存器名字: app_ifUpdate
寄存器宽度( bits) : 16
属性: 只写
偏址: ‘h014
复位值: N/A
寄存器名字: cfg_interface0
寄存器宽度( bits) : 16
属性: 读/写
偏址: ‘h040
复位值: ‘h0000
寄存器名字: pkt_passed_ctr
寄存器宽度( bits) : 16
属性: 读/写
偏址: ‘h080(低位在’h080,高位在’h081)
复位值: ‘h0000
寄存器名字: pkt_dropped_ctr
寄存器宽度( bits) : 16
属性: 读/写
偏址: ‘h082(低位在’h082,高位在’h083)
复位值: ‘h0000
寄存器名字: crc_err_ctr
寄存器宽度( bits) : 16
属性: 读/写
偏址: ‘h084(低位在’h084,高位在’h085)
复位值: ‘h0000
寄存器名字: bitstuff_err_ctr
寄存器宽度( bits) : 16
属性: 读/写
偏址: ‘h086(低位在’h086,高位在’h087)
复位值: ‘h0000
寄存器名字: pid_err_ctr
寄存器宽度( bits) : 16
属性: 读/写
偏址: ‘h088(低位在’h088,高位在’h089)
复位值: ‘h0000
寄存器名字: framing_err_ctr
寄存器宽度( bits) : 16
属性: 读/写
偏址: ‘h08A(低位在’h08A,高位在’h08B)
复位值: ‘h0000
寄存器名字: txpkt_ctr
寄存器宽度( bits) : 16
属性: 读/写
偏址: ‘h08C(低位在’h08C,高位在’h08D)
复位值: ‘h0000
寄存器名字: stat_ctr_ov
寄存器宽度( bits) : 8
属性: 读/写
偏址: ‘h08E
复位值: ‘h00
USB的参数配置
它分为两部分:一是在coreConsultant工具中直接输入的数据, 另一是由coreConsultant 间接产生的数据。
一,直接数据:
Configurable Feature Options
————————————————————————————————
USB Data Rate Requirement full speed
PHY type classical (1.1)
Clock frequency ratio between DPLL and
other Classical core modules 1x
Number of concurrent interface per configuration 1
Number of additional IN endpoints
(Excluding default control endpoint 0) 1
Number of additional OUT endpoints
(Excluding default control endpoint 0) 1
Bandwidth-matching FIFO controller depth
(matches RAM depth) 128
Bandwidth-matching FIFO controller width
(matches application’s data port width) 16bits
Location of RAMs for bandwidth-matching FIFO
Controllers internal
Endpoint 0 maximum packet size 64bytes
Endpoint 1 IN transfer type bulk
Endpoint 1 OUT transfer type bulk
Endpoint 1 IN MaxPacketSize 8
Endpoint 1 OUT MaxPacketSize 8
Check to Enable Control-Endpoint Capabilities true
二, 间接数据:
fiforam_data_width 16 : RAM的数据宽度位16
fiforam_be_data_width 2 : 用以指示数据是否有效, 需要2个比特
fifo_addr_width 7 : RAM的寻址宽度
log2_fifo_depth 7
一些常量: (列出它们, 可能在软件编程的时候会用到)
a) Device State Machine(DSM)的状态定义:
DSM_ATTACHED 0
DSM_POWRED 1
DSM_DEFAULT 2
DSM_ADDRESS 3
DSM_CONFIGURED 4
DSM_NCSUSPEND 5
DSM_SUSPEND 6
b) 数据的PID定义:
D0_PID 4’b0001
D1_PID 4’b0010
D2_PID 4’b0100
MD_PID 4’b1000
c) 对被选择的控制命令回复寄存器的定义。NOTE: 这些代码由CSM产生, 由TSM读。
SELECT_NOTHING 0
SELECT_CONFIGURATION 1
SELECT_INTERFACE 2
SELECT_DEVICE_STATUS 3
SELECT_DEVICE_INTERFACE 4
SELECT_ENDPOINT_STATUS 5
SELECT_TEATURE_REMWKP 6
SELECT_T
展开阅读全文