【问题标题】:Difference between API 1 and API 2 mode of XBeeXBee API 1 和 API 2 模式的区别
【发布时间】:2019-04-26 05:56:58
【问题描述】:

我在查找 XBee 的 API 1 和 API 2 模式之间的区别时遇到问题。我已经完成了我的编程工作,周三我有我的硕士论文答辩。我知道如何使用 XBee,但我的射频基础知识非常薄弱。请用我在论文答辩中可以说的几个基本词来解释这种差异。

【问题讨论】:

    标签: xbee


    【解决方案1】:

    我个人不喜欢 API 模式 2,因为它增加了发送和接收数据的复杂性,除非您在串行驱动程序的低级别处理它。

    API 模式 2 的好处是您可以观看字节流并知道您看到的任何0x7E 字节绝对是“帧开始”。使用 API 模式 1,可以在帧的内容中看到该字节。

    如果您在中间选择了一条信息流,则需要做额外的工作来验证您是否找到了起点。这并不难,特别是如果您在 0x7E 帧开始之后对 16 位帧长度进行完整性检查。在大多数情况下,您将解码完整的帧,而无需寻找下一帧的开始。

    由于转义还包括 XON 和 XOFF 字符,我猜如果串行流中有其他设备(连接在 XBee 和主机发送/接收帧之间)无法处理这些字符,则可能需要 API 模式 2 .

    编辑以包含 API 模式 2 的详细信息:

    在任一 API 模式下,字节 0x7E 表示帧的开始。

    在模式 2 中,如果以下字节出现在帧内,它们将被替换为转义的两字节序列 0x7D 后跟与 0x20 异或的原始字节:

    byte in frame escaped sequence
    0x7E (start of frame) 0x7D 0x5E
    0x7D (start of escape sequence) 0x7D 0x5D
    0x13 (XOFF) 0x7D 0x33
    0x11 (XON) 0x7D 0x31

    请注意,帧长度和校验和基于原始的未转义字节序列。如果您正在编写代码来处理转义出站帧和取消转义入站帧,您希望它发生在串行驱动程序的相当低级别。

    【讨论】:

    • 非常感谢先生。您的不断指导对我的硕士论文帮助很大。再多写几行就可以进一步提高我的知识。
    • 但是如果 XOR 的结果是 0x7E 怎么办?然后我们可能需要检查 0x7E 前面是否有 0x7D 以确定前面没有 0x7D 的 0x7E 是否真的是一帧的开始......或者不是?
    • 与 0x20 异或的结果永远不会是 0x7E。在 API 模式 2 中发生的唯一转义/异或是 0x7E→0x5E、0x7D→0x5E、0x11→0x31 和 0x13→0x33。这将 XON (0x11) 和 XOFF (0x13) 排除在流之外,并确保未转义的 0x7E 仅出现在帧的开头,而 0x7D 仅出现在转义字符之前。
    【解决方案2】:

    【讨论】:

    • 坦率地说,我已经盯着那个页面看了一段时间,除了知道我可以在 API2 中转义一些字符之外,我不知道这意味着什么。直到我阅读了 tomlogic 的回答,我才明白文档中的“可靠性”指的是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多