首页 > 其他分享 >USB基本概念二

USB基本概念二

时间:2023-11-18 21:33:44浏览次数:31  
标签:usb unsigned 描述符 USB 设备 基本概念 struct

Q1.USB总线驱动是干嘛用的? A1. 1.识别USB设备 2.给USB设备找到并安装对应的驱动程序 3.提供USB读写函数

新接入的USB设备默认地址(编号)为0,在未分配新编号前,PC主机使用0地址与其通信。 (指匹配到驱动之前,会先与USB设备的prot0进行沟通,然后配置,当总线添加设备后,与驱动匹配后,择交给驱动控制此USB设备) Q2.USB驱动整体框架

usb设备驱动通过使用USB总线驱动的标准接口去控制USB读写。应用层如何控制USB设备,具体传输什么内容,传输什么格式是由对应USB设备的设备驱动决定的。USB主机控制器提供标准的接口规范。

Q3.什么是OHCI EHCI XHCI? A3.这些是USB主机控制器的类型,不同类型遵循的协议和接口硬件不同,传输速录不同。常见的有:

xHCI:支持USB3.0
EHCI:支持USB2.0

Q4.USB描述符怎么理解 A4. USB的设备描述符由多层结构。
一个设备描述符可以有多个配置描述符。(意义?) 一个配置描述符可以有多个接口描述符。(意义?) 一个接口描述符可以有多个端点描述符。

Q5.配置描述符、接口描述符、端点描述符的作用? 配置描述符

接口描述符 一个接口描述符代表一个逻辑上的设备。

端点描述符

Q6.USB设备描述符结构?

Q7.usb_device设备结构体内容

struct usb_device {
     int devnum;                //设备号,是在USB总线的地址
     char devpath [16];        //用于消息的设备ID字符串
     enum usb_device_state state;  //设备状态:已配置、未连接等等
     enum usb_device_speed speed;  //设备速度:高速、全速、低速或错误
    
     struct usb_tt *tt;        //处理传输者信息;用于低速、全速设备和高速HUB
     int ttport;                //位于tt HUB的设备口
    
     unsigned int toggle[2];         //每个端点占一位,表明端点的方向([0] = IN, [1] = OUT)  
     struct usb_device *parent;          //上一级HUB指针
     struct usb_bus *bus;           //总线指针
     struct usb_host_endpoint ep0;         //端点0数据
     struct device dev;             //一般的设备接口数据结构
   
     struct usb_device_descriptor descriptor; //USB设备描述符,
     struct usb_host_config *config;       //设备的所有配置结构体,配置结构体里包含了配置描述符
     struct usb_host_config *actconfig;     //被激活的设备配置
     struct usb_host_endpoint *ep_in[16];     //输入端点数组
     struct usb_host_endpoint *ep_out[16];     //输出端点数组
    
     char **rawdescriptors;             //每个配置的raw描述符
    
     unsigned short bus_mA;         //可使用的总线电流


   u8 portnum;               //父端口号
   u8 level;                //USB HUB的层数
  
   unsigned can_submit:1;         //URB可被提交标志
   unsigned discon_suspended:1;      //暂停时断开标志
   unsigned persist_enabled:1;       //USB_PERSIST使能标志
   unsigned have_langid:1;         //string_langid存在标志
   unsigned authorized:1;
   unsigned authenticated:1;
   unsigned wusb:1;             //无线USB标志
   int string_langid;             //字符串语言ID
  
   /* static strings from the device */ //设备的静态字符串
   char *product;               //产品名
   char *manufacturer;            //厂商名
   char *serial;                //产品串号
  
   struct list_head filelist;         //此设备打开的usbfs文件
#ifdef CONFIG_USB_DEVICE_CLASS
   struct device *usb_classdev;    //用户空间访问的为usbfs设备创建的USB类设备
#endif
    
#ifdef CONFIG_USB_DEVICEFS
   struct dentry *usbfs_dentry;        //设备的usbfs入口
#endif
  
   int maxchild;                       //(若为HUB)接口数
   struct usb_device *children[USB_MAXCHILDREN];    //连接在这个HUB上的子设备
   int pm_usage_cnt;                 //自动挂起的使用计数
   u32 quirks;
   atomic_t urbnum;                   //这个设备所提交的URB计数
  
   unsigned long active_duration;         //激活后使用计时


#ifdef CONFIG_PM                 //电源管理相关
   struct delayed_work autosuspend;       //自动挂起的延时
   struct work_struct autoresume;       //(中断的)自动唤醒需求
   struct mutex pm_mutex;           //PM的互斥锁 
 
   unsigned long last_busy;         //最后使用的时间
   int autosuspend_delay;
   unsigned long connect_time;       //第一次连接的时间
  
   unsigned auto_pm:1;           //自动挂起/唤醒
   unsigned do_remote_wakeup:1;     //远程唤醒
   unsigned reset_resume:1;       //使用复位替代唤醒
   unsigned autosuspend_disabled:1;   //挂起关闭
   unsigned autoresume_disabled:1;   //唤醒关闭
   unsigned skip_sys_resume:1;     //跳过下个系统唤醒
#endif
   struct wusb_dev *wusb_dev;     //(如果为无线USB)连接到WUSB特定的数据结构
};

hub_probe时注册的hub_event


hub_event()中处理端口变化

USB基本概念二_描述符

port_event

hub_port_connect_change

USB基本概念二_字符串_02


hub_port_connect

        usb_alloc_dev 分配usb设备描述符

        usb_set_device_state 设置当前状态为POWERED

        choose_devnum 分配usb地址

        hub_port_init 初始化端口 分配地址

        usb_new_device

                announce_device 内核消息打印

                device_add

                     1)把device放入usb_bus_type的dev链表,

                   2)从usb_bus_type的driver链表里取出usb_driver,

                   3)把usb_interface和usb_driver的id_table比较

                   3)如果能匹配,调用usb_driver的probe

        

标签:usb,unsigned,描述符,USB,设备,基本概念,struct
From: https://blog.51cto.com/u_13911803/8464850

相关文章

  • 计算机图形:图元、片元、光栅化等基本概念
    几种“点”的概念顶点(vertex):图元(如线段、三角形、圆等几何图形)由顶点+边组成,由用户及其建立的模型确定.图元(primitive):描述对象的几何要素的输出图元,称为几何图元,简称图元.如点、直线段、圆、二次曲线、曲面等.片元(fragment):光栅化过程的产物,光栅化将一个图元转变成二维图......
  • windows10 使用 USB 无线网卡的热点功能
    一、概述在某宝上买了一个COMFASTCF-727B的无线模块,由于笔记本电脑一直使用不上,所以放了很久。多年后我来到了一个公司,遇到了我此生最想吐槽的网管,简直不敢想象几十人的办公室,居然能把热点给占满,于是我找到了IT人员,得的回复是公司手机太多,特此还把一部分手机给禁用了,那理直气......
  • stm32的USB从设备串口驱动设计
    一、USB_OTG简介    USB_OTG(OTG,ONTHEGO)是一款双角色设备(DRD)控制器,同时支持从机(USBDEVICE)功能和主机(USBHOST)功能。在主机模式下,OTG支持全速(OTG_FS,12Mb/s)和低速(OTG_LS,1.5Mb/s)收发器,而从机模式下则仅支持全速(FS,12Mb/s)收发器。主机模式下需要的唯一外部设备是提供......
  • 使用python开发了一个自动摇摆机械臂 Micropython+ESP332+舵机+USB发热贴
    前言:在测试不同区域的红外、毫米波和激光雷达等传感器时,需要人工招手和移动进行测试。尽管这种测试是必要的,但却难以保证测试的一致性,因为人的动作很难做到完全一致。解决方案:为了提高测试的一致性,我们测试考虑开发一种可摇摆且能发热的测试工具。这样的工具可以模拟不同......
  • 【交换机、路由器、双码流、分布式、VKM的基本概念学习】
    分布式节点:分布式就是把传统的音视频设备矩阵切换器、拼接处理器、录播系统、KVM切换器、中央控制系统等这些设备的功能打包成一个等于X功能的节点,然后每个信号输入输出的区域,布置一个这样的X节点,在通过一条网线接到交换机,实现上述的各种功能。可视化:可视化是利用图像传输和处......
  • 关于如何判断电脑的USB接口版本
    今天想在U盘里装Linux系统,那么U盘接口的通信速度就很重要了,于是想到一个问题:要怎么判断USB接口是2.0还是3.0还是更高版本呢?我在网上找了一些识别方法,在这里总结一下,以后如果又发现了新的方法,也会在这里更新的。 方法一:看颜色方法来源:怎么查看自己电脑的USB接口类型啊?_百度知......
  • FTDI的MPSSE使用示例(SPI协议背景知识简介及其FT4232H配成USB to SPI使用实例)
    MPSSEApplicationExample:http://ftdichip.cn/Support/SoftwareExamples/MPSSE.htmMPSSE:AN_129FTDIUSBToJTAGTAPExampleMPSS:AN_114FTDIUSBtoSPIExampleMPSSE:AN_113FTDIUSBtoI2CExampleMPSS:AN_114FTDIUSBtoSPIExampleFTDIMPSSE(Multi-Pr......
  • JTAG Tap | JTAG: FTDI的 AN_129(JTAG Tap+JTAG简介及其FT4232H配成USB to JTAG使用实
    ApplicationNotes/AN_129_FTDI_Hi_Speed_USB_To_JTAG_Example.pdf1.2JTAGbackgroundToday'selectroniccircuitsconsistofnumerouscomplexintegratedcircuits.AtypicalembeddedsystemcancontainmultipleCPUs,programmabledevices,memory,etc.Wi......
  • USB(2.0 / Type-C) to MPSSE(JTAG / SPI / IIC) / UART / FIFO: FTDI 的FT4232H配成SP
    Ti60Demo板FT4232H串口使用易灵思FPGA技术交流2022-04-1508:43Ti60F225demo板使用的是FT4232H,有4个通道A,B,C和D。其中A通道用于SPI接口,可以是AS也可以是PS。通道B用于JTAG,通道C连接了UART,通道D连接了FX3。A,B,C和D四个通道分别对应Zadig中的TitraniumTi60F225develo......
  • USB拦截工具
    USB闪存驱动器对组织的安全和数据构成了独特的威胁。它们的便携性和充足的存储容量使它们成为数据盗窃的便捷媒介。什么是USB拦截器USB(通用串行总线)阻止程序用于禁用插入可移动存储设备的端口,便携性和充足的存储容量使USB成为可能发生数据盗窃的简单媒介,为了解决这个问题,USB......