linux - USB串口驱动(通讯协议(protocol))

标签 linux usb usbserial

我想开发一个包含USB Controller 的FPGA,其USB Controller 实现USB转串行协议(protocol)。 我认为 USB 转串口适配器很像键盘或鼠标。 但我发现情况恰恰相反。我测试的设备使用“供应商特定”协议(protocol)。 这意味着每个 USB 串行驱动程序都需要自己的驱动程序,这看起来效率很低。

对于大多数工程师来说这可能不是问题,因为他们可以从商店购买 USB 串行适配器,并且其供应商提供必要的软件。

但是如果我想在 FPGA 内部开发自己的 USB 转串口设备,我必须从头开始。我不想开发自己的协议(protocol)、自己的驱动程序。

是否有任何开放的 USB 转串口协议(protocol)(并且有 Linux 驱动程序可用),以便我可以在不侵犯他人权利的情况下实现?

重新发明轮子是没有意义的。 任何意见、建议将不胜感激。

谢谢!
秋-

最佳答案

您搜索 CDC 设备类别。如果您部署设备,通常会有设备(芯片)供应商提供的 VID&PID 组合,可以免费与产品一起使用。

USB classes description here

您绝对应该为产品提供唯一的序列号(通常片上 ROM 中有硬闪存序列号),以便您的产品可以绑定(bind)到相同的设备路径(Windows 中的相同 COM#)。

设备配置由其描述符给出。通过描述符,您应该提供如上所述的序列号。 CDC 设备类具有最小的实现,其中包括一个用于线路配置的设置端点(大多数请求可以回复“不支持”)和两个用于数据输入和数据输出的批量端点。通过简约的实现,数据端点是原始数据 - PC 端发送的内容在设备端接收,反之亦然。但在此之上使用某些调制解调器协议(protocol)是没有障碍的。

尚未在 FPGA 上完成此操作,但在多个 MCU 上完成过。作为起点,我将为一些现代 MCU(例如 AVR)或一些小型 ARM(例如 NXP 11U 系列)下载 CDC 演示,以从中获取灵感。

Linux下对CDC设备类的支持很好,在开发过程中使用像lsusb这样的实用程序非常有帮助。在 Windows 平台上,Win7 的情况要好得多,在 WinXP 下,您必须为每个 VID&PID 组合提供特定的 .inf 文件才能使用通用串行驱动程序,并且您的设备将显示为 COM#。

关于linux - USB串口驱动(通讯协议(protocol)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28424834/

相关文章:

Linux命令流水线理解

linux - 在 Linux (x86_64) 上运行 Solaris (Sparc) 编译的程序

android - 如何知道 android 上 UsbDevice 实例的 linux usb 设备文件路径?

c - Arduino 电脑鼠标/输入设备

java - 如何使用java访问linux蓝牙堆栈

c - 从文件读取 IP 地址的最有效方法

cocoa - libusb 是 Mac OS X 上访问 USB 设备的首选方法吗?

c++ - 通过 RS232 和 USB 进行串行通信

c - LPC1769 微 Controller 中批量传输的 USB 供应商特定类

c++ - WinApi 从 USB 端口获取可用字节数?