USB设备编程

news2024/11/25 3:58:49

文章目录

    • 问题
      • 1、为什么一接入 USB 设备, PC 机就能发现它?
      • image.png
      • USB 设备刚接入 PC 时,还没有编号;那么 PC 怎么把"分配的编号"告诉它?
      • 硬件框架
      • 2、软件框架
      • usb发信号
        • usb信号
        • 位填充+反向不归零编码
      • 发送/接收数据的过程
        • 包的格式
        • pid名
        • 事务的组成:
        • 有哪些 USB 包?
      • 传输:
      • 设备描述符
        • 是什么
        • 具体例子
      • 移植usb
      • 移植过程中出现的问题
      • 使用freertos来改造收发函数
        • 用到信号量,二进制信号量
        • 用到队列来放入数据后,从对列中读数据
        • 如何使用
        • 注意:

5v电源\GND地\差分信号线;
一共4条线;
中间两条差分信号来传输信号;

问题

1、为什么一接入 USB 设备, PC 机就能发现它?

PC 的 USB 口内部, D-和 D+接有 15K 的下拉电阻,未接 USB 设备时为低电平。 USB设备的 USB 口内部, D-或 D+接有 1.5K 的上拉电阻;它一接入 PC,就会把 PC USB 口的 D-或D+拉高,从硬件的角度通知 PC 有新设备接入 ;
如图画出的这个引脚的电压就被拉高了,就有信号的跳变;

image.png

2、PC 机上接有非常多的 USB 设备,怎么分辨它们?
每一个 USB 设备接入 PC 时, USB 总线驱动程序都会给它分配一个编号。 PC 机想访问某个 USB 设备时,发出的命令都含有对应的编号(地址) ;

USB 设备刚接入 PC 时,还没有编号;那么 PC 怎么把"分配的编号"告诉它?

新接入的 USB 设备的默认编号是 0,在未分配新编号前, PC 使用 0 编号和它通信。

硬件框架

hub表示可以接扩展的usb接口,func就是接具体的功能的usb接口;
最多接到tiger7之后只能是func了;
1、USB Host:它跟处理器相连,处理器通过 USB Host 跟各类 USB 设备通信。 USB Host 中集成有一个 root hub ;
2、USB Device:
这分为两类设备
a. Hub:用来扩展 USB 接口
b. Function:就是普通的 USB 设备,比如 U 盘、声卡等

image.png

2、软件框架

APP可以通过usb设备驱动程序访问usb设备,也可以绕过设备驱动直接使用host程序来访问usb设备image.png

高速模式
先打开全速模式;
设备给hub发送高速模式的信号;
hub收到信号后发出高速模式的信号后,device收到就行了;
hub port是下拉电阻;
device是下拉电阻;
image.png
设备端是上拉电阻,hub是下拉电阻

usb发信号

usb信号

对比I2c和spi通信,这两个是两条线,时钟线SCK和数据线SDA
这种是同步信号
image.pngimage.png
usb是一条通道,先发一段信号,接收方收到信号时能计算出周期,从而按照这个周期来接收

位填充+反向不归零编码

反向不归零编码:如下,到下一个波形发生变化就是0,不变就是1;
位填充:连续发送 6 个 1 后面会插入 1 个 0 ;

image.png

发送/接收数据的过程

包的格式

image.png
1.SOP:用来表示包的起始
2.SYNC:用来同步时钟
3.PID:表示包的类型
4.地址:在 USB 硬件体系中,一个 Host 对应多个 Logical Device,那么 Host 发出的包,如何确定发给谁?a. 发给所有设备:包里不含有设备地址b. 发给某个设备:包里含有设备地址、端点号
5.帧号、数据等跟 PID 相关的内容
6.CRC 校验码
7.EOP:用来表示包的结束

pid名

image.png

host发送命令包、数据包
device的握手包
image.png
接收:
host发命令包
device发送数据包
host发送握手包

事务的组成:

事务由包组成、包由域组成(域就是上图的sop域、sync域等等)、域由bit组成
事务分三个阶段:命令、数据、握手

有哪些 USB 包?

根据包数据里的 PID 的 bit1, bit0 可以分为 4 类:
令牌包(Token): 01B
数据包(Data): 11B
握手包(Handshake): 10B
特殊包(Special): 00B

传输:

批量传输,就是批量事务传输
中断传输,用中断事务,必须周期性的发起这些传输
实施传输,没有握手阶段,只用命令和数据阶段

控制传输:
set up;set up 三个事务:token \data\ hand shake

data stage:一个或者多个批量传输,每个批量传输里面都有token \data\ hand shake,这三个阶段

status stage:一个批量事务

具体例子:
批量传输
image.png
控制传输
第二阶段是批量传输
image.png
第三阶段是状态阶段

设备描述符

是什么

使用设备描述符来描述设备、配置、接口、端点;
有设备描述符、配置描述符、接口描述符、端点描述符;
所谓描述符,就是一些格式化的数据,用来描述信息;
在linux里面看是这样的
image.png
例如usb手册中端点描述符,各个数据的含义如下
image.png

具体例子

0x80是bit7置位1
1000 0000
从bit0开始算的,所以是bit7,第8个数字是1;

流程
1、获取设备描述符
image.png
2、设置地址;host把地址发个设备,这个只用setup阶段和data阶段前两个阶段
image.png
3、获取设备描述符;使用新地址,重新读取设备描述符,设备描述符长度是 18
image.png
4、获取配置描述符;它传入的长度是 255,想一次性把当前配置描述符、它下面的接口描述符、端点描述符全部读出来
image.png
5、设置配置
image.png

移植usb

没有thread,需要自己移植过来配置;
移植过程不详细展开;
需要添加宏开关: UX_INCLUDE_USER_DEFINE_FILE ;
表示去用用户定义的那些头文件;
image.png

4层对应四个group文件
image.png
image.png

看一下描述符的厂商id
image.png

usb有接收和输出两个端点
assignEp

移植过程中出现的问题

(6): warning: ISO C99 requires whitespace after the macro name [-Wc99-extensions]#define STM32H563xx.UX_INCLUDE_USER_DEFINE_FILE 1
HWOG7@RDWDA@@G(RSRSDGO4.jpg
解决办法:
image.png
这边应该是空格,我敲了一个.所以报错了
image.png

使用freertos来改造收发函数

image.png

这函数只是启动传输,他会立刻返回;
image.png

用到信号量,二进制信号量

SemaphoreHandle_t xBinarySemaphore;
发送:
1、先定义出来
image.png
2、创建
image.png
3、等待give后就take
image.png
image.png

用到队列来放入数据后,从对列中读数据

1、定义队列
image.png

2、创建队列
(200,1)200个数据,一个数据1个字节
image.png
3、写入数据
image.png
4、从队列中读数据,单独写一个函数
image.png
当pc把数据发给开发板子后
image.png
read就会被调用
image.png

如何使用

定义出来,直接用getchar
image.png

注意:

读队列和写队列都要有保护机制:
就是if(队列),队列不为空才去读,为空则返回-1表示错误信息;不然就无法识别usb设备
函数添加保护机制,如果队列为空就要报错
image.png

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

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

相关文章

毕业年薪20w起!25届最近5年南京信息工程大学自动化考研院校分析

南京信息工程大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近4年考研分数情况 四、近4年招生录取情况 五、最新一年分数段图表 六、历年真题PDF 七、初试大纲复试大纲 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、…

设置systemctl start kibana重启kibana

1、编辑kibana.service vi /etc/systemd/system/kibana.service [Unit] DescriptionKibana Server Manager [Service] Typesimple Useres ExecStart/home/es/kibana-7.10.2-linux-x86_64/bin/kibana PrivateTmptrue [Install] WantedBymulti-user.target 2、启动kibana # 刷…

13大最佳工程项目管理系统软件盘点

国内外主流的13款工程项目管理系统软件:Worktile、中建软件、泛微建筑项目管理软件、LiquidPlanner、Wrike、建文软件、广联达、Microsoft Project、泛普软件、Procore、Buildertrend、Fieldwire、Autodesk Construction Cloud。 在快速变化的工程领域,有…

ssh实验室设备管理系统

ssh实验室设备管理系统 实验室设备管理系统 管理员:通知管理、预约 借用模块、设备信息 维修模块等 教师和学生:预约实验室模块 技术: java ssh spring mysql 环境:idea java1.8 mysql5.7 源码➕数据库文件➕文档

Java云HIS医院管理系统源码 B/S架构 一体化电子病历系统源码 基于云端SaaS平台源码,采用B/S(Browser/Server)架构

“云”指系统采用云计算的技术和建设模式,具有可扩展、易共享、区域化、易协同、低成本、易维护、体验好的优势。“H”是医疗卫生,由原来医院 (Hospital)到现在的医疗卫生 (Healthcare),拓展了 H的内涵与外延。云 HIS 重新定义了医院信息系统…

表 达式树

》》》可以借助 LINQPad工具 using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using System.Transactions;namespace EFDemo {public cla…

直流遥控器DC10-100V 水泵电机远程遥控 SL3036降压恒压

水泵电机的远程遥控技术已经成为工业、农业以及民用领域不可或缺的重要一环。其中,直流遥控器DC10-100V以其出色的性能和广泛的应用领域,成为了市场上的一颗璀璨明星。而SL3036降压恒压技术的运用,更是为水泵电机的远程遥控提供了强有力的支持…

OpenGL-ES 学习(6)---- Ubuntu OES 环境搭建

OpenGL-ES Ubuntu 环境搭建 此的方法在 ubuntu 和 deepin 上验证都可以成功搭建 目录 OpenGL-ES Ubuntu 环境搭建软件包安装第一个三角形基于 glfw 实现基于 X11 实现 软件包安装 sudo apt install libx11-dev sudo apt install libglfw3 libglfw3-dev sudo apt-get install…

WPF学习(3)--不同类通过接口实现同种方法

一、接口概述 1.接口的概念 在C#中,接口(interface)是一种引用类型,它定义了一组方法、属性、事件或索引器,但不提供实现。接口只定义成员的签名,而具体的实现由实现接口的类或结构体提供。接口使用关键字…

Tita 360评估:有效 360度反馈流程的 10 大步骤

宣传过程 如果你的公司首次引入多方位反馈或 360 度反馈,那么向所有利益相关者描述这一流程至关重要。由于流程太新,很多人还不了解。确保参与该流程的每个人都了解其目的,以及将如何实施该流程和使用其结果。花时间在一对一会议、小组会议和…

6.每日LeetCode-数组类,找到所有数组中消失的数字(Go)

题目 448找到所有数组中消失的数字.go 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 示例 1: 输入:nums [4,3,2,7,8,2,…

后仿真中《SDF反标必懂连载篇》之 <INTERCONNECT/IOPATH> 庐山面目

对于SDF INTERCONNECT ENTRY 描述,我们在之前的文章有详解。 读万卷书,行万里路。 实践很重要。 今天,搞一下SDF INTERCONNECT / IOPATH 延迟数据信息,究竟反标的是哪一路径延时? 一 IOPATH (CELL(CELLTYPE …

STM32F103C8T6 IAP升级

目录 0x00 前言0x01 flash分区0x02 Bootloader0x02 APP设置0x03 升级程序编写0x04 固件烧录 0x00 前言 STM32有三种烧录程序的方式:烧录器下载、拉高boot1进行串口下载(ISP)还有通过在 Bootloader中进行flash擦除和写入(IAP)。 在进行开发之前,你需要了…

上海晋名室外危废品暂存柜助力储能电站行业危废品安全储存

近日又有一台SAVEST室外危废暂存柜项目成功验收交付使用,此次项目主要用于储能电站行业废油、废锂电池等危废品的安全储存。 用户单位在日常工作运营中涉及到废油、废锂电池等危废品的室外安全储存问题。4月中旬用户技术总工在寻找解决方案的过程中搜索到上海晋名的…

蒂姆·库克解释Apple Intelligence和与ChatGPT合作的区别|TodayAI

在2024年全球开发者大会(WWDC 2024)上,苹果公司首席执行官蒂姆库克(Tim Cook)隆重介绍了公司的最新人工智能(AI)计划——Apple Intelligence,并宣布了与OpenAI的ChatGPT的合作。虽然…

突破管理瓶颈:基于前端技术的全面预算编制系统解析

前言 在现代商业环境中,预测销售数据和实际成本是每个公司CEO和领导都极为重视的关键指标。然而,由于市场的不断变化,准确地预测和管理这些数据变得愈发具有挑战性。为了应对这一挑战,建立一个高效的系统来管理和审查销售数据的重…

展位展台设计要注意的问题

1、选择专业的展台设计公司 特装比一般展位设计更要保证展台的独特性,更具可塑性。任何疑问和要求都能得到专业的解答。不论是展台的整体结构,还是展台搭建材料,都能实现良好的沟通,两方面都可以确保参加展会的双赢。 2、缜密的展…

智能家居建材,打造未来家居生活

智能家居建材,正引领着家居行业的新潮流。它融合了先进的科技与人性化的设计,为我们打造了一个充满未来感的家居新体验。 想象一下,当你走进家门,智能门锁自动识别你的身份,轻轻一推即可进入。室内环境自动调节到最舒适…

生成式人工智能 - 本地windows 11 + PyCharm运行stable diffusion流程简述

一、环境说明 硬件:本地电脑windows11、32.0 GB内存、2060的6G的卡。 软件:本地有一个python环境,主要是torch 2.2.2+cu118 二、准备工作 1、下载模型 https://huggingface.co/CompVishttps://huggingface.co/CompVis 进入上面的网址,我这里下载的是这个里面的 …

达到1k stars后,我对大模型开源教程的反思!(附教程)

前 言 “五一”节后第一个开心的消息是我们开源的大模型基础项目(https://github.com/datawhalechina/so-large-lm)已经达到1k stars⭐️了。这个开源项目是为了提供浅显易懂且前沿的大模基础知识而打造的,能收获1k个stars⭐️也是对这个项目的肯定。我为一起付出努…