通过 USB 模拟 UART

2024-02-24

有谁知道是否可以通过 USB 模拟 UART(简单串行发送和接收)?这将如何实现?

我在 Microchip 网站上找到了这个链接,但不是很容易找到。

http://www.microchip.com/forums/m522571-print.aspx http://www.microchip.com/forums/m522571-print.aspx

有任何想法吗?谢谢。


您需要将设备堆栈实现为 CDC ACM 设备(也称为虚拟COM端口或 VCP)。大多数支持 USB 的微控制器供应商都有示例代码或应用说明。

鉴于此,就 Windows 而言,您的设备看起来就像 COM 端口。在设备端,您将获得传输的原始数据块。可以为 UART 和 USB 接口实现适当的抽象层,以便在必要时提供相同的接口。

一个问题是 USB 设备需要由 USB 实施者论坛分配的供应商 ID,地址为5000美元费用 http://www.usb.org/developers/vendor/(2016 年 7 月 23 日正确)。如果您要在野外发布您的设备,并且要让您的设备被其他设备识别并正常运行,您确实需要一个。一些微控制器供应商将允许您免费或以较低的费用使用他们的供应商 ID 作为产品 ID 的子集,但只有当您从他们那里购买大量设备时,他们才可能这样做。

另一个问题是,虽然在 OSX 或 Linux 上无需任何其他驱动程序即可识别 CDC/ACM,但 Windows 则更加挑剔,需要 INF 文件将特定 USB 供应商和产品 ID 与 usbser.sys 驱动程序关联起来。然后您就进入了驱动程序签名的整个世界,这对于使用 Windows Vista 64 或任何版本的 Windows 7 来说是必不可少的。代码签名也将花费您金钱。如果您的供应商提供了示例 VCP 代码,他们也可能会提供签名的驱动程序。 STMicroelectronios 的 STM32 VCP 示例甚至通过了 WHQL 认证,因此可以通过 Windows 更新自动获取。

因此,结果是,如果您的供应商已经提供了代码和签名驱动程序(或者您没有使用 Windows),那么您可以进行实验,但要部署产品,您将需要供应商 ID 和代码签名证书。老实说,这有点像雷区。

一种更简单的方法是使用 FTDI USB串行芯片。这对于没有自己的 USB 控制器的微控制器特别有用,但数据传输速率将受到微控制器和/或 FTDI 的 UART 接口而不是 USB 速度的限制。 FTDI 芯片可以使用 FTDI 的 VID/PID 按原样使用,也可以使用您自己的 VID/PID 进行自定义。定制使您重新需要获取 VID 和签名证书,但允许您的设备被唯一标识,而不是作为通用串行端口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 USB 模拟 UART 的相关文章

  • Windows 8.1 上的 Pyusb - 没有可用的后端 - 如何安装 libusb?

    使用 pyinstaller 3 1 python 2 7 9 和 tkinter 尝试使用 pyusb 而不是 pyserial 但没有可用的后端 调查Windows 上的 Pyusb 没有可用的后端 https stackoverflo
  • GNU Arm Cortex m4 上的 C++ 异常处理程序与 freertos

    2016 年 12 月更新现在还有一个关于此行为的最小示例 https community nxp com message 862676 https community nxp com message 862676 我正在使用带有 free
  • Android模拟器的字体可以修改吗?

    我需要更改 Android 模拟器上安装的字体 例如 我想安装 TrueType 字体 它涵盖了其他一些语言环境 如阿拉伯语 中文等 我只是想知道这可能吗 你应该覆盖 system fonts DroidSansFallback ttf使用
  • 数组和结构体可以以不同的方式初始化吗?

    我的问题可能看起来很奇怪 事实上 这是上下文 我目前在切换时遇到一个奇怪的问题 关于我正在从事的项目 核心从pullinino到CV32 也发生了一些其他变化 例如关于crt0 如一些数据内存重置 这是一个 真实的 例子 说明了一个非常简单
  • 使用 /dev/tty* 进行 9 位 uart 仿真

    我有一个不常见的协议 它需要 9600 波特率 9 位和 1 个停止位 我找不到任何可以实现此发送 接收的驱动程序 我可以寄东西到 dev tty 用于模拟这些查询 我应该发送什么 如何模拟 9600 波特率 您可以使用粘性奇偶校验 也称为
  • Android 版 usbmon

    我想分析我的设备的 USB 通信 SGS4 我到处都看到需要配置 usbmon 并将其编译到内核中 Afaik 这个模块没有内置在android linux系统中 我在编译内核方面没有太多经验 但如果有必要 我会这样做 您能说出这样做的步骤
  • Java 两个独立键盘的独立输入

    我有两个 USB 键盘插入同一台机器 我正在开发一个 Java 应用程序 是否有办法允许 Java 应用程序分离出它来自哪个 USB 键盘 即是否有类似的东西http docs oracle com javase 6 docs api ja
  • 如何使用文件实现循环缓冲区?

    我的应用程序 C 程序 打开同一文件的两个文件句柄 一个处于写入模式 一个处于读取模式 应用程序中的两个单独的线程读取和写入文件 这很好用 由于我的应用程序在 RAM 磁盘大小有限的嵌入式设备上运行 我想写FileHandle在达到最大大小
  • 头文件中的内存分配

    我工作的公司有针对嵌入式目标的 C 开发的开发规则 一是 建议不要在头文件中分配任何存储空间 我不确定这意味着什么 写它的人不在身边 其他开发人员也不在乎 所以我在这里问 我的理解是 我不应该在头文件中声明变量 因此在 h 中不鼓励类似的操
  • 将触摸发送到 ActivityInstrumentationTestCase2 测试时如何修复 INJECT_EVENT 权限异常

    尽管有很多示例表明类似的操作应该有效 但以下代码会失败 该代码位于与真实项目关联的测试项目中 public class MyTest extends ActivityInstrumentationTestCase2
  • 如何停止优化器丢弃未使用的变量?

    我想调试我的代码 但无法访问进程中的内部层 因为这会干扰与硬件的通信 在监视列表会干扰基本读取访问的情况下执行易失性操作 因此 我正在测试接口的返回值 但 IAR 编译器甚至会优化未使用的易失性变量 和这样的声明 i object foo
  • C 相同结构不同尺寸

    我的问题与此相关 c 在struct中定义不同大小的数组 https stackoverflow com questions 17956697 c define arrays in struct with different sizes 但
  • 使用 Android NDK 使用 -fsigned-char 进行构建安全吗?

    为了与其他平台保持一致 我需要使用signed char在我正在处理的一些本机代码中 但默认情况下在Android NDK上char类型是unsigned 我尝试明确使用signed char类型 但它生成太多警告differ in sig
  • 为什么我在模拟器中看不到视频?

    我见过几个与此类似的问题 但我想确定一下 我无法在模拟器上运行视频 是否一致 有人在模拟器上成功运行视频吗 以下是我使用的代码 import android app Activity import android net Uri impor
  • Compact Framework 3.5 上的 System.Data.SQLite 问题

    我在我的紧凑框架应用程序中使用 sqlite 来记录系统中的事件 我也在使用系统 数据 SQLite http sqlite phxsoftware com 该事件具有描述其发生时间的时间戳 我将此时间戳记作为刻度存储在我的表中 除此列外
  • Android USB_DEVICE_ATTACHED 持久权限

    如何让 Android 在每次重新连接 USB 设备时都不再请求权限 我想让它记住 USB 设备的 默认使用 复选标记 这样我就不必每次都向同一设备授予权限 我以编程方式检测 USB 设备 Android 手机 何时连接到我的主机设备 An
  • 嵌入式+实时开发培训的建议[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我目前正在学习嵌入式实时工程职业 但发现找到好的培训材料有些困难 特别是因为您无法像桌面应用程序开发那
  • 使用 BeagleBone Black 内核 >= 3.8 打开/关闭 USB 电源

    我需要 关闭 gt 睡眠几秒钟 gt 打开 beaglebone black 的 USB 电源 能够对连接到 USB 的设备 华为 E220 调制解调器 进行硬件重置 已经尝试过软重置 使用取消绑定 绑定和授权0 1 但软件重置不足以使设备
  • Android 两次请求 USB 许可

    我有一个运行 Android 4 0 4 的开发板 并将其用作 USB 配件 当我关闭板上的应用程序然后通过 USB 插入 Android 手机时 板会提示 连接此 USB 设备时打开 AppName 当我触摸 确定 时 应用程序启动并再次
  • 当模拟器存在时 Flutter 应用程序不运行

    模拟器在那里 但当我启动应用程序时它不起作用 请帮忙 我已经尝试了一切 Cal Flutter 新手 我已遵循安装指南并尝试了其他堆栈流答案的修复 我正在运行 Windows 8 1 单一用户 我已经从命令提示符和 android 终端中尝

随机推荐

  • 将 Eclipse 中的作者姓名自动添加到现有文件中 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有一个真正易于使用的工具 没有怪物工具 我可以将其插入 Eclipse 然后按 生成标头 按钮 然后
  • Sphinx 类属性文档

    我一直在尝试记录我的蒙戈引擎 http mongoengine odm readthedocs org 基于应用程序 但我在文档类上记录属性时遇到问题 我采取的正确语法如下 class Asset Document This is the
  • 从 Asp.net MVC2 迁移到 MVC4

    我想将 MVC2 网站转换为 MVC4 我知道有一些工具可以帮助从 MV2 转换为 MVC3 但我找不到从 MVC2 转换为 MVC4 所需的任何工具或步骤 请向我指出一些文章 博客 它们可以为我提供更多信息来帮助完成此过程 看起来现在有一
  • “错误:以错误的顺序接收到数据包。”当连接到无服务器 aurora 时

    我正在实现一个 Web 应用程序 它调用 lambda 函数从数据库获取数据 我选择了 Serverless Aurora 并编写了代码 但出现了异常 Error Received packet in the wrong sequence
  • 如何创建自定义水平进度条

    Please help to create horizontal progress bar like this 设置水平进度条的样式 style android attr progressBarStyleHorizontal 创建自定义进度
  • 在 Chart.js 中设置条形图 Y 轴标签的格式

    我在这里查看了文档和类似的问题 但似乎没有找到解决我的问题的可行方法 我正在使用 Chart js v 2 1 6 并且我有一个条形图 其中百分比值存储为数字 已乘以 100 我需要 y 轴标签和工具提示来显示 在值后面签名 有人可以解释一
  • 如何对 gtsummary 包中特征表列中的行顺序进行排序或更改?

    我正在尝试使用 tbl summary 中的函数 sort list stage alphanumeric 更改特征表列中的行顺序trial c trt age stage grade gt tbl summary by trt sort
  • 使用 Button 的 NodeJS Post 请求

    我不知道这是否可能 我所做的所有研究都表明 通过表单和文本输入是可能的 但无论如何 使用 NodeJs 和 Express 我希望能够单击网页上的按钮 单击后 它会向我的 Node JS 服务器发送一个 post 请求 更简单的说法 单击按
  • Direct2D 和 DXGI(D3D 互操作)多线程的最佳实践是什么?

    理想情况下 我希望有多个工作线程能够渲染到屏幕外渲染目标 然后将渲染的内容 传输 到屏幕上目标 对于 hwnd 渲染目标 这似乎不是问题 msdn 有一个例子 当屏幕渲染目标基于 DXGI 交换链时 我不太确定该怎么做 据我所知 每个窗口只
  • 为什么在基于范围的初始化程序中使用临时对象会导致崩溃?

    为什么以下代码在 Visual Studio 和 GCC 上都会崩溃 为了使其崩溃 需要基于范围的 for 循环 std map std string 并引用字符串 如果我删除其中任何一个 它就会起作用 include
  • 如何获取Angular2中ag网格中选定行的数据?

    我在 angular2 中设置了 ag grid 它工作正常 但我无法获取所选行的值 我的控制台窗口中没有错误 这就是我初始化网格的方式 import Component from angular2 core Component selec
  • 如何在 MVC-gui 中使用 JUNG2?

    我正在玩 JUNG2 想要实现一个小型 GUI 允许我显示和更改图表 遵循 JUNG 库中的示例效果很好 但它们没有分离模型 视图和控制器 所以我开始以干净的分离方式构建 GUI 我的第一个 GUI 版本应该是简单地显示初始图形 视图是模型
  • 是否可以在 sass 中重载 mixins ?

    假设你有一个像这样的阴影混合 mixin box shadow offset blur color moz box shadow offset offset blur color webkit box shadow offset offse
  • MySql 中的 DELIMITER 错误

    我正在使用以下sql DELIMITER DROP PROCEDURE IF EXISTS get auto increment settings CREATE PROCEDURE get auto increment settings B
  • Rails 不转换时区 (PostgreSQL)

    我对时区和 postgresql 数据库 Rails 3 0 4 PostgreSQL 9 0 有问题 我正在使用自定义范围 在其中附加一些条件 执行连接等 问题是 Rails 不会将时间转换为我的本地时区 这是范围的代码 scope wi
  • VBscript删除子文件夹

    我对 vb 脚本非常陌生 我需要一个脚本来根据起始名称 SA 和 2 天前删除几个三级子文件夹 example C abc user1 temp SA123 c abc user2 temp SA2345 c abc user3 temp
  • 如何在 VS Code 编辑器中按标题级别更改 Markdown 标题颜色?

    我的问题类似于但那里给出的答案是针对 Vim 的 我需要一个针对 VS Code 的答案 我是一个真正的新手 我尝试自己解决这个问题 但这些尝试失败了 Markdown 预览 GitHub 样式 https github com mjbvz
  • 如何复制克隆 UIElement 并保留布局/渲染信息?

    我想复制一个复杂的数据绑定UIElement但保留原始 UIElement 中的绑定 布局和渲染信息 创建一个新的UIElement似乎效率低下 因为我必须执行另一个完整的绑定 测量 排列 渲染过程 到目前为止我最接近的是创建一个新的Dra
  • 对于上下文无关语法,如何将其转换为等效的下推自动机?

    对于 0 1 2 上的上下文无关文法 G 起始变量为 S S 0S0 1S1 2S2 是是 22 我如何将其变成等效的下推自动机 下推自动机可以将符号推入堆栈顶部并将其弹出 它还可以将其转换基于最顶层的堆栈符号 我们需要考虑一种机制 允许我
  • 通过 USB 模拟 UART

    有谁知道是否可以通过 USB 模拟 UART 简单串行发送和接收 这将如何实现 我在 Microchip 网站上找到了这个链接 但不是很容易找到 http www microchip com forums m522571 print asp