分享一个软件模拟USB,支持HID

news2024/11/15 13:44:47

文章目录

  • 一、特性
  • 二、相对于替代解决方案的优势
    • (1) 为什么不选择内置USB硬件的微控制器呢?
    • (2) 与带 USB 硬件的微控制器相比的优势
    • (3) 与单独的 USB 外设相比的优势
    • (4) 与其他纯固件实现相比的优势
  • 三、链接

在这里插入图片描述

一、特性

  1. 完全符合 USB 1.1 标准的低速设备,但处理通信错误和电气规格除外。
  2. 支持多个端点:一个控制端点、两个中断/批量输入端点和多达 7 个中断/批量输出端点。(请注意,USB 规范禁止低速设备的批量端点,但 V-USB 在一定程度上支持它们。
  3. 默认情况下,传输大小最大为 254 字节,更多作为配置选项。
  4. 带有可自由使用的 USB 标识符(供应商 ID 和产品 ID 对)
  5. 可在任何具有至少 2 kB 闪存、128 字节 RAM 和至少 12 MHz 时钟速率的 AVR 微控制器上运行。
  6. 无需UART、定时器、输入捕获单元或其他特殊硬件(一个边沿触发中断除外)。
  7. 可采用12 MHz、15 MHz、16 MHz、18 MHz或20 MHz晶振或12.8 MHz或16.5 MHz内部RC振荡器进行时钟。
  8. 高级功能是用 C 语言编写的,并且有很好的注释。
  9. 只有大约 1150 到 1400 字节的代码大小。
  10. 许可证:开源或商业。

二、相对于替代解决方案的优势

(1) 为什么不选择内置USB硬件的微控制器呢?

其中有几个可用(见)。或者将您选择的微控制器与 USB 芯片相结合?

(2) 与带 USB 硬件的微控制器相比的优势

  1. 标准 AVR 控制器通常更容易获得。
  2. 大多数支持 USB 的控制器仅提供 SMD 格式,这对于业余爱好者来说几乎是不可能的。
  3. V-USB 带有一个免费的共享供应商/产品 ID 对。
  4. 一个好的免费 ANSI-C 编译器 (GNU gcc) 和 Windows 的免费开发系统 (WinAVR) 可用于 AVR。
  5. AVR 控制器比大多数集成 USB 的控制器更快,而且成本更低。
  6. 独立操作:某些 USB 控制器将其固件从主机下载到 RAM 中。如果没有与主机的连接,它们就无法工作。
  7. AVR 控制器具有片上 EEPROM。

(3) 与单独的 USB 外设相比的优势

  1. 无需额外费用。
  2. 没有额外的硬件复杂性:更简单的PCB,更少的故障。
  3. 断开 USB 连接时不会额外消耗电量。这可能与电池供电的设备有关。
  4. 在选择 USB 描述符方面有更大的自由度。
  5. V-USB 带有一个免费的共享供应商/产品 ID 对。
  6. 使用的硬件资源很少:只有两到三个 I/O 引脚。

(4) 与其他纯固件实现相比的优势

Igor Češko 为 AVR 系列微控制器提供了类似的驱动程序。与 Igor 的驱动程序相比,我们的 USB 驱动程序具有以下优点:

  1. 所有可定制的代码都用 ANSI-C 编写,因此更易于维护。
  2. 模块化概念:更易于集成到现有设计中。
  3. 尽管有高级语言模块,但代码大小略小。
  4. 更快:所有编码/解码(USB 需要 NRZI 编码和位填充)都是实时完成的,而不是在存储原始数据流后的主循环中完成的。
  5. 可以更好地自定义更多端点、USB 描述符。
  6. V-USB 带有一个免费的共享供应商/产品 ID 对。
  7. 记录标准符合性水平(限制和潜在问题的描述)。
  8. 根据 GNU 通用公共许可证的条款或商业许可证获得许可。

迪克·斯特里夫兰(Dick Streefland)将旧版本的V-USB剥离到最基本的部分。他的代码更易于阅读和理解,但缺少 V-USB 中的一些功能:

  1. V-USB 最多支持 4 个端点。这允许实现符合 HID 或 CDC 设备类的设备。
  2. V-USB 通过了 usb.org 测试实用程序中的测试。
  3. V-USB 支持许多不同的时钟速率,有些甚至带有内部 RC 振荡器。

三、链接

官方

gitee

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

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

相关文章

Javascript每天一道算法题(十五)——轮转数组_中等(一行解决轮转数组)

文章目录 1、问题2、示例3、解决方法(1)方法1——while遍历(较为复杂,不推荐)(2)方法2(直接截取后插入,推荐)(3)方法3——优化方法2&a…

快速成为接口测试高手:实用指南!

大量线上BUG表明,对接口进行测试可以有效提升产品质量,暴露手工测试时难以发现的问题,同时也能缩短测试周期,提升测试效率。但在实际执行过程中,接口测试被很多同学打上了“上手难,门槛高”的标签。 本文旨…

【Spring Boot 源码学习】自定义 Banner 信息打印

Spring Boot 源码学习系列 自定义 Banner 信息打印 引言往期内容主要内容1. ResourceBanner 打印1.1 添加默认的 banner.txt 资源文件1.2 指定任意路径的资源文件1.3 添加自定义的信息 2. ImageBanner 打印2.1 添加默认的图像资源文件2.2 指定任意路径的图像资源文件2.3 添加自…

2023年【熔化焊接与热切割】免费试题及熔化焊接与热切割模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 熔化焊接与热切割免费试题是安全生产模拟考试一点通生成的,熔化焊接与热切割证模拟考试题库是根据熔化焊接与热切割最新版教材汇编出熔化焊接与热切割仿真模拟考试。2023年【熔化焊接与热切割】免费试题及…

16个产品经理必备的原型设计软件盘点

原型就像一幅画,比千言万语好。将产品或界面的概念转化为特定的对象是设计过程中的一个关键点,也是每个设计师创作过程的一部分。 每个设计师都应该有一个合适的原型工具。今天,将介绍18种设计原型工具,让我们看看! …

LV.12 D19 ADC实验 学习笔记

一、ADC简介 1.1 ADC ADC(Analog to Digital Converter)即模数转换器,指一个能将模拟信号转化为数字信号的电子元件 1.2 ADC主要参数 分辨率 ADC的分辨率一般以输出二进制数的位数来表示,当最大输入电压一定时,位数越高&#xff0c…

Python基础之中常用的数据类型总结,从入门到入土的python教程之一。

文章目录 Python 中常用的数据类型包括:Python 中布尔类型(bool)Python 中的数字类型概述Pyhon中的字符串概述Python 中的List概述Python 中的元组类型(tuple)Python中的字典(Dictionary)Python中的集合(Set)Python中的…

静态web服务器开发之HTTP协议

文章目录 版权声明HTTP协议网址HTTPS补充:HTTP的无状态特性浏览器访问Web服务器流程HTTP协议请求报文HTTP GET请求报文分析POST请求方式要点总结 HTTP协议响应报文HTTP 响应报文分析HTTP 状态码要点总结 HTTP协议通信过程查看 版权声明 本博客的内容基于我个人学习…

基于uniapp的 电子书小程序——需求整理

前言 想开发一个很简单的 电子书阅读小程序,要怎么做的。下面从功能、数据库设计这一块来说一下。说不一定能从某个角度提供一些思路 开发语言 springcloud uniapp 小程序(vue2)mysql 说明 电子书的主题是电子书,我们在日常…

运行软件报错找不到vcruntime140.dll无法继续执行代码怎么办-6个解决方法

vcruntime140.dll是一个由Microsoft Visual C提供的运行时库文件,它为许多Microsoft Visual Studio开发的应用程序提供了必要的支持。这个文件对于许多Windows应用程序的正常运行至关重要。然而,有时会出现vcruntime140.dll缺失的问题,导致应…

“继续教育”招生报名网存在支付漏洞

1.找到该网站的一个登录页面,注册好账户密码登录进去 2,进去之后,找到一个网上缴费功能 3.选择338元的套餐,支付方式我选的支付宝用burp抓包 发现money0参数与金额有关,于是就尝试把monet0改成一看看能不能搞一个零元购…

超级应用平台(HAP)起航

各位明道云用户和伙伴, 今天,我们正式发布明道云10.0版本。从这个版本开始,我们将产品名称正式命名为超级应用平台(Hyper Application Platform, 简称HAP)。我们用“超级”二字表达产品在综合能力方面的突破&#xff…

Java特殊文件

Properties 读取数据 package com.itheima.d1;import java.io.FileNotFoundException; import java.io.FileReader; import java.nio.charset.StandardCharsets; import java.util.Properties; import java.util.Set;public class Test1 {public static void main(String[] arg…

免费时代结束:百度云加速取消所有免费套餐

我是卢松松,点点上面的头像,欢迎关注我哦! 在网站时代,凭借着“品牌”“SEO”“免费”的优势,百度云加速一跃成为国内最大的CDN服务商。但随着站长时代结束,和网站相关的产品越来越少,收费的名…

【极客技术】真假GPT-4?微调 Llama 2 以替代 GPT-3.5/4 已然可行!

近日小编在使用最新版GPT-4-Turbo模型(主要特点是支持128k输入和知识库截止日期是2023年4月)时,发现不同商家提供的模型回复出现不一致的情况,尤其是模型均承认自己知识库达到2023年4月,但当我们细问时,Fak…

系统安全测试要怎么做?

进行系统安全测试时,可以按照以下详细的步骤进行: 1、信息收集和分析: 收集系统的相关信息,包括架构、部署环境、使用的框架和技术等。 分析系统的安全需求、威胁模型和安全策略等文档。 2、威胁建模和风险评估: …

野指针详解

1.定义 概念&#xff1a; 野指针就是指针指向的位置是不可知的&#xff08;随机的、不正确的、没有明确限制的&#xff09;。 2.野指针成因 A.指针未初始化 #include <stdio.h> int main() { int *p;//局部变量指针未初始化&#xff0c;默认为随机值*p 20;return 0;…

GitHub Copilot:做出一个划时代的产品,只需要 6 个人

当前&#xff0c;Copilot 已经成为国内开发者常用的辅助工具。就像有的开发者评价称&#xff0c; “编码时&#xff0c;我希望干扰最少。在这方面&#xff0c;Copilot 给我提供了巨大的帮助。它减少了我可能花在网络上寻找解决方案的时间&#xff0c;而且它们在我最喜欢的 IDE …

C#学习相关系列之base和this的常用方法

一、base的用法 Base的用法使用场景主要可以概括为两种&#xff1a; 1 、访问基类方法 2、 调用基类构造函数 使用要求&#xff1a;仅允许用于访问基类的构造函数、实例方法或实例属性访问器。从静态方法中使用 base 关键字是错误的。所访问的基类是类声明中指定的基类。 例如&…

Latex 基本操作

好久没写博客了&#xff0c;最近一直在写毕业论文&#xff0c;不过对 Latex 的使用进一步了解&#xff0c;这里整理下来方便小伙伴们学习和参考。可以在 Gituhub 上找自己学校的模板&#xff0c;通常我们都是在找到的模板上进行写作&#xff0c;只需要掌握一下基本操作&#xf…