MUSBMHDRC USB 2.0 MULTI-POINT DUAL-ROLE CONTROLLER编程指南解读2

可选的特殊处理

在批量操作中传输的数据包由 USB 规范定义为 8、16、32、64 或 512 字节大小,其中 512 字节选项仅适用于高速传输。 然而,对于某些系统设计,应用软件在单个操作中从端点读取大量数据可能比在单个 USB 操作中传输更方便。 一个特殊的例子是,在某些情况下,同一端点用于 512 字节的高速传输,但在其他情况下用于全速传输。 在全速运行时,单个操作中传输的最大数据量仅为 64 字节。
为适应这种情况,MUSBMHDRC 包含一个“Rx 批量数据包组合”配置选项,如果选择该选项,MUSBMHDRC 会在应用软件读取之前将通过 USB 总线接收的数据包合并为更大的数据包。
在此选项下,端点的 RxMaxP 寄存器增加到 16 位,寄存器的低 11 位定义每个单独传输的有效负载,而高 5 位定义一个乘法器。 然后,MUSBMHDRC 会将其接收到的适当数量的 USB 数据包合并到 FIFO 中大小为乘数 × 有效负载的单个数据包中,然后置位 RxPktRdy 以提醒应用软件存在要在 FIFO 中读取的数据包。 结果包的大小在 RxCount 中报告。 从应用软件的角度来看,产生的操作与接收单个 USB 数据包没有区别,只是读取数据包的大小不同。
该功能是作为配置选项而不是标准功能提供的,因为它增加了门数。
注意:此功能仅适用于 Bulk 端点,根据 USB 规范,有效负载必须是
8、16、32、64 或 512 字节,其中 512 字节选项仅适用于高速传输。 RxMaxP 寄存器中记录的有效负载还必须与端点的标准端点描述符的 wMaxPacketSize 字段匹配。 相关的 FIFO 也必须足够大以容纳合并的数据包。
另请注意,仅当接收到指定数量的数据包或接收到“短”USB 数据包(即小于端点指定有效负载的数据包)时,才会设置 RxPktRdy。 如果使用协议,端点接收的批量传输是记录的有效载荷大小的倍数,并且没有短数据包来终止它,则不应将 RxMaxP 寄存器编程为期望的数据包比传输中的数据包多(否则软件 传输结束时不会中断)。

附加操作

MUSBMHDRC 内核会自动响应 USB 总线上的某些条件或主机的操作。 详情如下:
在以下情况下,MUSBMHDRC 内核将自动向控制传输发出 STALL 握手:

  1. 主机在控制传输的 OUT 数据阶段发送的数据多于在 SETUP 阶段的设备请求中指定的数据。
    当 CPU 卸载最后一个 OUT 数据包并设置 DataEnd 后主机发送 OUT 令牌(而不是 IN 令牌)时,MUSBMHDRC 会检测到这种情况。
  2. 主机在控制传输的 IN 数据阶段请求的数据多于在 SETUP 阶段的设备请求中指定的数据。
    在 CPU 清除 TxPktRdy 并设置 DataEnd 以响应主机对本应是最后一个数据包发出的 ACK 后,主机发送 IN 令牌(而不是 OUT 令牌)时,MUSBMHDRC 会检测到这种情况。
  3. 主机使用 OUT 数据令牌发送超过 MaxP 数据。
  4. 主机为 OUT 状态阶段发送一个以上零长度的数据包。

控制传输中的零长度数据包

一个零长度的 OUT 数据包用于指示控制传输的结束。 在正常操作中,只有在设备请求的整个长度被传输后(即 CPU 设置 DataEnd 后)才能接收此类数据包。 但是,如果主机在传输设备请求的整个长度之前发送了一个长度为零的 OUT 数据包,则这表明传输提前结束。 在这种情况下,MUSBMHDRC 将自动刷新 CPU 加载的任何 IN 令牌,准备好从 FIFO 中的数据阶段,并设置 SetupEnd。

外设模式挂起

当 USB 上 3 ms 没有发生任何活动时,MUSBMHDRC 将进入挂起模式。 如果 Suspend 中断已使能,此时将产生中断。 在挂起模式下,SUSPENDM 输出将变为低电平(如果启用):
这可用于将 PHY 置于挂起模式。 此外,POWERDWN 输出被置位:该信号可用于停止 CLK,从而在此状态下节省功耗。 POWERDWN 然后保持有效,直到从总线上移除电源(指示设备已断开连接)或在总线上检测到恢复信号或复位信号。
当检测到恢复信号时,MUSBMHDRC 将退出挂起模式并将 SUSPENDM 拉高。 作为响应,PHY 应该被取消挂起。 如果启用 Resume 中断,将产生中断。 CPU 还可以通过设置 Power 寄存器中的 Resume 位来强制 MUSBMHDRC 退出挂起模式。 当该位置位时,MUSBMHDRC 将退出挂起模式并将恢复信号驱动到总线上。 CPU 应在 10 ms(最长 15 ms)后清除该位以结束 Resume 信号。
当 CPU 退出挂起模式时,不会产生恢复中断。

8.4.5 SOF

当 MUSBMHDRC 在外设模式下运行时,它应该在全速模式下每毫秒接收一次来自主机的 Start-Of-Frame 数据包,在高速模式下每 125 微秒一次。
当接收到 SOF 数据包时,将数据包中包含的 11 位帧号写入帧寄存器,并在 SOF_PULSE 上产生一个持续一个 CLK 位周期的输出脉冲。 还会生成 SOF 中断(如果在 IntrUSBE 寄存器中启用)。
一旦 MUSBMHDRC 开始接收 SOF 数据包,它预计每毫秒(或每 125 微秒)一个。 如果在 1.00358 ms(或 125.125 µs)后没有收到 SOF 数据包,则假定数据包已丢失,并且尽管未更新帧寄存器,但仍会生成 SOF_PULSE(以及 SOF 中断,如果启用)。 MUSBMHDRC 将继续每毫秒(或 125 微秒)生成一个 SOF_PULSE,并在再次成功接收到这些数据包时将这些脉冲重新同步到接收到的 SOF 数据包。

作为主机操作

当主机模式位 (DevCtl.D2) 设置为“1”时,MUSBMHDRC 作为主机运行,用于与另一个 USB 设备进行点对点通信,或者当连接到集线器时,用于与整个范围的多点设置中的设备。支持高速、全速和低速 USB 功能,既可用于点对点通信,也可用于通过集线器进行操作。 (必要时,内核会自动执行必要的事务转换,以允许低速或全速设备与 USB 2.0 集线器一起使用。)
支持控制、批量、同步或中断事务。
本节介绍当 MUSBMHDRC 用作主机时应用的关于 Tx 端点、Rx 端点、事务调度、进入/退出挂起模式和复位的内核操作。在核心连接到集线器的情况下,会自动选择主机模式。 MUSBMHDRC 在主机模式下运行点对点的条件。

多点配置的设备设置

仅当在配置 GUI 中启用多点配置时,以下设置要求才适用于核心。
如果未启用多点选项,则不应执行以下设置。
在作为主机访问任何设备之前——无论是用于点对点通信还是通过集线器进行多点通信,都需要为每个使用的 Rx 或 Tx 端点设置相关的 RxFuncAddr 或 TxFuncAddr 寄存器以记录功能。
在作为主机访问任何设备之前——无论是用于点对点通信还是通过集线器进行多点通信,都需要为每个使用的 Rx 或 Tx 端点设置相关的 RxFuncAddr 或 TxFuncAddr 寄存器,以记录被访问的设备。 在全速或低速设备通过高速 USB 2.0 集线器连接到 MUSBMHDRC 的情况下,集线器地址和集线器端口的详细信息也需要记录在相应的 RxHubAddr/TxHubAddr RxHubPort/TxHubPort 寄存器中。 这允许核心支持拆分事务。
此外,设备运行的速度(高、满或低)需要记录在设备访问的每个端点的 Type0(端点 0)、TxType 或 RxType 寄存器中。RxFuncAddr、TxFuncAddr、RxHubAddr、TxHubAddr、RxHubPort、TxHubPort 都是 7 位读/写寄存器。
对于多点通信,应注意这些寄存器中的设置记录了内核端点的当前分配给与连接设备相关的功能。 为了最大限度地增加支持的设备数量,MUSBMHDRC 允许动态更改此分配——只需更新这些寄存器中记录的地址和速度信息。
端点对设备功能的分配的任何更改都需要在受影响端点上的任何正在进行的事务完成之后进行。

作为主机的事务处理

当 MUSBMHDRC 作为主机运行时,IN 事务的处理方式与 MUSBMHDRC 作为外设运行时处理 OUT 事务的方式类似,只是事务需要首先通过设置 RxCSR 中的 ReqPkt 位来启动 . 这向事务调度程序指示此端点上有一个活动事务。 然后事务调度程序将一个 IN 令牌发送到目标函数。
当接收到数据包并将其放入 Rx FIFO 时,RxCSR 中的 RxPktRdy 位会置位,并且会生成相应的 Rx 端点中断(如果已启用)以表示现在可以从 FIFO 中卸载数据包。
当数据包被卸载后,RxPktRdy 应该被清除。 RxCSR 寄存器中的 AutoClear 位可用于在已从 FIFO 卸载最大大小的数据包时自动清除 RxPktRdy(有例外,请参见寄存器说明)

RxCSR 中还有一个 AutoReq 位,当 RxPktRdy 位清零时,它会自动设置 ReqPkt 位。 AutoClear 和 AutoReq 位可与 DMA 控制器一起使用,以执行完整的批量传输,而无需 CPU 干预。
如果要传输已知数量的 MaxP 数据包,则应在与端点关联的 RqPktCount 寄存器中设置该数量(参见第 3.8.1 节)。 内核在每次请求后递减 RqPktCount 寄存器中的值。 当值从 1 递减到 0 时,AutoReq 位被清除以防止尝试任何进一步的事务。 对于传输大小未知的情况,RqPktCount 应设置为零。 然后 AutoReq 将保持设置状态,直到通过接收短数据包(即小于 MaxP)清除,例如可能在批量传输结束时发生。

RxCSR 中还有一个 AutoReq 位,当 RxPktRdy 位清零时,它会自动设置 ReqPkt 位。 AutoClear 和 AutoReq 位可与 DMA 控制器一起使用,以执行完整的批量传输,而无需 CPU 干预。
如果要传输已知数量的 MaxP 数据包,则应在与端点关联的 RqPktCount 寄存器中设置该数量(参见第 3.8.1 节)。 内核在每次请求后递减 RqPktCount 寄存器中的值。 当值从 1 递减到 0 时,AutoReq 位被清除以防止尝试任何进一步的事务。 对于传输大小未知的情况,RqPktCount 应设置为零。 然后 AutoReq 将保持设置状态,直到通过接收短数据包(即小于 MaxP)清除,例如可能在批量传输结束时发生。

如果目标函数使用 NAK 响应 Bulk/Interrupt IN 令牌,则 MUSBMHDRC 将继续重试事务,直到达到已设置的任何 NAK 限制。但是,如果目标函数以 STALL 响应,MUSBMHDRC 将不会重试事务,而是会通过设置 RxCSR 寄存器中的 RxStall 位来中断 CPU。如果目标函数在要求的时间内没有响应 IN 令牌(或数据包中存在 CRC 或位填充错误),则 MUSBMHDRC 将重试事务。如果在 3 次尝试后目标函数仍未响应,则 MUSBMHDRC 将清除 ReqPkt 位并用 RxCSR 中的 Error 位设置中断 CPU。注意:在高带宽中断事务的情况下,主机将在单个微帧期间尝试 2 或 3 个事务,并在收到所有数据包后产生中断。如果目标未确认这些事务中的任何一个,则在同一微帧期间将不会尝试进一步的事务。
注意:在任何微帧中发送的 USB 数据包的数量将取决于要传输的数据量,并通过用于各个数据包的 PID 来指示。 如果在微帧结束时还没有接收到指定数量的数据包,则 RxCSR 寄存器中的 IncompRx 位将被设置以指示 FIFO 中的数据不完整。 同样,如果接收到错误数据类型的数据包,则 RxCSR 寄存器的 PID 错误位将被设置。 但是,在每种情况下,仍会产生中断以允许从 FIFO 中读取已接收的数据。

作为主机的输出事务处理

当 MUSBMHDRC 作为主机运行时,OUT 事务的处理方式与 MUSBMHDRC 作为外设运行时 IN 事务的处理方式类似。

当每个数据包加载到 TxFIFO 中时,需要设置 TxCSR 寄存器中的 TxPktRdy 位。 同样,设置 TxCSR 中的 AutoSet 位(如果适用)将导致 TxPktRdy 在最大大小的数据包已加载到 FIFO 时自动设置。 此外,AutoSet 可以与 DMA 控制器一起使用,在没有 CPU 干预的情况下执行完整的批量传输。

如果目标函数以 NAK 响应 OUT 令牌,则 MUSBMHDRC 将继续重试事务,直到达到已设置的任何 NAK 限制。 但是,如果目标函数以 STALL 响应,MUSBMHDRC 将不会重试事务,而是会通过设置 TxCSR 寄存器中的 RxStall 位来中断 CPU。 如果目标函数在要求的时间内没有响应 OUT 令牌(或者数据包中存在 CRC 或位填充错误),则 MUSBMHDRC 将重试事务。 如果在 3 次尝试后目标函数仍未响应,则 MUSBMHDRC 将刷新 FIFO 并用 TxCSR 中的错误位中断 CPU。

事务调度

当作为主机运行时,MUSBMHDRC 保持了一个帧/微帧计数器。 如果目标函数是全速或高速设备,MUSBMHDRC 会在每帧/微帧开始时自动发送一个 SOF/uSOF 数据包。 如果目标函数是一个低速设备,则将在总线上传输一个“K”状态以充当“保持活动”状态,以阻止低速设备进入挂起模式。
在发送 SOF/uSOF 数据包后,MUSBMHDRC 将循环通过所有已配置端点寻找活动事务。 活动事务定义为设置了 ReqPkt 位的 Rx 端点或设置了 TxPktRdy 位和/或 FIFONotEmpty 位的 Tx 端点。

只有在帧/微帧的第一个事务调度程序周期中找到并且该端点的间隔计数器已倒计时至零时,才会启动活动的同步或中断事务。这确保每个端点每 n 帧/微帧仅发生一个中断/同步事务(如果选择了高带宽支持,则最多发生三个),其中 n 是通过该端点的 TxInterval/RxInterval 寄存器设置的间隔。

如果帧/微帧中有足够的时间在下一个 SOF/uSOF 数据包到期之前完成事务,则将立即启动活动的批量事务。如果需要重试事务(例如,因为接收到 NAK 或目标函数没有响应),则在事务调度程序首先检查所有其他端点的活动事务之前,不会重试事务。这可确保发送大量 NAK 的端点不会阻塞总线上的其他事务。核心还允许用户指定在端点超时之前可以从特定目标接收 NAK 的时间长度限制。

MUSBMHDRC 直到总线至少在最小包间延迟内处于非活动状态才会启动事务。 它也不会启动事务,除非它可以在帧结束之前完成。 如果总线在帧结束时仍然处于活动状态,则 MUSBMHDRC 将假定它所连接的功能发生故障,并将暂停所有事务并产生一个 babble 中断。

主机模式挂起

如果电源寄存器中的 SuspendMode 位置位,MUSBMHDRC 将完成当前事务,然后停止事务调度程序和帧计数器。 不会启动进一步的事务,也不会生成 SOF 数据包。
要退出挂起模式,CPU 应设置 Resume 位并清除 Power 寄存器中的 Suspend 位。 当 Resume 位为高时,MUSBMHDRC 将在总线上生成 Resume 信号。 20 ms 后,CPU 应清除 Resume 位,此时将启动帧计数器和事务调度程序。
在挂起模式下,如果启用,SUSPENDM 输出也将变为低电平:这可用于关闭 USB 驱动器。此外,POWERDWN 输出有效:此信号可用于停止 CLK,从而在 这种状态。
但是,如果要支持远程唤醒,则必须保持 PHY 的电源,以便 MUSBMHDRC 可以检测总线上的恢复信号。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
musb 中文翻译和英文文档.可以通过会话请求协议(SRP)发起USB流量,而双角色设备同时支持SRP和主机协商协议(HNP),并且可以根据需要担任主机或外设的角色。MUSBMHDRC还支持拆分事务,这反过来允许它支持使用带有USB 2.0集线器的全速度或低速设备。核心还包括支持在不使用时关闭便携式设备。 除了端点0之外,MUSBMHDRC是用户可配置的,可支持最多15个‘传输’端点和/或最多15个‘接收’端点。(对于IN事务和OUT事务使用这些端点取决于MUSBMHDRC是用作外设还是用作主机。当用作外设时,IN事务通过TX端点处理,OUT事务通过Rx端点处理。当用作主机时,IN事务通过Rx端点处理,OUT事务通过TX端点处理。)这些附加端点可以在软件中单独配置,以处理批量传输(这也允许它们处理中断传输)、同步传输或控制传输。此外,还可以动态地将端点分配给不同的目标设备函数——最大限度地同时支持设备的数量。 每个端点都需要一个FIFO与之关联。MUSBMHDRC有一个RAM接口,用于连接到用于所有端点FIFOs的同步单端口RAM的单个块。(RAM块本身需要由用户添加。) 端点0的FIFO需要为64字节深,并缓冲1个数据包。RAM接口可以根据其他端点FIFOs进行配置,它的大小可以从8到8192字节,可以缓冲1个或2个数据包。单独的FIFOs可以与每个端点相关联:或者,具有相同端点编号的TX端点和Rx端点可以配置为使用相同的FIFO,例如,如果它们永远不能同时活动,可以减少所需RAM块的大小。 MUSBMHDRC提供了一个32位同步CPU接口,设计用于连接AMBA AHB bus1。接口支持使用AHB总线运行在一个大范围的总线速度。AHB总线上的多层操作也被支持。通过添加合适的包装器/桥接器,MUSBMHDRC还可以很容易地连接到一系列其他标准总线。 还支持对端点FIFOs的DMA访问。 MUSBMHDRC提供了一个UTMI+ 3级兼容接口,用于连接到一个合适的USB高/全速收发器。包含了一个可选的ULPI链接包装器(在musbhdrc /docs目录中包含的musbhdrc_ulpi_an.pdf文档中描述),用于连接到与ULPI兼容的物理。另一种接口也提供,允许使用USB 1.1与核心全速PHY,但仅为全速和低速事务。(此接口见8.1节)。 MUSBMHDRC提供发送和接收USB数据包所需的所有编码、解码、检查和重新请求——仅当端点数据已被成功传输时才中断CPU。 当充当主机时,MUSBMHDRC另外维护一个帧计数器,并自动调度SOF、同步、中断和批量传输。它还包括对在点对点通信中使用的会话请求和主机协商协议的支持,其细节在USB 2.0规范的USB on - go补充中给出。MUSBMHDRC提供了一系列的测试模式——主要是USB 2.0规范中描述的高速运行的四种测试模式。它还包括选项,允许它被迫进入全速模式,高速模式或主机模式。最后一个可能在帮助调试硬件PHY问题时有用。 提供了图形用户界面脚本,用于根据用户的需求配置核心。要使用的脚本取决于所选的CPU接口。请注意:在撰写本文时,内核仅在Verilog中可用。 本规范应与USB运行规范一起阅读,该规范还提供了电源要求、电压水平、连接器等细节。.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值