【发布时间】:2015-11-09 02:47:20
【问题描述】:
我需要将数据从裸机微控制器系统传输到 2MBaud 的 linux PC。 linux PC 目前运行的是 32bit Kubuntu14.04。
为了存档,我尝试使用基于 FT232R 的 USB-UART 适配器,但有时会发现数据丢失。
只要linux PC主要是空闲的,似乎大部分时间都在工作;但是,我发现很少有数据丢失。
但是当我强制加载 cpu 时(例如重建我的项目),数据丢失会显着增加。
经过一番研究,我读到here,FT232R 包含一个容量仅为 384 字节的接收缓冲区。这意味着,FT232R 必须至少每 1.9 毫秒读取一次(USB 轮询)。好吧,FTDI推荐使用流控,但是由于使用了微控制器系统,我固定不能使用任何流控。
我可以接受这样一个事实,即没有绝对保证不会丢失数据。但是观察到的数据丢失量对于我的需求来说太重了。
所以我试图找到一种方法来提高我的 linux 上“FT232 驱动程序”的优先级,但找不到如何做到这一点。中没有描述 AN220 FTDI Drivers Installation Guide for Linux 和文件 AN107 FTDI Advanced Driver Options 有一个关于“更改驱动程序优先级”的标题,但仅适用于 Windows。
那么,有人知道如何在 linux 中提高 FT232R 驱动程序的优先级吗?
还有什么办法可以解决这个问题吗?
顺便说一句:当我阅读FT232H datasheet 时,它似乎带有 1KiB RX 缓冲区。我现在就订购一个并检查它的行为。编辑:没有显着改善。
【问题讨论】:
-
您可以查看
drivers/usb/serial/ftdi_sio.c,并就您的问题联系该驱动的作者 -
Joe,想一想,您是否考虑过使用一些缩减版本的 TCP 协议来封装您的 UART 连接?
-
@Borgboy:你的意思是,我应该使用 Tcp-Uart 模块而不是 Usb-Uart?你能推荐一个能够支持 2MBaud 的吗?
-
@Joe:不,我的意思是您可能需要考虑在 USB-UART 和您的微控制器之间使用基于软件的握手机制。我确实认为增加 RX 缓冲区会有很大帮助。出于好奇,您的微控制器是否有外部 RAM?这是我拥有的一个 EvK,它在一个板上提供了 MCU、SRAM 和 UART2USB:link。它专为高数据收集和传输而设计。
-
如何实现 RTS/CTS 流控制?