捕获自定义 UART 类信号
Capture a custom UART like signal
我正在尝试捕获与 UART 通信非常相似的信号。
这个特定的信号由:
1个起始位(低)
16 个数据位
1个停止位(高)
通过测试,我发现信号约为 ~8-9μs/位。这让我相信波特率大约是 115.2kbps。
我的第一个想法是尝试 "manual" 方法,并编写一个小的 C 程序。虽然我无法在正确的时间采样信号。
从这里开始,我决定寻找可以完成这项工作的图书馆。我确实尝试了来自 boost 的 "termios" 和 "asio::serial_port",但它们似乎无法接收 16 位字符。
我尝试配置 16 位接收器是不是太天真了?
“16 位 UART”有意义吗?
谢谢!
-nls
支持 16 数据位配置的 UART 的想法从根本上没有错,但我不知道有什么错。 8 或 9 通常是极限。
如果您正在与仅支持该配置的设备通信(那到底是什么设备?),您唯一真正的选择是位碰撞,最好由专用于该配置的 MCU 来完成目的。在多任务操作系统上,您不会在用户 space 中获得精确到微秒的计时,无论您使用什么库。
编辑:请注意,您可以 或多或少地通过专用内核-space 驱动程序进行位碰撞来做到这一点。但这会使系统几乎无法使用。 UART 存在的全部原因是因为 CPU 比每隔几微秒轮询一行更好的事情要做。
我正在尝试捕获与 UART 通信非常相似的信号。
这个特定的信号由:
1个起始位(低)
16 个数据位
1个停止位(高)
通过测试,我发现信号约为 ~8-9μs/位。这让我相信波特率大约是 115.2kbps。
我的第一个想法是尝试 "manual" 方法,并编写一个小的 C 程序。虽然我无法在正确的时间采样信号。
从这里开始,我决定寻找可以完成这项工作的图书馆。我确实尝试了来自 boost 的 "termios" 和 "asio::serial_port",但它们似乎无法接收 16 位字符。
我尝试配置 16 位接收器是不是太天真了? “16 位 UART”有意义吗?
谢谢!
-nls
支持 16 数据位配置的 UART 的想法从根本上没有错,但我不知道有什么错。 8 或 9 通常是极限。
如果您正在与仅支持该配置的设备通信(那到底是什么设备?),您唯一真正的选择是位碰撞,最好由专用于该配置的 MCU 来完成目的。在多任务操作系统上,您不会在用户 space 中获得精确到微秒的计时,无论您使用什么库。
编辑:请注意,您可以 或多或少地通过专用内核-space 驱动程序进行位碰撞来做到这一点。但这会使系统几乎无法使用。 UART 存在的全部原因是因为 CPU 比每隔几微秒轮询一行更好的事情要做。