16.USB控制器
16.1 USB控制器简介
CH559内嵌USB控制器和双USB收发器,特性如下:
- 支持USBHost主机功能和USBDevice设备功能;
- 支持USB2.0全速12Mbps或者低速1.5Mbps;
- 支持USB控制传输、批量传输、中断传输、同步/实时传输;
- USB主机模式下提供双端口Root-HUB,可以同时管理两个USB设备;
- 支持最大64字节的数据包,内置FIFO,支持中断和DMA。
CH559的USB相关寄存器分为3个部分,部分寄存器是在主机和设备模式下进行复用的。
- USB全局寄存器;
- USB设备控制器寄存器;
- USB主机控制器寄存器。
16.2 全局寄存器
表16.2.1 USB全局寄存器列表
| 名称 | 地址 | 描述 | 复位值 |
| USB_RX_LEN | D1h | USB接收长度寄存器(只读) | 0xxx xxxxb |
| USB_INT_FG | D8h | USB中断标志寄存器 | 0010 0000b |
| USB_INT_ST | D9h | USB中断状态寄存器(只读) | 00xx xxxxb |
| USB_MIS_ST | DAh | USB杂项状态寄存器(只读) | xx10 1000b |
| USB_INT_EN | E1h | USB中断使能寄存器 | 0000 0000b |
| USB_CTRL | E2h | USB控制寄存器 | 0000 0110b |
| USB_DEV_AD | E3h | USB设备地址寄存器 | 0000 0000b |
| USB_DMA_AH | E7h | DMA当前缓冲区地址高字节(只读) | 000x xxxxb |
| USB_DMA_AL | E6h | DMA当前缓冲区地址低字节(只读) | xxxx xxx0b |
| USB_DMA | E6h | USB_DMA_AL和USB_DMA_AH组成16位SFR | xxxxh |
USB接收长度寄存器(USB_RX_LEN):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| [7:0] | bUSB_RX_LEN | RO | 当前USB端点接收到的数据的字节数 | xxh |
USB中断标志寄存器(USB_INT_FG):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | U_IS_NAK | RO | USB设备模式下,该位为1表示当前USB传输过程中接收到NAK忙响应;该位为0表示接收到非NAK响应 | 0 |
| 6 | U_TOG_OK | RO | 当前USB传输DATA0/1同步标志匹配状态,该位为1表示同步,数据有效;该位为0表示不同步,数据可能无效 | 0 |
| 5 | U_SIE_FREE | RO | USB协议处理器的空闲状态位,该位为0表示忙,正在进行USB传输;该位为1表示USB空闲 | 1 |
| 4 | UIF_FIFO_OV | RW | USBFIFO溢出中断标志位,该位为1表示FIFO溢出中断;该位为0无中断。直接位写0清零或寄存器对应位写1清零 | 0 |
| 3 | UIF_HST_SOF | RW | USB主机模式下SOF定时中断标志位,该位为1表示SOF定时中断,该中断由SOF包传输完成触发;该位为0表示无中断。直接位写0清零或寄存器对应位写1清零 | 0 |
| 2 | UIF_SUSPEND | RW | USB总线挂起或唤醒事件中断标志位,该位为1表示有中断,该中断由USB挂起事件或唤醒事件触发;该位为0表示无中断。直接位写0清零或寄存器对应位写1清零 | 0 |
| 1 | UIF_TRANSFER | RW | USB传输完成中断标志位,该位为1表示有中断,该中断由一个USB传输完成触发;该位为0表示无中断。直接位写0清零或寄存器对应位写1清零 | 0 |
| 0 | UIF_DETECT | RW | USB主机模式下USB设备连接或断开事件中断标志位,该位为1表示有中断,该中断由检测到USB设备连接或断开触发;该位为0表示无中断。直接位写0清零或寄存器对应位写1清零 | 0 |
| 0 | UIF_BUS_RST | RW | USB设备模式下USB总线复位事件中断标志位,该位为1表示有中断,该中断由USB总线复位事件触发;该位为0表示无中断。直接位写0清零或寄存器对应位写1清零 | 0 |
USB中断状态寄存器(USB_INT_ST):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | bUIS_IS_NAK | RO | USB设备模式下,该位为1表示当前USB传输过程中接收到NAK忙响应。同U_IS_NAK | 0 |
| 6 | bUIS_TOG_OK | RO | 当前USB传输DATA0/1同步标志匹配状态,该位为1表示同步;该位为0表示不同步。同U_TOG_OK | 0 |
| 5 | bUIS_TOKEN1 | RO | 设备模式下当前USB传输事务的令牌PID标识高位 | x |
| 4 | bUIS_TOKEN0 | RO | 设备模式下当前USB传输事务的令牌PID标识低位 | x |
| [3:0] | MASK_UIS_ENDP | RO | USB设备模式下当前USB传输事务的端点号,0000表示端点0;…;1111表示端点15 | xxxxb |
| [3:0] | MASK_UIS_H_RES | RO | USB主机模式下当前USB传输事务的应答PID标识,0000表示设备无应答或超时;其它值表示应答PID | xxxxb |
bUIS_TOKEN1和bUIS_TOKEN0组成MASK_UIS_TOKEN,用于USB设备模式下标识当前USB传输事务的令牌PID:00表示OUT包;01表示SOF包;10表示IN包;11表示SETUP包。
USB杂项状态寄存器(USB_MIS_ST):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | bUMS_SOF_PRES | RO | USB主机模式下SOF包预示状态位,该位为1表示将要发送SOF包,此时如有其它USB数据包将被自动延后 | x |
| 6 | bUMS_SOF_ACT | RO | USB主机模式下SOF包传输状态,该位为1表示正在发出SOF包;该位为0表示发送完成或者空闲 | x |
| 5 | bUMS_SIE_FREE | RO | USB协议处理器的空闲状态位,该位为0表示忙,正在进行USB传输;该位为1表示USB空闲。同U_SIE_FREE | 1 |
| 4 | bUMS_R_FIFO_RDY | RO | USB接收FIFO数据就绪状态位,该位为0表示接收FIFO为空;该位为1表示接收FIFO非空 | 0 |
| 3 | bUMS_BUS_RESET | RO | USB总线复位状态位,该位为0表示当前没有USB总线复位;该位为1表示当前正在USB总线复位 | 1 |
| 2 | bUMS_SUSPEND | RO | USB挂起状态位,该位为0表示当前有USB活动;该位为1表示已经有一段时间没有USB活动,请求挂起 | 0 |
| 1 | bUMS_H1_ATTACH | RO | USB主机模式下HUB1端口的USB设备连接状态位,该位为1表示HUB1已经连接USB设备;该位为0表示没有 | 0 |
| 0 | bUMS_H0_ATTACH | RO | USB主机模式下HUB0端口的USB设备连接状态位,该位为1表示HUB0已经连接USB设备;该位为0表示没有 | 0 |
USB中断使能寄存器(USB_INT_EN):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | bUIE_DEV_SOF | RW | 该位为1使能USB设备模式接收SOF包中断;为0禁止 | 0 |
| 6 | bUIE_DEV_NAK | RW | 该位为1使能USB设备模式接收到NAK中断;为0禁止 | 0 |
| 5 | 保留 | RO | 保留 | 0 |
| 4 | bUIE_FIFO_OV | RW | 该位为1使能FIFO溢出中断;该位为0关闭使能 | 0 |
| 3 | bUIE_HST_SOF | RW | 该位为1使能USB主机模式SOF定时中断;为0禁止 | 0 |
| 2 | bUIE_SUSPEND | RW | 该位为1使能USB总线挂起或唤醒事件中断;为0禁止 | 0 |
| 1 | bUIE_TRANSFER | RW | 该位为1使能USB传输完成中断;该位为0禁止 | 0 |
| 0 | bUIE_DETECT | RW | 该位为1使能USB主机模式下USB设备连接或断开事件中断;该位为0禁止 | 0 |
| 0 | bUIE_BUS_RST | RW | 该位为1使能USB设备模式下USB总线复位事件中断;该位为0禁止 | 0 |
USB控制寄存器(USB_CTRL):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | bUC_HOST_MODE | RW | USB工作模式选择位,该位为0选择USB设备模式(DEVICE);该位为1选择USB主机模式(HOST) | 0 |
| 6 | bUC_LOW_SPEED | RW | USB总线信号传输速率选择位,该位为0选择全速12Mbps;该位为1选择低速1.5Mbps | 0 |
| 5 | bUC_DEV_PU_EN | RW | USB设备模式下USB设备使能和内部上拉电阻控制位,该位为1则使能USB设备传输并且启用内部上拉电阻 | 0 |
| 5 | bUC_SYS_CTRL1 | RW | USB系统控制高位 | 0 |
| 4 | bUC_SYS_CTRL0 | RW | USB系统控制低位 | 0 |
| 3 | bUC_INT_BUSY | RW | USB传输完成中断标志未清零前自动暂停使能位,该位为1则在中断标志UIF_TRANSFER未清零前自动暂停,对于设备模式将自动应答忙NAK,对于主机模式将自动暂停后续传输;该位为0则不暂停 | 0 |
| 2 | bUC_RESET_SIE | RW | USB协议处理器软件复位控制位,该位为1则强制复位USB协议处理器,需要软件清零 | 1 |
| 1 | bUC_CLR_ALL | RW | 该位为1清空USB中断标志和FIFO,需要软件清零 | 1 |
| 0 | bUC_DMA_EN | RW | 该位为1使能USB的DMA和DMA中断;为0关闭使能 | 0 |
由bUC_HOST_MODE、bUC_SYS_CTRL1和bUC_SYS_CTRL0组成USB系统控制组合:
| bUC_HOST_MODE | bUC_SYS_CTRL1 | bUC_SYS_CTRL0 | USB系统控制描述 |
| 0 | 0 | 0 | 禁止USB设备功能,关闭内部上拉电阻 |
| 0 | 0 | 1 | 使能USB设备功能,关闭内部上拉,需加外部上拉 |
| 0 | 1 | 0 | 使能USB设备功能,启用内部上拉电阻 |
| 0 | 1 | 1 | 使能USB设备功能,启用内部弱上拉电阻 |
| 1 | 0 | 0 | 选择USB主机模式,正常工作状态 |
| 1 | 0 | 1 | 选择USB主机模式,强制DP/DM输出SE0状态 |
| 1 | 1 | 0 | 选择USB主机模式,强制DP/DM输出J状态 |
| 1 | 1 | 1 | 选择USB主机模式,强制DP/DM输出K状态/唤醒 |
USB设备地址寄存器(USB_DEV_AD):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | bUDA_GP_BIT | RW | USB通用标志位:使用者可自定义,可软件清零或置位 | 0 |
| [6:0] | MASK_USB_ADDR | RW | 主机模式下是当前操作的USB设备的地址;设备模式下是该USB设备的地址 | 00h |
DMA当前缓冲区地址寄存器(USB_DMA):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| [7:0] | USB_DMA_AH | RO | DMA当前缓冲区地址高字节,仅低5位有效,高3位固定为0 | xxh |
| [7:0] | USB_DMA_AL | RO | DMA当前缓冲区地址低字节 | xxh |
16.3 设备寄存器
在USB设备模式下CH559提供了端点0、1、2、3、4共5组双向端点,所有端点的最大数据包长度都是64字节。
端点0是默认端点,支持控制传输,发送和接收共用一个64字节数据缓冲区。
端点1、端点2、端点3各包括一个发送端点IN和一个接收端点OUT,发送和接收各有一个独立的64字节或者双64字节数据缓冲区,支持控制传输、批量传输、中断传输和实时/同步传输。
端点4包括一个发送端点IN和一个接收端点OUT,发送和接收各有一个独立的64字节数据缓冲区,支持控制传输、批量传输、中断传输和实时/同步传输。
每组端点都具有一个控制寄存器UEPn_CTRL和发送长度寄存器UEPn_T_LEN(n=0/1/2/3/4),用于设定该端点的同步触发位、对OUT事务和IN事务的响应以及发送数据的长度等。
作为USB设备所必要的USB总线上拉电阻可以由软件随时设置是否启用,当USB控制寄存器USB_CTRL中的bUC_DEV_PU_EN置1时,CH559根据bUD_LOW_SPEED在内部为USB总线的DP引脚或者DM引脚连接上拉电阻,并启用USB设备功能。
当检测到USB总线复位、USB总线挂起或唤醒事件,或者当USB成功处理完数据发送或者数据接收后,USB协议处理器都将设置相应的中断标志并产生中断请求。应用程序可以直接查询或在USB中断服务程序中查询并分析中断标志寄存器USB_INT_FG,根据UIF_BUS_RST和UIF_SUSPEND进行相应的处理;并且,如果UIF_TRANSFER有效,那么还需要继续分析USB中断状态寄存器USB_INT_ST,根据当前端点号MASK_UIS_ENDP和当前事务令牌PID标识MASK_UIS_TOKEN进行相应的处理。如果事先设定了各个端点的OUT事务的同步触发位bUEP_R_TOG,那么可以通过U_TOG_OK或bUIS_TOG_OK判断当前所接收到的数据包的同步触发位是否与该端点的同步触发位匹配,如果数据同步,则数据有效;如果数据不同步,则数据应该被丢弃。每次处理完USB发送或者接收中断后,都应该正确修改相应端点的同步触发位,用于同步下次所发送的数据包和检测下次所接收的数据包是否同步;另外,通过设置bUEP_AUTO_TOG可以实现在发送成功或者接收成功后自动翻转相应的同步触发位。
各个端点准备发送的数据在各自的缓冲区中,准备发送的数据长度是独立设定在UEPn_T_LEN中;各个端点接收到的数据在各自的缓冲区中,但是接收到的数据长度都在USB接收长度寄存器USB_RX_LEN中,可以在USB接收中断时根据当前端点号区分。
表16.3.1 USB设备相关寄存器列表
| 名称 | 地址 | 描述 | 复位值 |
| UEP1_CTRL | D2h | 端点1控制寄存器 | 0000 0000b |
| UEP1_T_LEN | D3h | 端点1发送长度寄存器 | 0xxx xxxxb |
| UEP2_CTRL | D4h | 端点2控制寄存器 | 0000 0000b |
| UEP2_T_LEN | D5h | 端点2发送长度寄存器 | 0000 0000b |
| UEP3_CTRL | D6h | 端点3控制寄存器 | 0000 0000b |
| UEP3_T_LEN | D7h | 端点3发送长度寄存器 | 0xxx xxxxb |
| UEP0_CTRL | DCh | 端点0控制寄存器 | 0000 0000b |
| UEP0_T_LEN | DDh | 端点0发送长度寄存器 | 0xxx xxxxb |
| UEP4_CTRL | DEh | 端点4控制寄存器 | 0000 0000b |
| UEP4_T_LEN | DFh | 端点4发送长度寄存器 | 0xxx xxxxb |
| UDEV_CTRL | E4h | USB设备物理端口控制寄存器 | 0100 x000b |
| UEP4_1_MOD | 2446h | 端点1、4模式控制寄存器 | 0000 0000b |
| UEP2_3_MOD | 2447h | 端点2、3模式控制寄存器 | 0000 0000b |
| UEP0_DMA_H | 2448h | 端点0和4缓冲区起始地址高字节 | 000x xxxxb |
| UEP0_DMA_L | 2449h | 端点0和4缓冲区起始地址低字节 | xxxx xxx0b |
| UEP0_DMA | 2448h | UEP0_DMA_L和UEP0_DMA_H组成16位SFR | xxxxb |
| UEP1_DMA_H | 244Ah | 端点1缓冲区起始地址高字节 | 000x xxxxb |
| UEP1_DMA_L | 244Bh | 端点1缓冲区起始地址低字节 | xxxx xxxxb |
| UEP1_DMA | 244Ah | UEP1_DMA_L和UEP1_DMA_H组成16位SFR | xxxxb |
| UEP2_DMA_H | 244Ch | 端点2缓冲区起始地址高字节 | 000x xxxxb |
| UEP2_DMA_L | 244Dh | 端点2缓冲区起始地址低字节 | xxxx xxx0b |
| UEP2_DMA | 244Ch | UEP2_DMA_L和UEP2_DMA_H组成16位SFR | xxxxb |
| UEP3_DMA_H | 244Eh | 端点3缓冲区起始地址高字节 | 000x xxxxb |
| UEP3_DMA_L | 244Fh | 端点3缓冲区起始地址低字节 | xxxx xxx0b |
| UEP3_DMA | 244Eh | UEP3_DMA_L和UEP3_DMA_H组成16位SFR | xxxxb |
| pUEP* | 254*h | 在bXIR_XSFR置1后,该名称用于以pdata类型寻址上述xSFR,比xdata类型寻址更快捷 | |
端点n控制寄存器(UEPn_CTRL):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | bUEP_R_TOG | RW | USB端点n的接收器(处理SETUP/OUT事务)期望的同步触发位,该位为0表示期望DATA0;为1表示期望DATA1 | 0 |
| 6 | bUEP_T_TOG | RW | USB端点n的发送器(处理IN事务)准备的同步触发位,该位为0表示发送DATA0;为1表示发送DATA1 | 0 |
| 5 | 保留 | RO | 保留 | 0 |
| 4 | bUEP_AUTO_TOG | RW | 同步触发位自动翻转使能控制位,该位为1表示在发送成功或接收成功后自动翻转相应的同步触发位;为0表示不自动翻转,但可以手动切换。只支持端点1/2/3 | 0 |
| 3 | bUEP_R_RES1 | RW | 端点n的接收器对SETUP/OUT事务的响应控制高位 | 0 |
| 2 | bUEP_R_RES0 | RW | 端点n的接收器对SETUP/OUT事务的响应控制低位 | 0 |
| 1 | bUEP_T_RES1 | RW | 端点n的发送器对IN事务的响应控制高位 | 0 |
| 0 | bUEP_T_RES0 | RW | 端点n的发送器对IN事务的响应控制低位 | 0 |
由bUEP_R_RES1和bUEP_R_RES0组成的MASK_UEP_R_RES用于控制端点n的接收器对SETUP/OUT事务的响应方式:00表示应答ACK或就绪;01表示超时/无响应,用于实现非端点0的实时/同步传输;10表示应答NAK或忙;11表示应答STALL或错误。
由bUEP_T_RES1和bUEP_T_RES0组成的MASK_UEP_T_RES用于控制端点n的发送器对IN事务的响应方式:00表示应答DATA0/DATA1或数据就绪并期望ACK;01表示应答DATA0/DATA1并期望无响应,用于实现非端点0的实时/同步传输;10表示应答NAK或忙;11表示应答STALL或错误。
端点n发送长度寄存器(UEPn_T_LEN):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| [7:0] | bUEPn_T_LEN | RW | 设置USB端点n准备发送的数据字节数(n=0/1/3/4) | xxh |
| bUEP2_T_LEN | 设置USB端点2准备发送的数据字节数 | 00h |
USB设备物理端口控制寄存器(UDEV_CTRL):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | 保留 | RO | 保留 | 0 |
| 6 | bUD_RECV_DIS | RW | USB设备物理端口接收器禁用位,该位为1禁用接收器,没有静态功耗;该位为0使能接收器,产生静态功耗 | 1 |
| 5 | bUD_DP_PD_DIS | RW | USB设备端口DP引脚内部下拉电阻禁用位,该位为1禁用内部下拉电阻;该位为0使能DP内部下拉电阻 | 0 |
| 4 | bUD_DM_PD_DIS | RW | USB设备端口DM引脚内部下拉电阻禁用位,该位为1禁用内部下拉电阻;该位为0使能DM内部下拉电阻 | 0 |
| 3 | bUD_DIFF_IN | R0 | 当前DP和DM引脚之间的差分输入状态 | x |
| 2 | bUD_LOW_SPEED | RW | USB设备物理端口低速模式使能位,该位为1选择1.5Mbps低速模式;该位为0选择12Mbps全速模式 | 0 |
| 1 | bUD_GP_BIT | RW | USB设备模式通用标志位:使用者可自己定义,可软件清零或置位 | 0 |
| 0 | bUD_PORT_EN | RW | USB设备物理端口使能位,该位为1使能物理端口;该位为0禁用物理端口 | 0 |
USB端点1、4模式控制寄存器(UEP4_1_MOD):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | bUEP1_RX_EN | RW | 该位为0禁止端点1接收;为1使能端点1接收(OUT) | 0 |
| 6 | bUEP1_TX_EN | RW | 该位为0禁止端点1发送;为1使能端点1发送(IN) | 0 |
| 5 | 保留 | RO | 保留 | 0 |
| 4 | bUEP1_BUF_MOD | RW | 端点1数据缓冲区模式控制位 | 0 |
| 3 | bUEP4_RX_EN | RO | 该位为0禁止端点4接收;为1使能端点4接收(OUT) | 0 |
| 2 | bUEP4_TX_EN | RW | 该位为0禁止端点4发送;为1使能端点4发送(IN) | 0 |
| [1:0] | 保留 | RO | 保留 | 00b |
由bUEP4_RX_EN和bUEP4_TX_EN组合控制USB端点0和4的数据缓冲区模式,参考下表。
表16.3.2 端点0和4缓冲区模式
| bUEP4_RX_EN | bUEP4_TX_EN | 结构描述:以UEP0_DMA为起始地址由低向高排列 |
| 0 | 0 | 端点0单64字节收发共用缓冲区(IN和OUT) |
| 1 | 0 | 端点0单64字节收发共用缓冲区;端点4单64字节接收缓冲区(OUT) |
| 0 | 1 | 端点0单64字节收发共用缓冲区;端点4单64字节发送缓冲区(IN) |
| 1 | 1 | 端点0单64字节收发共用缓冲区;端点4单64字节接收缓冲区(OUT);端点4单64字节发送缓冲区(IN)。全部192字节排列如下: UEP0_DMA+0地址:端点0收发共用; UEP0_DMA+64地址:端点4接收; UEP0_DMA+128地址:端点4发送 |
USB端点2、3模式控制寄存器(UEP2_3_MOD):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | bUEP3_RX_EN | RW | 该位为0禁止端点3接收;为1使能端点3接收(OUT) | 0 |
| 6 | bUEP3_TX_EN | RW | 该位为0禁止端点3发送;为1使能端点3发送(IN) | 0 |
| 5 | 保留 | RO | 保留 | 0 |
| 4 | bUEP3_BUF_MOD | RW | 端点3数据缓冲区模式控制位 | 0 |
| 3 | bUEP2_RX_EN | RO | 该位为0禁止端点2接收;为1使能端点2接收(OUT) | 0 |
| 2 | bUEP2_TX_EN | RW | 该位为0禁止端点2发送;为1使能端点2发送(IN) | 0 |
| 1 | 保留 | RO | 保留 | 0 |
| 0 | bUEP2_BUF_MOD | RW | 端点2数据缓冲区模式控制位 | 0 |
由bUEPn_RX_EN和bUEPn_TX_EN以及bUEPn_BUF_MOD(n=1/2/3)组合分别控制USB端点1、2、3的数据缓冲区模式,参考下表。其中的双64字节缓冲区模式,USB数据传输时将根据bUEP_*_TOG=0选择前64字节缓冲区,根据bUEP_*_TOG=1选择后64字节缓冲区,实现自动切换。
表16.3.3 端点n缓冲区模式(n=1/2/3)
| bUEPn_RX_EN | bUEPn_TX_EN | bUEPn_BUF_MOD | 结构描述:以UEPn_DMA为起始地址由低向高排列 |
| 0 | 0 | x | 端点被禁用,未用到UEPn_DMA缓冲区 |
| 1 | 0 | 0 | 单64字节接收缓冲区(OUT) |
| 1 | 0 | 1 | 双64字节接收缓冲区,通过bUEP_R_TOG选择 |
| 0 | 1 | 0 | 单64字节发送缓冲区(IN) |
| 0 | 1 | 1 | 双64字节发送缓冲区,通过bUEP_T_TOG选择 |
| 1 | 1 | 0 | 单64字节接收缓冲区;单64字节发送缓冲区 |
| 1 | 1 | 1 | 双64字节接收缓冲区,通过bUEP_R_TOG选择;双64字节发送缓冲区,通过bUEP_T_TOG选择。 全部256字节排列如下: UEPn_DMA+0地址:bUEP_R_TOG=0时端点接收; UEPn_DMA+64地址:bUEP_R_TOG=1时端点接收; UEPn_DMA+128地址:bUEP_T_TOG=0时端点发送; UEPn_DMA+192地址:bUEP_T_TOG=1时端点发送 |
USB端点n缓冲区起始地址(UEPn_DMA)(n=0/1/2/3):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| [7:0] | UEPn_DMA_H | RW | 端点n缓冲区起始地址高字节,仅低5位有效,高3位固定为0 | xxh |
| [7:0] | UEPn_DMA_L | RW | 端点n缓冲区起始地址低字节,仅高7位有效,最低位固定为0,仅支持偶地址 | xxh |
注:接收数据的缓冲区的长度>=min(可能接收到的最大数据包长度+2字节,64字节)
16.4 主机寄存器
在USB主机模式下CH559提供了一组双向主机端点,包括一个发送端点OUT和一个接收端点IN,数据包的最大长度是64字节,支持控制传输、批量传输、中断传输和实时/同步传输。
由主机端点发起的每一个USB事务,在处理结束后总是自动设置中断标志UIF_TRANSFER。应用程序可以直接查询或在USB中断服务程序中查询并分析中断标志寄存器USB_INT_FG,根据各中断标志分别进行相应的处理;并且,如果UIF_TRANSFER有效,那么还需要继续分析USB中断状态寄存器USB_INT_ST,根据当前USB传输事务的应答PID标识MASK_UIS_H_RES进行相应的处理。
如果事先设定了主机接收端点的IN事务的同步触发位bUH_R_TOG,那么可以通过U_TOG_OK或bUIS_TOG_OK判断当前所接收到的数据包的同步触发位是否与主机接收端点的同步触发位匹配,如果数据同步,则数据有效;如果数据不同步,则数据应该被丢弃。每次处理完USB发送或者接收中断后,都应该正确修改相应主机端点的同步触发位,用于同步下次所发送的数据包和检测下次所接收的数据包是否同步;另外,通过设置bUEP_AUTO_TOG可以实现在发送成功或者接收成功后自动翻转相应的同步触发位。
USB主机令牌设置寄存器UH_EP_PID是对USB设备模式下的USB端点1控制寄存器的复用,用于设置被操作的目标设备的端点号和本次USB传输事务的令牌PID包标识。SETUP令牌和OUT令牌所对应的数据由主机发送端点提供,准备发送的数据在UH_TX_DMA缓冲区中,准备发送的数据长度设置在UH_TX_LEN中;IN令牌所对应的数据由目标设备返回给主机接收端点,接收到的数据存放在UH_RX_DMA缓冲区中,接收到的数据长度存放在USB_RX_LEN中。
表16.4.1 USB主机相关寄存器列表
| 名称 | 地址 | 描述 | 复位值 |
| UH_SETUP | D2h | USB主机辅助设置寄存器 | 0000 0000b |
| UH_RX_CTRL | D4h | USB主机接收端点控制寄存器 | 0000 0000b |
| UH_EP_PID | D5h | USB主机令牌设置寄存器 | 0000 0000b |
| UH_TX_CTRL | D6h | USB主机发送端点控制寄存器 | 0000 0000b |
| UH_TX_LEN | D7h | USB主机发送长度寄存器 | 0xxx xxxxb |
| USB_HUB_ST | DBh | USB主机HUB端口状态寄存器(只读) | 0000 0000b |
| UHUB0_CTRL | E4h | USB主机HUB0端口控制寄存器 | 0100 x000b |
| UHUB1_CTRL | E5h | USB主机HUB1端口控制寄存器 | 1100 x000b |
| UH_EP_MOD | 2447h | USB主机端点模式控制寄存器 | 0000 0000b |
| UH_RX_DMA_H | 244Ch | USB主机接收缓冲区起始地址高字节 | 000x xxxxb |
| UH_RX_DMA_L | 244Dh | USB主机接收缓冲区起始地址低字节 | xxxx xxx0b |
| UH_RX_DMA | 244Ch | UH_RX_DMA_L和UH_RX_DMA_H组成16位SFR | xxxxh |
| UH_TX_DMA_H | 244Eh | USB主机发送缓冲区起始地址高字节 | 000x xxxxb |
| UH_TX_DMA_L | 244Fh | USB主机发送缓冲区起始地址低字节 | xxxx xxx0b |
| UH_TX_DMA | 244Eh | UH_TX_DMA_L和UH_TX_DMA_H组成16位SFR | xxxxh |
| pUH_* | 254*h | 在bXIR_XSFR置1后,该名称用于以pdata类型寻址上述xSFR,比xdata类型寻址更快捷 |
USB主机辅助设置寄存器(UH_SETUP):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | bUH_PRE_PID_EN | RW | 低速前导包PREPID使能位,该位为1使能USB主机通过外部HUB与低速USB设备通讯;为0禁用低速前导包,USB主机与低速USB设备之间不能有HUB | 0 |
| 6 | bUH_SOF_EN | RW | 自动产生SOF包使能位,该位为1由USB主机自动产生SOF包;为0不自动产生,但可以手工产生 | 0 |
| [5:0] | 保留 | RO | 保留 | 00h |
USB主机接收端点控制寄存器(UH_RX_CTRL):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | bUH_R_TOG | RW | USB主机接收器(处理IN事务)期望的同步触发位,该位为0表示期望DATA0;为1表示期望DATA1 | 0 |
| [6:5] | 保留 | RO | 保留 | 00b |
| 4 | bUH_R_AUTO_TOG | RW | 自动翻转bUH_R_TOG使能控制位,该位为1表示在USB主机接收成功后自动翻转bUH_R_TOG标志;为0表示不自动翻转,但可以手动切换 | 0 |
| 3 | 保留 | RO | 保留 | 0 |
| 2 | bUH_R_RES | RW | USB主机接收器对IN事务的响应控制位,为0表示应答ACK或就绪;为1表示无响应,用于与目标设备的非端点0进行实时/同步传输 | 0 |
| [1:0] | 保留 | RO | 保留 | 00b |
USB主机令牌设置寄存器(UH_EP_PID):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| [7:4] | MASK_UH_TOKEN | RW | 设置本次USB传输事务的令牌PID包标识 | 0000b |
| [3:0] | MASK_UH_ENDP | RW | 设置本次被 | 0000b |
USB主机发送端点控制寄存器(UH_TX_CTRL):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | 保留 | RO | 保留 | 0 |
| 6 | bUH_T_TOG | RW | USB主机发送器(处理SETUP/OUT事务)准备的同步触发位,该位为0表示发送DATA0;为1表示发送DATA1 | 0 |
| 5 | 保留 | RO | 保留 | 0 |
| 4 | bUH_T_AUTO_TOG | RW | 自动翻转bUH_T_TOG使能控制位,该位为1表示在USB主机发送成功后自动翻转bUH_T_TOG标志;为0表示不自动翻转,但可以手动切换 | 0 |
| [3:1] | 保留 | RO | 保留 | 000b |
| 0 | bUH_T_RES | RW | USB主机发送器对SETUP/OUT事务的响应控制位,为0表示期望应答ACK或就绪;为1表示期望无响应,用于与目标设备的非端点0进行实时/同步传输 | 0 |
USB主机发送长度寄存器(UH_TX_LEN):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| [7:0] | UH_TX_LEN | RW | 设置USB主机发送端点准备发送的数据字节数 | xxh |
USB主机HUB端口状态寄存器(USB_HUB_ST):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | bUHS_H1_ATTACH | RO | HUB1端口的USB设备连接状态位,该位为1表示HUB1已经连接USB设备;该位为0表示没有。同bUMS_H1_ATTACH | 0 |
| 6 | bUHS_HM_LEVEL | RO | 记录USB设备刚连接到HUB1端口时的HM引脚的状态,为0表示低电平;为1表示高电平。用于判断全速或低速 | 0 |
| 5 | bUHS_HP_PIN | RO | 当前HP引脚状态,为0表示低电平;为1表示高电平 | 0 |
| 4 | bUHS_HM_PIN | RO | 当前HM引脚状态,为0表示低电平;为1表示高电平 | 0 |
| 3 | bUHS_H0_ATTACH | RO | HUB0端口的USB设备连接状态位,该位为1表示HUB0已经连接USB设备;该位为0表示没有。同bUMS_H0_ATTACH | 0 |
| 2 | bUHS_DM_LEVEL | RO | 记录USB设备刚连接到HUB0端口时的DM引脚的状态,为0表示低电平;为1表示高电平。用于判断全速或低速 | 0 |
| 1 | bUHS_DP_PIN | RO | 当前DP引脚状态,为0表示低电平;为1表示高电平 | 0 |
| 0 | bUHS_DM_PIN | RO | 当前DM引脚状态,为0表示低电平;为1表示高电平 | 0 |
USB主机HUBn端口控制寄存器(UHUBn_CTRL)(n=0、1):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | 保留 | RO | 对于UHUB0_CTRL是保留 | 1 |
| 7 | bUH1_DISABLE | RW | 对于UHUB1_CTRL是USB主机HUB1端口引脚禁用位,该位为1禁用HP/HM引脚,释放P5.5/P5.4将用于其它功能;该位为0使能P5.5/P5.4作为HP/HM用于HUB1端口 | 1 |
| 6 | bUH_RECV_DIS | RW | USB主机HUBn端口接收器禁用位,该位为1禁用接收器,没有静态功耗;该位为0使能接收器,产生静态功耗 | 1 |
| 5 | bUH_DP_PD_DIS | RW | USB主机HUBn端口DP/HP引脚内部下拉电阻禁用位,该位为1禁用内部下拉电阻;该位为0使能内部下拉电阻 | 0 |
| 4 | bUH_DM_PD_DIS | RW | USB主机HUBn端口DM/HM引脚内部下拉电阻禁用位,该位为1禁用内部下拉电阻;该位为0使能内部下拉电阻 | 0 |
| 3 | bUH_DIFF_IN | R0 | 对于UHUB0_CTRL是当前DP和DM引脚之间的差分输入状态对于UHUB1_CTRL是当前HP和HM引脚之间的差分输入状态 | x |
| 2 | bUH_LOW_SPEED | RW | USB主机HUBn端口低速模式使能位,该位为1选择1.5Mbps低速模式;该位为0选择12Mbps全速模式 | 0 |
| 1 | bUH_BUS_RESET | RW | USB主机HUBn端口总线复位控制位,该位为1强制HUBn端口输出USB总线复位;该位为0结束输出 | 0 |
| 0 | bUH_PORT_EN | RW | USB主机HUBn端口使能位,该位为0禁用HUBn端口;该位为1使能HUBn端口。当USB设备断开连接时该位自动清零 | 0 |
USB主机端点模式控制寄存器(UH_EP_MOD):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| 7 | 保留 | RO | 保留 | 0 |
| 6 | bUH_EP_TX_EN | RW | 该位为0禁止USB主机发送端点发送数据;该位为1使能USB主机发送端点发送数据(SETUP/OUT) | 0 |
| 5 | 保留 | RO | 保留 | 0 |
| 4 | bUH_EP_TBUF_MOD | RW | USB主机发送端点数据缓冲区模式控制位 | 0 |
| 3 | bUH_EP_RX_EN | RO | 该位为0禁止USB主机接收端点接收数据;该位为1使能USB主机接收端点接收数据(IN) | 0 |
| [2:1] | 保留 | RO | 保留 | 00b |
| 0 | bUH_EP_RBUF_MOD | RW | USB主机接收端点数据缓冲区模式控制位 | 0 |
由bUH_EP_TX_EN和bUH_EP_TBUF_MOD组合控制USB主机发送端点数据缓冲区模式,参考下表。
表16.4.2 主机发送缓冲区模式
| bUH_EP_TX_EN | bUH_EP_TBUF_MOD | 结构描述:以UH_TX_DMA为起始地址 |
| 0 | x | 端点被禁用,未用到UH_TX_DMA缓冲区 |
| 1 | 0 | 单64字节发送缓冲区(SETUP/OUT) |
| 1 | 1 | 双64字节发送缓冲区,通过bUH_T_TOG选择:当bUH_T_TOG=0时选择前64字节缓冲区;当bUH_T_TOG=1时选择后64字节缓冲区 |
由bUH_EP_RX_EN和bUH_EP_RBUF_MOD组合控制USB主机接收端点数据缓冲区模式,参考下表。
表16.4.3 主机接收缓冲区模式
| bUH_EP_RX_EN | bUH_EP_RBUF_MOD | 结构描述:以UH_RX_DMA为起始地址 |
| 0 | x | 端点被禁用,未用到UH_RX_DMA缓冲区 |
| 1 | 0 | 单64字节接收缓冲区(IN) |
| 1 | 1 | 双64字节接收缓冲区,通过bUH_R_TOG选择:当bUH_R_TOG=0时选择前64字节缓冲区;当bUH_R_TOG=1时选择后64字节缓冲区 |
USB主机接收缓冲区起始地址(UH_RX_DMA):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| [7:0] | UH_TX_DMA_H | RW | USB主机接收缓冲区起始地址高字节,仅低5位有效,高3位固定为0 | xxh |
| [7:0] | UH_TX_DMA_L | RW | USB主机接收缓冲区起始地址低字节,仅高7位有效,最低位固定为0,仅支持偶地址 | xxh |
USB主机接发送冲区起始地址(UH_TX_DMA):
| 位 | 名称 | 访问 | 描述 | 复位值 |
| [7:0] | UH_TX_DMA_H | RW | USB主机发送缓冲区起始地址高字节,仅低5位有效,高3位固定为0 | xxh |
| [7:0] | UH_TX_DMA_L | RW | USB主机发送缓冲区起始地址低字节,仅高7位有效,最低位固定为0,仅支持偶地址 | xxh |