Mentor USB Controller系列之寄存器解析

2023-12-25 11:25:28

系列文章目录


第一章 寄存器解析


文章目录

前言

一、寄存器

1.1 寄存器总表

1.1.1 FADDR

1.1.2 POWER

1.1.3 INTRTX

1.1.4 INTRRX

1.1.5?INTRTXE

1.1.6 INTRRXE

1.1.7?INTRUSB

1.1.8 INTRUSBE

1.1.9?FRAME

1.1.10?Index

1.1.11?testmode

1.1.12?Devctl

1.2.1?CSR0

1.2.2?COUNT0

1.2.3 NAKLIMIT0

1.2.4 TXMAXP

1.2.5?TXCSR

1.2.6?RXMAXP

1.2.7?RXCSR

1.2.8?RXCOUNT

1.2.9?TXTYPE

1.2.9 RXTYPE

1.2.10?FIFOSIZE

1.3.1 动态?FIFO配置

总结



前言

? ? ? ?要想深入理解并灵活运行mentor提供的这套controller,需要我们对里面的每个寄存器都深入理解。本文详细解释了每个寄存器以及使用方法和注意事项。


提示:以下是本篇文章正文内容,下面案例可供参考

一、寄存器

1.1 寄存器总表
Mentor USB controller寄存器总表
ADDRname描述其他
00Faddr功能地址寄存器
01powerpower管理寄存器
02.03IntrTX中断寄存器endpoint0以及TX endpoint1到15
04.05IntrRx中断寄存器 RX endpoint1到15
06.07IntrTxETX的中断使能
08.09IntrRxERX的中断使能
0aIntrUSBcommon usb 中断
0bIntrUSBEcommon usb中断使能
0c.0dFrame帧number
0eindexindex寄存器
0ftestmodeenable the usb 2.0 test modes
10.11TxMaxPTX endpoint1-15的最大包长
12.13CSR0endpoint0的控制状态寄存器
TxCSRTX endpoint1-15的控制状态寄存器
14.15RxMaxPRX endpoint1-15的最大包长
16.17RxCSRRX endpoint1-15的控制状态寄存器
18.19Count0endpoint0 fifo接收的byte数
RxCountendpoint1-15 fifo接收的byte数
1aTxTpyeTX endpoint的传输包类型以及使用的endpoint1-15只有host
1bNAKL设置no ack响应只有host
1cRxTypeRX endpoint的传输包类型以及使用的endpoint1-15
1d
20-5FFIFOsendpoint0-15的fifo地址
60DevCtlOTG device相关的配置
62Txfifosztx endpoint fifo大小
63Rxfifoszrx endpoint fifo大小
64.65Txfifoaddtx endpoint fifo address
66.67Rxfifoaddrx endpoint fifo address

1.1.1 FADDR

bitnamefunction
D7-reserved
D6-D0func addrthe function address

作为host:需要在set address过程中通过设置该寄存器来选中device

作为device:需要根据set address过程接收到的function address来更新该地址,作为后续接收包的mapping地址

1.1.2 POWER
D7ISO update
D6soft conn

device cpu设置,建立连接,配置该bit为1

后,USB的DP/DM lines会被enabled,配置该bit为0,DP/DM就会变成三态

D5HS enableCPU配置,HS使能控制
D4HS modeCPU只读,表示当前处于HS模式
D3Resethost CPU设置,表示发送reset,拉高一段时间后CPU拉低
D2ResumeCPU配置,用于主动唤醒suspendm
D1

suspend

mode

host:软件配置进入suspendm

device:硬件根据DP/DM进suspend,CPU只读

D0

suspend mode

enable

CPU配置是否运行进suspendm

1.1.3 INTRTX

D15-

D4

...
D3EP3 TxTx endpoint 3对应的中断所有端点3的TxCSR里面的merge结果
D2EP2 TxTx endpoint 2对应的中断所有端点2的TxCSR里面的merge结果
D1EP1 TxTx endpoint 1对应的中断所有端点1的TxCSR里面的merge结果
D0EP0endpoint0对应的中断所有端点0 merge的结果

1.1.4 INTRRX

D15-

D4

...
D3EP3 RxRx endpoint 3对应的中断所有端点3的RxCSR里面的merge结果
D2EP2 RxRx endpoint 2对应的中断所有端点2的RxCSR里面的merge结果
D1EP1 RxRx endpoint 1对应的中断所有端点1的RxCSR里面的merge结果
D0

1.1.5?INTRTXE

D15-

D4

...
D3EP3 TxTx endpoint 3对应的中断使能
D2EP2 TxTx endpoint 2对应的中断使能
D1EP1 TxTx endpoint 1对应的中断使能
D0EP0endpoint0对应的中断使能

1.1.6 INTRRXE

D15-

D4

...
D3EP3 RxRx endpoint 3对应的中断使能
D2EP2 RxRx endpoint 2对应的中断使能
D1EP1 RxRx endpoint 1对应的中断使能
D0

1.1.7?INTRUSB

8bit只读的common中断状态,读清

D7Vbus Error
D6Sess Req只有host有效,表示检测到session 请求
D5discon

host:检测到device断开了

device:当一个session结束,即session电压降到?

D4conn只有host,当检测到device连接上
D3sof每帧都会产生,表示有帧头信息
D2

reset

babble

host:??

device:检测到host发送过来的reset

D1resume在suspendm模式下检测到resume事件
D0suspend只有device:检测到bus上有suspendm

1.1.8 INTRUSBE
D7Vbus Error中断使能
D6Sess Req中断使能
D5discon中断使能
D4conn中断使能
D3sof中断使能
D2

reset

babble

中断使能
D1resume中断使能
D0suspend中断使能

1.1.9?FRAME

? ?CPU只读寄存器

D10-D0frame num表示上一次接收到的帧号

1.1.10?Index

? ?每一个TX/RX endpoint除了有一套共用的寄存器,他们还有各个独立的控制和状态寄存器,再使用各自独立的寄存器时,可以先set index,表示选择当前endpoint,进行后续配置。

D10-D0frame num表示上一次接收到的帧号

1.1.11?testmode

1.1.12?Devctl
D7B-device指示是host还是devicecpu RO
D6FSdev

只有host:指示是否有HS/FS设备接入,进一步区分HS/FS需要

靠chirpK

cpu RO
D5LSdev只有host:指示是否有LS设备接入cpu RO
D4-D3VBUS

指示当前VBUS处于什么电位

00:VBUS below sessionend

01:above sessionend,below Avalid

10:above avalid,below VBUS valid

11:above VBUS valid

cpu RO
D2

Host?

Mode

指示当前处于host模式cpu RO
D1

Host

Req

OTG功能进行HNP协议时,device发送请求host身份cpu RW
D0session

host:CPU来配置开启session

device:USB controller硬件根据session start/end来更新该bit

cpu RW

以下都是index的寄存器:就是配置端点时用各个的寄存器,而非common寄存器。

1.2.1?CSR0

专门为endpoint0提供控制和状态寄存器。

下表为Device端看到的寄存器:

D8FlushFifoCPU写1来清除待发送的数据
D7

serviced

SetupEnd

清D4,该bit硬件自清
D6

serviced

RxPktRdy

清D0,该bit硬件自清
D5SendStallCPU写该bit来终止当前的传输,该bit硬件自清
D4SetupEnd

当发送完控制包后,在发送D3之前,该bit由硬件置位?

此时会产生中断并flush掉fifo,CPU通过写D7来清除该bit

D3DataEnd

三种场景需要CPU设置该bit:

1. 当为最后一笔data包设置txpktrdy时

2. 当取走最后一笔data包清除rxpktrdy时

3. 为0长度的data包设置txpktrdy时

该bit硬件自清
D2SentStall??
D1TxPktRdy

cpu填完tx fifo后设置该bit开始发,发完并收到ack后硬件清掉,

同时产生中断

D0RxPktRdy当收到data包时置1,同时会产生中断,CPU写D6清该bit

下表为Host端看到的寄存器:

D11dis pingcpu通过该bit来控制在HS下在发送data包前,不要发布ping包
D10-D9
D8FlushFifoCPU写1来清除待发送的数据
D7NAK timeout接收不到ack会置位该bit,CPU清,有个专门的timeout寄存器配置时长
D6statuspkt用于发送DATA1包,需要CPU同时置txpktrdy和reqpkt
D5ReqPkthost的IN包请求,CPU写,当rxpktrdy有效后该bit硬件自动清掉
D4Error当连续三次尝试都收不到device的ack,就会置1,同时上报中断,CPU清该bit
D3SetupPktCPU通过设置该bit以及TxPktrdy来发送setup包
D2RxStall当接收到STALL帧时,硬件置位,CPU清
D1TxPktRdy

cpu填完tx fifo后设置该bit开始发,发完并收到ack后硬件清掉,

同时产生中断

D0RxPktRdy当收到data包时置1,同时产生中断,一旦CPU读fifo就会自动清除该bit
1.2.2?COUNT0
D6-D0Rx Count当rxpktrdy有效时,该count才有意义

1.2.3 NAKLIMIT0
D4-D0timeoutendpoint0 NAK对应的timeout时间

1.2.4 TXMAXP

除了endpoint0,其他的endpoint1-15,单次传输最大包长,最大1024 byte

1.2.5?TXCSR

对于每一个endpoint1-15,都有各自的TXCSR寄存器,里面涉及到中断的bit或起来后组成INTRTX里面的相应的端点中断。

对于device:

D15AutoSet自动设置txpktrdy
D14ISOISO传输
D13Mode控制当前端点为TX还是RX
D12

DMAreq

enab

DMA请求使能
D11

FrcData

Tog

CPU通过该bit来force发送toggle的data
D10

DMAreq

mode

DMA请求的模式配置
D9-D8
D7

incomp

TX

用于拆分包
D6

clrdata

tog

CPU通过该bit来复位endpoint,一直发0
D5sentstall当USB收到sendstall包时会置位
D4sendstallCPU通过写该bit来发stall命令
D3

flush

fifo

CPU通过该bit来清 endpoint的tx fifo
D2

under

run

当CPU没有设txpktrdy时,host发送了IN包请求,该bit会被置位
D1

FIFO

not empty

当txfifo中至少有一个数据时,说明没有空
D0TxPktRdy

cpu填完tx fifo后设置该bit开始发,发完并收到ack后硬件清掉,

同时产生中断

对于host:

D15AutoSet自动设置txpktrdy
D14
D13Mode控制当前端点为TX还是RX
D12

DMAreq

enab

DMA请求使能
D11

FrcData

Tog

CPU通过该bit来force发送toggle的data
D10

DMAreq

mode

DMA请求的模式配置
D9-D8
D7

incomp

TX

用于拆分包
D6

clrdata

tog

CPU通过该bit来复位endpoint,一直发0
D5rxstall当接收到STALL帧时,硬件置位,CPU清
D4
D3

flush

fifo

CPU通过该bit来清 endpoint的tx fifo
D2

error

连续三次尝试都收不到ack
D1

FIFO

not empty

当txfifo中至少有一个数据时,说明没有空
D0TxPktRdy

cpu填完tx fifo后设置该bit开始发,发完并收到ack后硬件清掉,

同时产生中断

1.2.6?RXMAXP

除了endpoint0,其他的endpoint1-15,单次传输最大包长,最大1024 byte

1.2.7?RXCSR

对于每一个endpoint1-15,都有各自的RXCSR寄存器,里面涉及到中断的bit或起来后组成INTRRX里面的相应的端点中断。

对于device:

D15Autoclr
D14ISO
D13

DMAreq

enab

D12

disNyet

PID error

D11

DMAreq

mode

D10-D9

D8

incomp

Rx

D7

clrdata

Tog

D6sentstall
D5sendstall
D4

flush

fifo

D3

data

error

D2

over

run

当rxfifo已经满了,host还在发out包,该bit会被置位
D1

FIFO

full

rxfifo已经满了
D0RxPktRdy

表示接收到了包

对于host:

D15Autoclr
D14autoreq
D13

DMAreq

enab

D12

PID

error

D11

DMAreq

mode

D10-D9

D8

incomp

RX

D7

clrdata

tog

D6

rxstall

D5reqpkt
D4

flush

fifo

D3

NAK time

out

D2

error

D1

FIFO

full

D0RxPktRdy

1.2.8?RXCOUNT

除了endpoint0,其他的endpoint1-15,单次传输最大包长,最大4096?byte

1.2.9?TXTYPE

除了endpoint0,其他的endpoint1-15,只有host

D5-D4protocol

cpu控制 TX endpoint:

00:illegal

01:ISO

10:BULK包

11:Interrupt传输

D3-D0

Target Endpoint

Num

host要访问的device端点号

1.2.9 RXTYPE

除了endpoint0,其他的endpoint1-15,只有host

D5-D4protocol

cpu控制 RX endpoint:

00:illegal

01:ISO

10:BULK包

11:Interrupt传输

D3-D0

Target Endpoint

Num

host要访问的device端点号

1.2.10?FIFOSIZE

除了endpoint0,其他的endpoint1-15

D7-D4

RX

fifo

size

2^NRO
D3-D0

TX

fifo

size

2^NRO

1.3.1 动态?FIFO配置

除了endpoint0,其他的endpoint1-15

TX/RX

D4DPB是否是双buffer
D3-D0SZ

0000:8byte

0001:16byte

0010:32byte

...

1001:4096byte

如果是双buffer,实际fifo大小是这个配置的两倍

TX/RX ADDR

D13
D12-D0AD

0000:起始地址0000

0001:起始地址0008

0010:起始地址0010

...

1FFF:起始地址FFF8

8byte对齐


总结

? ? ? ?以上内容对寄存器做了详细的解析,并对一些关键的寄存器bit做了备注,在实际使用过程中需要软件特别的注意。寄存器的定义对应了每个功能,只有详细了解每个寄存器的物理含义以及使用说明,才能更好的实现相关的功能。

文章来源:https://blog.csdn.net/luyil/article/details/135192202
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。