USB主机枚举设备

news2024/11/24 18:52:03

https://space.bilibili.com/489340606/channel/collectiondetail?sid=896957
以下图片来自于沁恒微电子蔡亮工程师的讲课,对USB开发入门很有好处。

1. USB设备的组成结构

一个设备可以有多个配置,但同一时刻只能有一个生效。一个配置可以有多个接口,一个接口可以有多个端点。
在这里插入图片描述

1. 主机枚举设备----获取设备描述符在这里插入图片描述

//主机请求-获取设备描述符
0x80,0x06,0x00,0x01,0x00,0x00,0x12,0x00	

//设备描述符
0x12,			// bLength,设备描述符长度,固定为18字节	
0x01,			//bDescriptorType,描述符类型为设备描述符
0x10,0x01,		//bcdUSB,USB协议的版本号,小端格式,BCD形式,0x0110,即V1.1版本
0x00,			//bDeviceClass,设备类,如果值为0,是告知主机设备类在接口描述符中
0x00,			//bDeviceSubClass,设备子类,取决于bDeviceClass,bDeviceClass为0时bDeviceSubClass必须为0
0x00,			//bDeviceProtocol,设备用的协议,取决于bDeviceSubClass,bDeviceSubClass为0时必须为0
0x08,			//bMaxPacketSize0,默认控制传输端点0的单次传输数据包净大小,单位是byte;低速设备只能是8,全速可以是8,16,32,64
0x86,0x1a,		//idVendor,制造商的ID号,向USB联盟申请
0xe1,0xe6,		//idProduct,产品ID号,制造商自己定
0x00,0x01,		//bcdDevice,该USB设备的固件版本号,制造商自己定
0x01,			//iManufacturer,制造商信息在字符串描述符中的序号;当非0值时,主机才会去请求。如果没有字符串描述符,该值直接填0即可
0x02,			//iProduct,制造商信息在字符串描述符中的序号;当非0值时,主机才会去请求。如果没有字符串描述符,该值直接填0即可
0x00,			//iSerialNumber,产品序列号在字符串描述符中的序号;当非0值时,主机才会去请求。如果没有字符串描述符,该值直接填0即可
0x01			// bNumConfi gurations,本设备支持的配置数量。最小为1,为1时说明只支持一种配置。

2. 主机枚举设备----设置设备地址

在这里插入图片描述

//主机请求----设置设备地址
0x00.0x05.0x02.0x00.0x00,0x00.0x00.0x00

USB设备插入主机后,默认地址都是0,主机给设备设置地址的范围是 1~127。
在设置新地址后,通讯均使用新地址进行。
当发生USB总线复位或者设备拔出再插入,地址自动回到默认地址0。

3. 主机枚举设备----获取配置描述符

配置描述符(Configuration Descriptor)规定了设备的特征和能力。一般单个配置已经足够了,但在驱动程序的支持下,带有多应用或多电源选择的设备可支持多重配置。且每次只有一个配置被激活。每个配置需要一个配置描述符,其中含有关于设备电源使用及所支持接口数的信息。

主机通过发送Get Descriptor请求,取得配置描述符及其附属描述符。
在这里插入图片描述在这里插入图片描述

  • bLength 以字节为单位的描述符大小(0x09)。
  • bDescriptorType 配置描述符类型,为CONFIGURATION (0x02)。
  • wTotalLength 配置返回的数据总长度。包括该配置返回的所有描述符(配置、接口、端点、和专用的类型或者专用的厂商描述符)的总长度。
  • bNumInterfaces 这个配置支持的接口数量,最小值为0x01。
  • bConfigurationValue 确认Get Configuration 和Set Configuration请求的配置,且必须为0x01或者更高值。取值为0的Set Configuration请求会使设备进入未配置状态(Not Configured state)
  • iConfiguration 描述这个配置的字符串描述符索引。若没有字符串描述符,这个字段的值为0。
  • bmAttributes 配置特性。

Bit 7:USB1.0协议中表示总线供电(Bus Powered),设置Bit 7 = 1表示由总线供电(Bus Powered)。其他协议该位保留(Reserved),必须设置为1。

Bit 6:自供电(Self-powered)。如果Bits 6 = 1,设备是自供电(Self-powered)的。

Bit 5 :远程唤醒(Remote Wakeup)。如果Bit 5 = 1,设备支持远程唤醒。

Bits 4…0:未使用,保留,必须为0。

  • bMaxPower当设备完全运行时,特定配置的USB设备从总线取得的最大功耗。

对于usb2.0,bMaxPower 以2mA为单位。如果设备要求200ma,则bMaxPower = 100 (0x64)。设备可请求的最大总线电流500mA。

对于增强型超高速(Enhanced SuperSpeed)设备,bMaxPower以8mA为单位。如果设备要求200ma,则bMaxPower = 25(0x19)。设备可请求的最大总线电流900mA。

当设备和主机支持USB Power Delivery Rev. 2.0,主机可以从PD Class Specific Descriptors检索设备的电源需求。

//主机请求一获取配置描述符
0x80,0x06,0x00,0x02,0x00,0x00,0x09,0x00

//配置描述符实例
0x09,		// bLength,,描述符长度
0x04,		// bDescriptorType,描述符类型为配置描述符
0x22,0x00,	// wTotalLength,包含配置描述符、接口描述符、hid类描述符、端点描述符的集合的总长度。主机获取该值后会再次发起请求,重新获取完整的配置描述符。主机第一次请求都是只请求9个字节的配置描述符,第二次请求才是包含配置描述符、接口描述符、hid类描述符、端点描述符的集合。两次请求命令相同,只是要请求的字节数不同。
0x01,		// bNuInterfaces,该配置支持的接口数量
0x01,		// bConfigurationvalue,配置值。在一个设备有多个配置时,主机使用该值以区分某一个配置。
0x00,		// iConfiguration,字符串描述符索引
0xA0		// bmittributes,位图信息,每个位有自己的含义。如是否支持唤醒、是否支持BUS供电等。0xA0表示Bus Powered,且Remote Wakeup。
0x32// MaxPower,设备要消耗的电流值,以2mA为单位。0x32=50,即50*2=100mA。

主机获取配置描述符后,解析到wTotalLength值,即配置描述符集合总长度,会再次向设备请求该长度的配置描述符。

//主机请求----获取配置描述符集合
0x80,0x06,0x00,0x02,0x00,0x00,0x22,0x00//注意,这里请求的长度是整个集合的长度,不是仅限于配置描述符的9bytes

//配置描述符集合
//***************************************配置描述符*************************************//
	0x09,		// bLength,,描述符长度
	0x04,		// bDescriptorType,描述符类型为配置描述符
	0x22,0x00,	// wTotalLength,包含配置描述符、接口描述符、hid类描述符、端点描述符的集合的总长度。主机获取该值后会再次发起请求,重新获取完整的配置描述符。主机第一次请求都是只请求9个字节的配置描述符,第二次请求才是包含配置描述符、接口描述符、hid类描述符、端点描述符的集合。两次请求命令相同,只是要请求的字节数不同。
	0x01,		// bNuInterfaces,该配置支持的接口数量
	0x01,		// bConfigurationvalue,配置值。在一个设备有多个配置时,主机使用该值以区分某一个配置。
	0x00,		// iConfiguration,字符串描述符索引
	0xA0		// bmittributes,位图信息,每个位有自己的含义。如是否支持唤醒、是否支持BUS供电等。0xA0表示Bus Powered,且Remote Wakeup。
	0x32// MaxPower,设备要消耗的电流值,以2mA为单位。0x32=50,即50*2=100mA。


//**********************************接口描述符,键盘功能**********************************//
    0x09,	                                 //bLenght,描述符长度
    0x04,                                   //bDescriptorType,描述符类型,0x04为接口描述符
    0x00,                                   //bInterfaceNumber,接口数量
    0x00,                                   //bAlternateSetting,可选设置
    0x01,                                   //bNumbEndpoints,本接口下的端点数量
    0x03,                                   //bInterfaceClass,接口类型,0x03为hid类
    0x01,                                   //bInterfaceSubClass,接口子类,是否支持BIOS,1支持,0不支持
    0x01,                                   //bInterfaceProtocol,接口协议,00其他,01键盘,02鼠标
    0x00,                                   //iInterface,接口描述在字符串描述符的索引,0为无该项    
    
//************************************HID类描述符************************************//
    0x09,                                   //bLenght,描述符长度
    0x21,                                   //bDescriptorType,描述符类型,0x21为HID描述符
    0x11,0x01,                              //bcdHID,HID协议版本号,0x0111,BCD格式,表示V1.11
    0x00,                                   //bCountryCode,硬件设备所在国家的国家代码​,如果不限制,该字段为0
    0x01,                                   //bNumDescriptors,下级描述符的数量。可以是报告描述符,也可以说是物理描述符。该值至少为1,表示至少有一个报告描述符。
    0x22,                                   //bDescriptorType,下级描述符的类型。0x22是报告描述符。
    0x3f,0x00,                              //wDescriptorLength,下级描述符的长度,0x3f是63bytes
    
    
    //************************************端点描述符************************************//
    0x07,                                   //bLenght,描述符的长度,7bytes
    0x05,                                   //bDescriptorType,描述符的类型,0x05是端点描述符
    0x81,                                   //bEndpointAddress,端点的地址,Bit7决定该端点的方向,1是IN,0是OUT(对于控制端点可以忽略);Bit6-4,保留;BIt3-0:端点号;该处设置为0x81,即IN(设备上传主机)的1号端点
    0x03,                                   //bmAttributes,端点属性.Bit7-2保留(同步有定义)BIt1-0:00控制,01同步,02批量,03中断。
    EPI_IN_SIZE,0x00,                       //wMaxPacketSize,端点收发信息包的最大长度,单位是字节。#define EPI_IN_SIZE 0x08
    0x0A                                    //bInterval,传输间隔   1:每1个帧    2:每2个帧    4:每4个帧    8:每8个帧。对于全速USB,总线间隔是一帧,一帧的长度是 1 毫秒。0x0A设置为10,则表示主机每隔10ms向端点要一次数据。

hid描述符
在这里插入图片描述

4. 主机枚举设备----激活设备配置

在这里插入图片描述

//主机请求-激活设备配置
0x00,0x09,0x01,0x00,0x00,0x00,0x00,0x00//0x01表示告知设备使用1号配置

4. 主机枚举设备----HID类设备主机常见类命令请求

在这里插入图片描述类命令请求走控制传输通道。

//主机请求----设置HID设备上传速率
0x21,0x0A,0x00,0x00,0x00,0x00,0x00,0x00//0x00表示告知设备在有数据改变的时候再上传

//主机请求----下传报表 (数据)
0x21,0x09,0x00,0x00,0x00,0x00,0x00,0x00//用于点亮键盘上的LED灯,如Caps Lock键灯、Num键灯等

5. 主机枚举设备----获取报表描述符(HID类设备独有)

报表描述符定义了HID类设备的数据格式和用法。主机只有获取了报表描述符,才能正确地解析数据。报表描述赋予了HID类设备更大的弹性,可以组合成各种不同的功能。
报表描述符有自己的格式,与USB其他描述符完全不一致。HID Report 描述符,不像其他的描述符,仅仅是一个简单的一组数据。其主要由 Item 组成的,其定义依赖于 Report。HID 规范,定义了 3 种类型 的 Item:Main Item、Global Item、Local Item。
在这里插入图片描述

//主机请求----获取报表描述符
0x81,0x06,0x00,0x22,0x00,0x00,0xFF,0x00

//键盘设备上传报表描述符内容
0x05,0x01,// Usage Page,Global, Generic Desktop
0x09,0x06,//Usage, Local, KeyBoard 
0xA1,0x01,// Collection,Main, Application

    0x05,0x07,//Usage Page, Global, KeyBoard    
    
    //第1字节(8个功能键)
    0x19,0xe0,// Local Usage Min (KeyBoard LeftControl)........... (224)
    0x29,0xe7,// Local Usage Max (KeyBoard Right GUI)............. (231)
    0x15,0x00,// Global Logical Min............................... (0)
    0x25,0x01,// Global Logical Max............................... (1) 
    0x95,0x08,// Global ReportCount............................... (8) 
    0x75,0x01,// Global ReportSize.................................(1) 
    0x81,0x02,// Main Input(Data,Var,Abs).............(Data, Variable, asolute)
    
    //第2字节(补充的常量,保留)
    0x95,0x01,// Global ReportCount............ (1)
    0x75,0x08,// Global ReportSize............. (8)
    0x81,0x01,// Main Input...................(Constant)
    
    //第3字节(用于键盘点灯,3bit对应3个灯。注意,本例没有下传端点,所以下传数据走控制端点0。这里定义了下传数据的意义,主机按此发送,设备按此解析并做出相应点灯动作)
    0x95,0x03,// Global ReportCount.................. (3)
    0x75,0x01,// Global ReportSize................... (1)
    0x05,0x08,//Usage Page ..........................( LEDs )
    0x19,0x01,//Usage Minimum........................ (1)
    0x29,0x03.//Usage Maximum.........................(3)
    0x91,0x02,//Main Output...........................(Data, Variable, solute)
    //第3字节(再补5bit,将上面变成1个字节)
    0x95,0x05,// Global ReportCount.................. (5)
    0x75,0x01,// Global ReportSize................... (1)
    0x91,0x01,// Main Output..........................(Constant)
    
    
    //第4-9字节(6个字节,数组形式。键盘上剩余101个按键,键盘是阵列方式,不是一个按键占一个bit)
    0x95,0x06,// Global ReportCount................. (6)
    0x75,0x08,// Global ReportSize.................. (8)
    0x15,0x00,// Global Logical Min................. (0)
    0x25,0x65,//Global Logical Max.................. (101)
    0x05,0x07,//Usage Page........................... (Keyboard/Keypad)
    0x19,0x00,// Local Usage Min..................... (0)
    0x29,0x65,// Local Usage Max..................... (101)
    0x81,0x00,// Main Input......................... (Data,Ary)
0xc0      // Main, End collection
  • Main Item

HID 规范定义了 5 种 Main Item Tag:

与数据关联的 Input、Output、Feature;
Input Item:描述由一个或多个物理控件提供的输入数据的信息。
Output Item:描述由一个或多个物理控件提供的输出数据的信息。
Feature Item:描述设备输入和输出不用于最终用户 — 例如,软件功能或控件面板切换。

与数据无关的Collection、End Collection:
Collection Item:标识两个或多个数据(input、output或feature)之间的关系。
End Collection:当 Collection 项打开一个数据集合时,End Collection 项关闭一个集合

Main Item 定义如下:其中bit7~bit2 表示 Item Tag 和 Type,nn 表示Item 后跟的data 域数据长度。比如nn为01,说明后跟1个字节数据;nn为10,说明后跟2个字节数据。
在这里插入图片描述
Input/Output/Feature​

bit0:表示是数据还是常量
bit1:表示是数组还是变量字段
bit2:表示是绝对数值(基于固定原点)还是相对数值(指示上次报告值变化)
bit3:指示当达到极高或极低值时数据是否“翻滚”
bit4:表示来自设备的原始数据是否经过某种方式处理,不再代表测量的数据与报告的数据之间的线性关系
bit5:指示控件是否具有在用户未与控件进行物理交互时将返回的首选状态。
bit6:指示控件是否处于不发送有意义数据的状态。空状态的一种可能用途是用于需要用户与控件进行物理交互以使其报告有用的数据。
bit7:保留
bit8:指示控件发出固定大小的字节流。数据字段的内容由应用程序决定。缓冲区的内容不会解释为单个数字量。由缓冲字节项定义的报表数据必须在8位边界上对齐。
bit31-9:保留

​Collection/End Collection​

Physical:物理集合用于表示在一个几何点收集的数据点的一组数据项。这对于可能需要将测量或感测数据集与单个点相关联的感测设备很有用。它并不表示一组数据值来自一个设备,例如键盘。在报告多个传感器位置的设备的情况下,物理集合用于显示哪些数据来自每个单独的传感器。
Application:用于识别单个设备中服务于不同条目的的项目组。常见的例子是键盘或鼠标。带有集成指针设备的键盘可以定义为两个不同的应用程序集合。数据报告通常(但不一定)与应用程序集合相关联(每个应用程序至少有一个报告 ID)
Logcal:当一组数据项形成复合数据结构时,将使用逻辑集合
Report:定义一个包含报表中所有字段的逻辑集合。此集合中将包含唯一的报告 ID。应用程序可以轻松确定设备是否支持某个功能。请注意,可以为报告集合声明任何有效的报告 ID 值。
Name dArray:命名数组是包含选择器用法数组的逻辑集合。对于给定的功能,类似设备使用的选择器集可能会有所不同。在记录硬件寄存器时,字段的命名是常见的做法。要确定设备是否支持特定功能(如状态),应用程序可能必须先查询几个已知的状态选择器用法,然后才能确定设备是否支持状态。Named Array 用法允许对包含选择器的 Array 字段进行命名,因此应用程序只需查询 Status 用法即可确定设备支持状态信息。
Usage Switch:是一个逻辑集合,用于修改它所包含的用法的含义。
Usage Modifier:修改附加到包含集合的用法的含义。用法通常为控件定义单一操作模式。使用修饰符允许扩展控件的操作模式。
07~7f:扩展
80~ff:厂商自定义
  • Global Item

全局项目主要用来选择用途页(Usage Page),定义数据域的长度(Report Count)、数量(Report Size)、报告ID(ReportId)等。

全局项目描述对后续的所有项目有效,除非遇到有新的全局项目。

Usage Page(用途页)
Logical Minimum(逻辑最小值)
Logical Maxinum(逻辑最大值)
Physical Minimum(物理最小值)
Physical Maximum(物理最大值)
Report Size:数据域大小,表示每个数据域有多少位
Report Count:数据域有多少个数据域。
ReportId:报告ID
Unit Exponent
Unit:单位
PUSH:将全局项状态表的副本放置在堆栈上
POP:用堆栈中的顶部结构替换全局项状态表。

Global Item 定义如下:其中bit7~bit2 表示 Item Tag 和 Type,nn 表示Item 后跟的data 域数据长度。
在这里插入图片描述在这里插入图片描述

Usage Page:指定设备功能。 Logical Minimum与 Logical
Maximum项目:定义报表的变量(Variable)或阵列(Array) 数据的限制范围,此限制范围以逻辑单位来表示。 Physical
Minimum和Physical Maximum:定义变量或数组的限制范围,此范围以物理单位来表示 Uint
Exponent:定义数值是基于10的基数 Unit:单位 Report Size:指定报表数据区域占的位数 Report
Count:报表数据区域数目 Report ID:报表ID Push:将global 项目状态表送入堆栈 Pop:从堆栈中恢复项目状态表

  • Local Item

Local item标记定义控件的特征。这些项目不会影响到下一个main item。如果一个主项定义了多个控件,则它前面可能有几个类似的local item。

Usage
Usage Minimum
Usage Maximum       

Local Item 定义如下:其中bit7~bit2 表示 Item Tag 和 Type,nn 表示Item 后跟的data 域数据长度。
在这里插入图片描述

Usage:用法索引值,表示对于项目或者集合建议的用法。用于当一个项目描述多个控制,对每一个变量和数组元素都有建议的用法 Usage
Minimum与 Usage Maximum项目:定义阵列和位图中控制第一个和最后一个用法 Designator
Index:确定用于控制的实体,指向物理描述符的目标 Designator Minimum与 和 Designator
Maximum项目:定义阵列和位图中控制起始和终止索引 String Index:确定字符串描述符索引值 String Minimum与 和
String Maximum项目:定义阵列和位图中字符串索引最小值和最大值
Delimiter:定义一组Local 项目的开始和结束。1=开始, 0=结束。

注意:报表上传字节数大于端点一次传输最大字节数时,会自动分包传输。USB主机会等待字节数达到报表字节数时才会从驱动层上传数据至应用层解析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/571606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux——进程概念详解

目录 一.什么是进程? 2.PCB的含义,为什么会存在PCB? 整体解析操作系统对进程的管理方式: 二.对比Windows系统: 三.Linux——进程 学习一个新指令:ps ajx 四.接下来学习几个进程的系统调用函数&#xff1…

版图设计IC617 virtuoso工具使用,创建一个库

库是用于创建自己的芯片的,一个库可以看成一个芯片,一个芯片又包含各种元器件。cell就是用于定义具体的元器件的。元器件包含版图,原理图,逻辑符号,等各种视图。 一 创建库过程 1.1 库的创建 1. 在Library Manager下…

PaLM 2重磅来袭,深挖谷歌92页技术报告亮点总结

谷歌CEO桑达尔・皮查伊(Sundar Pichai)亲切地将2023年称为是一个AI busy year,当地时间5月10日,谷歌IO大会上,谷歌大语言模型PaLM 2虽迟但到。作为一个“AI-first”公司,谷歌在Bard聊天机器人爆出事实性错误…

异常排查 | 重复Cookie访问导致HTTP请求引发空指针异常

文章目录 一、场景描述二、异常说明三、查找问题四、调试排查五、思考分析六、解决方案七、写在最后 近几日,遇到一个困惑了我很久的异常,是浏览器页面向Tomcat服务器发起HTTP请求时,服务器发还回来的一处异常 java.lang.NullPointerExceptio…

html实现酷炫星空可视化大屏(附源码)

文章目录 1.设计来源1.1 可视化架构1.2 可视化大屏界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/130884793 html实现酷炫星空可视化大屏(附源码) ,html大…

华为OD机试真题(Java),跳跃游戏 II(100%通过+复盘思路)

一、题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]0i j < 返回到达 num…

Talk预告 | ICML‘23 Oral 字节跳动 AI Lab 研究员郑在翔:人工智能如何助力蛋白质设计?

本期为TechBeat人工智能社区第500期线上Talk&#xff01; 北京时间5月25日(周四)20:00&#xff0c;字节跳动 AI Lab 研究员 — 郑在翔的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “人工智能如何助力蛋白质设计 ”&#xff0c;届时将介绍基于…

springboot+vue智慧食堂系统(java项目源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的智慧食堂系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&a…

Rancher添加集群报错:Etcd Cluster is not healthy

原因&#xff1a; 有一台虚拟机在升级内核失败后&#xff0c;回滚至快照。但由于快照版本太老旧&#xff0c;和当前的rancher版本不匹配&#xff0c;服务器上的agent等需要清楚后&#xff0c;重新在rancher添加集群&#xff1b;但是只删除了rancher镜像以及agent相关容器&#…

Linux设备树:删除节点和属性的方法

[摘要]&#xff1a;本文主要介绍了在设备树中删除节点&#xff08;node&#xff09;和属性&#xff08;property&#xff09;的方法。为了便于理解&#xff0c;笔者先介绍了 dtsi 和 dts 的关系&#xff0c;然后构建了虚拟的需求场景&#xff0c;最终给出示例。 背景知识 设备…

易基因:MeRIP-seq等揭示m6A reader YTHDF1在结直肠癌PD-1免疫治疗中的作|Gut

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 结直肠癌&#xff08;colorectal cancer &#xff0c;CRC&#xff09;是全球最常见的癌症之一&#xff0c;转移性CRC患者的5年生存率低于20%。免疫检查点阻断&#xff08;Immune checkpo…

基于LLMs的多模态大模型(MiniGPT-4,LLaVA,mPLUG-Owl,InstuctBLIP,X-LLM)

这个系列的前一些文章有&#xff1a; 基于LLMs的多模态大模型&#xff08;Visual ChatGPT&#xff0c;PICa&#xff0c;MM-REACT&#xff0c;MAGIC&#xff09;基于LLMs的多模态大模型&#xff08;Flamingo, BLIP-2&#xff0c;KOSMOS-1&#xff0c;ScienceQA&#xff09; 前…

《汇编语言》- 读书笔记 - 第3章-寄存器(内存访问):mov、add、sub、push、pop

《汇编语言》- 读书笔记 - 第3章-寄存器&#xff08;内存访问&#xff09; 3.1 内存中字的存储问题 3.1 3.2 DS 和 [address]问题 3.2 3.3 字的传送问题 3.3问题 3.4 3.4 mov、add、sub 指令3.5 数据段问题 3.53.1~3.5 小结检测点 3.1 3.6 栈3.7 CPU 提供的栈机制问题 3.6 3.8 …

基于LSB实现文本、图片、压缩包的隐藏

关于LSB的相关介绍&#xff1a; LSB全称为 Least Significant Bit&#xff08;最低有效位&#xff09;&#xff0c;是一种基于图片最低有效位修改储存信息的隐写方法&#xff0c;在CTF杂项中经常会遇到&#xff0c;LSB属于空域算法中的一种&#xff0c;是将信息嵌入到图像点中…

OPCUA从入门到精通看这里就够了

本文将会从以下几个方面介绍 1.OPCUA是什么 2.OPCUA常用的工具有那些 3.OPCUA的官网 4.使用opcua常用的方法和功能介绍 5.根据官网自己封装了一个opcuaclient类&#xff0c;并说明每个方法的用处 6.根据4中的opcuaclient类自己写了demo 本文所有用到的资料在此下载包括U…

Android平台音视频推送选RTMP还是GB28181?

技术背景 早在2015年&#xff0c;我们发布了RTMP直播推送模块&#xff0c;那时候音视频直播这块场景需求&#xff0c;还不像现在这么普遍&#xff0c;我们做这块的初衷&#xff0c;主要是为了实现移动单兵应急指挥系统的低延迟音视频数据传输。好多开发者可能会疑惑&#xff0…

信息系统建设和服务能力评估证书CS

信息系统建设和服务能力评估体系CS简介 简介&#xff1a;本标准&#xff08;团标T/CITIF 001-2019&#xff09;是信息系统建设和服务能力评估体系系列标准的第一个&#xff0c;提出了对信息系统建设和服务提供者的综合能力要求。 发证单位&#xff1a;中国电子信息行业联合会。…

整型,浮点型,大小字节知识细节一网打尽!

目录 一. 整型 2.11 C语言内置整型 2.12整型在内存如何存储&#xff1f; 2.12 原码&#xff0c;反码&#xff0c; 补码 2.13 当 整型遇上unsigned 2.1 unsigned 与 signed 解析 2.2 printf 输出 有无符号数解析 2.3 有关练习 二. 浮点型 2.51 浮点型与整型在存储上的…

视频会议产品对比分析

内网视频会议系统如何选择&#xff1f;有很多单位为了保密&#xff0c;只能使用内部网络&#xff0c;无法连接互联网&#xff0c;那些SaaS视频会议就无法使用。在内网的优秀视频会议也有很多可供选择&#xff0c;以下是几个常用的&#xff1a; 1. 宝利通&#xff1a;它支持多种…

港联证券|新产品“内卷”,史上最火光伏展能否带动光伏板块行情

在光伏成为“能源老大”之前&#xff0c;指数何时能够跑赢A股股主要股指&#xff0c;或是散户关注的重点。 时隔两年&#xff0c;SNEC上海光伏展如约举办。本届展会吸引了3000余家光伏公司参展&#xff0c;累计50万人涌进场馆&#xff0c;现场人群拥挤度丝毫不逊于过去两年资金…