• novoton-USBDevice使用


    USB Device攻略

    (USB Device 不能自己发送数据到USB Host,必须等USB Host问USB Device要数据才能回。)

    一个USB物理设备一般可以包含多个USB 设备,这种叫USB复合设备,例如:USB Audio + USB HID设备,这种设备插入USB Host之后,会同时枚举出两个USB 设备。

    插入USB Host的USB Device有以下6种状态:(插入、上电、缺省、分配地址、配置、挂起)

    设备插入检测

    主机通过DP/DM脚上的上拉电阻判断是否有设备接入,并由此判断该设备是全速、高速还是低速设备。

     USB设备地址

    每个USB设备都有唯一的设备地址,在枚举的时候由主机分配。地址是用来识别USB设备的,总共7bit,最多可以表示127个设备,其中地址0是所有USB设备的默认地址。USB设备一插入主机时,地址就是0,然后主机会尽快给它分配一个地址。

     USB端点地址

    USB设备中包含多个USB端点(Endpoint),每个端点有端点地址端点类型。USB IP根据端点地址操作对应的USB端点。

    USB支持4种传输类型(端点类型):控制传输块传输中断传输等时传输

    • 控制传输:用来收/发 USB命令。它的端点地址是0,这个是强制规定的。一个设备插入主机,主机就开始枚举过程。枚举就是通过控制端点拿到设备的各种描述符。
    • 块传输:一般用于大量数据传输,只要主机有空就会传输该端点的数据
    • 中断传输:一般用于鼠标和键盘。它的特点是主机每隔一定的时间来要数据,如果主机比较忙,这个间隔是不保证的
    • 等时传输:一般用于传输语音数据。它的特点是主机每隔1ms传输一次数据,主机一定要尽力保证这个间隔。因为语音数据一旦跟不上,就会听到断音,而这个一般不允许。

    一个USB设备中,可以有多个端点,每个端点的作用不同,所以需要端点地址来标识端点。端点地址由端点号+方向组成,端点号4-bit,方向1-bit。方向就是指IN 和OUT,代表数据传输的方向。IN代表该端点是负责发送数据到Host的,OUT代表该端点是负责从Host接收数据的。大家注意在USB中方向都是对USB Host而言的,就是说IN是指传输数据到USB Host, OUT是指USB Host传输数据到USB Device。
    端点是有方向的,同一个端点地址可以同时支持IN和OUT,也可以只支持IN或者OUT。

    USB的描述符

    USB Host要识别USB device靠的就是各种USB 描述符:设备描述符配置描述符接口描述符端点描述符字符串描述符

    枚举时,USB Host会先要设备描述符,然后要配置描述符。要配置描述符的时候USB device要把接口描述符和端点描述符一起上传。

    结构如下:

     1 //初始化USBD
     2 void usbd_init(void)
     3 {
     4     // 使能USBD时钟
     5   CLK_EnableModuleClock(USBD_MODULE);
     6     // 配置USB时钟源,(48MHZ)
     7   CLK_SetModuleClock(USBD_MODULE, 0, CLK_CLKDIV0_USB(3));
     8     
     9     // 解锁保护寄存器
    10   SYS_UnlockReg();
    11     // 使能USBPHY
    12     SYS->USBPHY = SYS_USBPHY_LDO33EN_Msk;
    13     // 加锁保护寄存器
    14   SYS_LockReg();
    15 }
    1     //打开USBD设备
    2     USBD_Open(&gsInfo, HID_ClassRequest, NULL);
    3     //配置端点
    4     HID_Init();
    5     USBD_Start();
    6     //开中断
    7     NVIC_EnableIRQ(USBD_IRQn);
    1 while(1)
    2     {
    3         HID_UpdateMouseData();
    4     }
  • 相关阅读:
    对xml的操作使用的类XElement的使用
    在js和C#中split应用和去除字符串分组后的空值
    C# 预定义语言
    C# 中利用 Conditional 定义条件方法
    快速结束占用端口
    详解C++中命名空间的意义和用法
    Template、ItemsPanel、ItemContainerStyle、ItemTemplate
    C++入门(2)
    C++入门(1)
    VS中的配置管理器
  • 原文地址:https://www.cnblogs.com/llw2017/p/9095429.html
Copyright © 2020-2023  润新知