立即注册 登录
返回首页

uid:136005的个人空间

日志

USB功能描述

已有 1026 次阅读2019-2-23 10:54

1.1简介

实现USB2.0全速设备和APB1间的接口
支持挂起/恢复,可以停止设备时钟实现低功耗。
1.2主要的特征
  1、符合USB2.0全速技术规范
  2、可配置1到8个USB端点 【8个双向端点,16个单向端点】
  3、CRC生成、校验,NRZI编码、解码、位填充【硬件实现,可以通过抓取数据来实现】
  4、支持同步传输
  5、支持批量、同步端点的双缓冲区机制
  6、支持USB挂起、恢复操作【通过检测3ms内没有sof信号为挂起】
  7、帧锁定时钟脉冲生成

1.3功能描述
  1、PC机与微控制器之间的数据传输共享一专用的数据缓冲区
  2、缓冲区的大小由端点的数目与每个端点最大的数据分组决定,每个端点最大可使用512字节,最多可使用16个单向或8个双向端点。
  3、USB模块同主机通信,根据USB的规范实现了令牌分组,数据发送、接收和握手的处理。
  4、硬件实现传输的格式,如CRC生成、校验。
  5、每个端点都有一个缓冲区描述块,描述了缓冲区地址、大小、和需要传输的字节数。【端点配置描述符】
  6、当数据和端点已配置,USB模块识别有效的令牌分组时,将发生数据传输
  7、USB模块通过一个内部的16位寄存器实现端口与专用缓冲区的数据交换。
  8、根据传输的方向与需求,发送或接收适当的握手分组
  9、数据传输结束,通过中断处理程序可以得到端点需要的服务【读取寄存器的状态,分拣出不同的中断要求】
  10、在同步传输和高吞吐量的批量传输中提供了双缓冲机制
  11、支持低功耗模式【通过写控制寄存器,使模块处于SUSPEND模式】
  12、支持唤醒USB模式【在低功耗模式下,检测USB数据线上的数据传输/将中断源接到唤醒引脚上】
  13、支持直接启动或停止时钟系统
1.4USB功能模块描述
   USB模块实现了USB接口的所有特性:
   1、串行接口控制器(SIE),实现的功能:帧头同步域识别,位填充,CRC产生和校验,PID验证/产生,握手处理。   与USB收发器交互,利用分组缓冲接口提供的虚拟缓冲区存储局部数据。 根据USB相关的事件产生相关的端点信号。如sof、USB复位,数据错误
   2、定时器 :产生与帧开始同步的时钟脉冲,并在3ms内没有数据传输,检测为挂起状态。 
   3、分组缓冲器。根据SIE的要求分配合适的缓冲区,并定位到端点寄存器所指向的存储区地址。地址自增。记录传输的字节数防止缓存器溢出。
4、端点相关寄存器。 对于单向或单缓冲器的端点,一个寄存器可以实现两个不同的端点。
一共8个寄存器,可以实现16个单向 /单缓冲的端点或者7个双缓冲的端点或者这些端点的组合。
  5、控制寄存器:包含USB的状态信息,挂起低功耗等
  6、中断寄存器:获取中断源和中断信息。
端点0作为单缓冲模式下的控制端点。
  
APB1接口部分
1、分组缓冲区  大小为512字节
2、仲裁器:通过向APB1提供较高的访问优先级来解决总线冲突。采用分时复用的策略
实现了虚拟双端口SRAM.
  3、寄存器映射单元: 把USB的寄存器映射成被APB1寻址的16位宽度的内存集合。
  4、APB1封装:将整个USB模块映射到APB1地址空间。
  5、中断映射单元:
     USB低优先级中断(通道20):所有USB事件触发。
     USB高优先级中断(通道19):仅能由同步和双缓冲批量的正确传输事件触发。
     USB唤醒中断(通道42):由USB挂起模式的唤醒事件触发。
1.5 USB模块与应运程序的交互
  1、系统复位或上电  流程 先配时钟信号再清除复位信号 
  2、分组缓冲区的结构与用途  接口APB1的一半周期用于微控周期的访问,一半周期用于USB模块的访问。USB模块使用固定的时钟48MHZ,APB1总线的时钟必须大于8MHz.
  3、端点初始化 
第一步是把适当的值写到ADDRn_TX或ADDRn_RX寄存器中, USB_EpnR寄存器的EP_TYPE位确定端点的基本类型, EP_KIND位确定端点的特殊特性。作为发送方,需要设置USB_EpnR寄存器的STAT_TX位来使能端点,并配置COUNTn_TX位决定发送长度。作为接收方,需要设置STAT_RX位来使能端点,并且设置BL_SIZE和NUM_BLOCK位,确定接收缓冲区的大小,以检测缓冲区溢出的异常。 
  4、IN分组
     第一步接收到一IN令牌,访问相应的ADDRn_TX和COUNTn_TX寄存器,并将这些寄存器中的数值存储到内部的16位寄存器ADDR和COUNT。第二步,根据DTOG_TX位发送DATA0或DATA1分组,并访问缓冲区。第三步,从缓冲区读到的第一个字节将被装载到输出移位寄存器中,并开始发送。四,接收到主机响应的ACK,应用程序需要通过USB_ISTR寄存器的EP_ID和DIR位识别产生中断的USB端点。五、CTR_TX事件的中断服务程序需要首先清除中断标志位,然后准备好需要发送的数据缓冲区,更新COUNTn_TX为下次需要传输的字节数,最后再设置STAT_TX位为’11’(端点有效),再次使能数据传输。
  5、OUT分组和SETUP分组
   第一步,找到与该端点相关的ADDRn_RX和COUNTn_RX寄存器,并将ADDRn_RX 寄 存 器 的 值 保 存 在 内 部 ADDR 寄 存 器 中 。第二步,初始化内部寄存器。第三步:存储数据到ADDR指向的分组缓冲区中。第三步,分步揍做校验。

  6、控制传输
  第一步,建立过程。第二步,可选的数据过程。第三步,状态过程。
1.6 双缓冲机制 
  第一,将USB_EPnR寄存器的EP_TYPE位设为’00’,定义端点为批量端点
  第二,将USB_EPnR寄存器的EP_KIND位设为’1’,定义端点为双缓冲端点

1.7同步传输
  第一,配置同步端点,
  第二,双缓冲机制配置
  第三,初始化DTOG位。
  第四,数据传输。

1.8挂起事件
  第一,将USB_CNTR寄存器的FSUSP置为’1’,这将使USB模块进入挂起状态。 
第二,将USB_CNTR寄存器的LP_MODE位置为’1’,这将消除模拟USB收发器的静态电流消耗,但仍能检测到唤醒信号。
第三,可以选择关闭外部振荡器和设备的PLL,以停止设备内部的任何活动。

1.9唤醒事件
  第一,清零USB_CNTR寄存器的FSUSP位。
  第二,唤醒过程将由主机PC完成,可以利用USB_FNR寄存器的RXDP和
RXDM位来判断唤醒是否完成。
2.0通用寄存器
  1、控制寄存器、
  2、中断寄存器
  3、帧编号寄存器
  4、设备地址寄存器
  5、分组缓冲区地址寄存器

2.1端点寄存器

2.2缓冲区描述表
 1、发送缓冲区地址寄存器
 2、发送缓冲区字节寄存器、
 3、接收缓冲区地址寄存器
 4、接收数据字节寄存器



路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部