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

文章目录

  • 一、特性
  • 二、相对于替代解决方案的优势
    • (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.hqwc.cn/news/216186.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【汉诺塔 —— (经典分治递归)】

汉诺塔 —— (经典分治递归) 一.汉诺塔介绍二.分治算法解决汉诺塔问题三.汉诺塔问题的代码实现四.主函数测试展示 一.汉诺塔介绍 汉诺塔问题源自印度一个古老的传说,印度教的“创造之神”梵天创造世界时做了 3 根金刚石柱,其中的一…

前端vue导出PPT,使用pptxgen.js

前言 公司新需求需要导出ppt给业务用,查阅资料后发现也挺简单的,记录一下。 如有不懂的可以留言!!! 1.安装包 npm install pptxgenjs --save2.引入包 在需要使用的文件中引入 import Pptxgenfrom "pptxgenjs&…

【计算机网络】(网络层)定长掩码和变长掩码

目录 1、IPV4地址的应用规划 2、例题分析 2.1、定长的子网掩码 2.2、变长的子网掩码 1、IPV4地址的应用规划 定长的子网掩码(FLSM): 使用同一个子网掩码划分子网,每个子网所分配的IP地址数量相同,造成IP地址的浪费…

小辰的智慧树(差分+前缀和)

登录—专业IT笔试面试备考平台_牛客网 1.考虑总长度之和不能超过m,2考虑限制每棵树高度不能低于ci,如果用二分最短输能截到的高度,还要另外去判断,是否每棵树mid都能严格大于ci ,这样容易超时,换个角度&…

DFS序和欧拉序的降维打击

1. DFS 序和时间戳 1.1 DFS 序 定义:树的每一个节点在深度优先遍历中进、出栈的时间序列。 如下树的 dfs 序就是[1,2,8,8,5,5,2,4,3,9,9,3,6,6,4,7,7,1]。 下图为生成DFS的过程。对于一棵树进行DFS序,除了进入当前节点时对此节点进行记录,…

Chem. Eng. J | 掌控基于ESIPT的AIE效应设计具有单组分白光发射的光学材料

今天为大家介绍一篇近期发表在Chemical Engineering Journal上的论文:Controlling ESIPT-based AIE effects for designing optical materials with single-component white-light emission。论文通讯作者为中南大学董界副教授和曾文彬教授,论文第一作者…

使用new Vue()的时候发生了什么?

前言 Vue.js是一个流行的JavaScript前端框架,用于构建单页面应用(SPA)和用户界面。当我们使用new Vue()来创建一个Vue实例时,Vue会执行一系列的初始化过程,将数据变成响应式,编译模板,挂载实例…

StarRocks Evolution:One Data,All Analytics

在 11 月 17 日举行的 StarRocks Summit 2023上,StarRocks TSC Member、镜舟科技 CTO 张友东详细介绍了 StarRocks 社区的发展情况,并全面解析了 StarRocks 的核心技术与未来规划;我们特意将他的精彩演讲整理出来,以帮助大家更深入…

修改mysql的密码(每一步都图文解释哦)

当你想要连接本机数据库时,是不是有可能突然忘记了自己的数据库密码? 在此文中,我们来详细解决一下如何去修改自己的数据库密码,并使用Navicat来连接测试 1.停止mysql服务 打开终端,键入命令,将mysql服务先停止掉,…

一起学docker系列之九docker运行mysql 碰到的各种坑及解决方法

目录 前言1 Docker 运行mysql命令2 坑一:无法读取/etc/mysql/conf.d目录的问题3 坑二:/tmp/ibnr0mis 文件无法创建/写入的问题4 坑三:Navicat 连接错误(1045-access denied)5 坑四:MySQL 登录失败问题结语 …

新版PY系列离线烧录器,支持PY002A/002B/003/030/071等MCU各封装,不同 FLASH 大小型号

PY系列离线烧录器,目前支持PY32F002A/002B/002/003/030/071/072/040/403/303 各封装、不同 FLASH 大小型号。PY离线烧录器需要搭配上位机软件使用,上位机软件可以在芯岭技术官网上下载,还包括了离线烧录器的使用说明。PY离线烧录器使用MINI U…

NX二次开发UF_CURVE_ask_joined_parms 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_joined_parms Defined in: uf_curve.h int UF_CURVE_ask_joined_parms(tag_t joined_curve_feature, UF_STRING_p_t uf_curve_string, int * creation_method, double …