STM32 USB 学习

USB硬件接口

 1、Type —— Type A(普通PC端)、Type B(USB设备的接口)、Type C(属于USB3.0)

 2、Mini —— Mini A、Mini B(数码相机、移动硬盘等移动设备)

 3、 Micro —— Micro A、MicroB(手机等移动设备),属于USB2.0

 

USB模式

1、USB HOST模式

2、USB OTG

      USB OTG是USB2.0的补充规范,即可做host,也可做device,主要通过USB ID电平来切换角色

 

USB体系

1、USB host 主机

2、USB device 设备 
      —— USB HUB(USB接口扩展方法)

      —— USB function(HID、mass device、imaging device)

3、USB interconnect 物理连接



USB设备插入识别

通过两根端口数据线(D+、D-)判断,当有设备插入时,其中一根数据线的电平会被拉高,若D+拉高,则是全速或高速设备,D-拉高则是低速设备

 

STM32 USB IP分类

1、USB IP

     可做全速或低速USB 设备, 512字节Packet buffer SRAM

2、USB+ IP

     可做全速或低速USB设备,1024字节Packet buffer SRAM,有USB低功耗管理,USB DP 线上有可控嵌入式上拉电阻,控制USB的连接与断开

3、OTG IP

     —— FS OTG IP

             可做全速或低速USB主机,全速USB设备

     —— HS OTG IP

             可做高速、全速和低速USB主机,高速或全速USB设备

 

USB IP 模块功能图

SIE:硬件识别同步信号、进行比特填充、产生以及校验CRC、产生以及验证PID、握手,根据外设事件来产生SOF、复位信号

Arbiter(仲裁器):接收和处理来自APB1或USB的memory request

Packet buffer interface:一组收发Packet buffer,来管理本地的512字节Packet buffer memory

 

USB的端点地址设置规则

    USB的每个EP对应的位置地址和其大小都通过buffer描述表来指定,该buffer描述表也位于Packet buffer memory里面,其地址由USB_BTABLE寄存器指定。每个EP描述符占用4个半字(即8个字节),描述的信息有该EP TX的地址和大小以及EP RX的地址和大小 

 

举例

如果:USB设备使用三个端点:EP0的IN、OUT,EP1的IN、EP2的OUT,

           且 #define BTABLE_ADDRESS      (0x00)   即端点描述表从地址0x00开始

           由于有3个双向端点,故描述表的大小为 3*8 = 24个字节,即0x18

因此:EP0 的起始地址 RX_ADDR应为0x18         #define  ENDP0_RXADDR    (0x18)

           此时如果再指定接收的缓冲区大小为0x40   SetEPRxCount(ENDP0, 0x40)

           则EP0 的TX_ADDR应该为0x58                   #define ENDP0_TXADDR   (0x58)

           同理,如果发送缓冲区的大小也为0x40 

           则EP1的起始地址RX_ADDR应该为0x98      #define  ENDP1_RXADDR   (0x98)

           EP2也以此类推

 

双缓冲端点

    当某个批量类型的EP被使能为“双缓冲”后,该EP只能作为单向端点使用(发送或接受),其发送Packet memory和接收Packet memory都可以被使用

 

USB中断处理

usb_dcd_int.c:void USB_Istr()函数,在该函数里有一条语句 wIstr = _GetISTR(),之后根据wIstr读出的中断标志调用相关的函数;当读出中断标志是CTR中断标志时调用 CTR()函数

void CTR():获取EP ID,如果是端点0,判断是IN包还是OUT/SET UP包,分别进行处理;如果是非0端点,调用其GetInReport处理函数或GetOutReport函数

 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值