你必须彻底阅读串行堆栈...它不是很容易,但它确实可以。
您可以直接从串口读取。在这种情况下,您不需要串行转发器。需要注意的事情很少。
例如,如果您想读取发送到 PC 串行端口的串行消息(USB 传感器板就像串行一样工作,因为它们使用 USB 到串行转换器,如 FTDI 芯片)。
在 C#(Java 等)中,您可以读取来自串行端口的字节流。您可以解析此字节流以提取 tinyos 的标准串行消息。
TEP #113 对此进行了某种解释,虽然它存在一些问题,但您应该能够找到这些问题并使您的程序正常运行。
正如 TEP 113 中所述,标准串行数据包类似于:
7e 40 09 00 是 ef 05 7d 5d 06 01 02 03 04 05 7e
这意味着,一个数据包以十六进制 7E(我相信它的 126 或 127)开头,也以 7E 结尾。最后 2 个字节是数据包的CRC。因此,您可以在您的 c# 程序中,当您遇到7E 时开始从串行端口读取,并在您到达流中的下一个7E 时停止读取。介于两者之间的一切都将是您的数据包。
您必须小心escaping,即如果7E 是您的数据包内容的一部分,请不要与开始和结束分度计混淆,它将被转义为其他内容...这也是在该 TEP 113 中进行了解释。
我相信有一些 C++ 代码用于计算 CRC,您可以轻松地将其转换为 C# 或 Java 代码。
还可以查看Serial.h 的源代码,其中包含有关如何在 TinyOS 中形成串行数据包的一些详细信息。