This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1310:TI 15.4 轮询数据问题

Guru**** 2644665 points

Other Parts Discussed in Thread: UNIFLASH, CC1310

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1572820/cc1310-ti-15-4-polling-data-issue

器件型号:CC1310
Thread 中讨论的其他器件:UNIFLASH

工具/软件:

您好、

我们有 1 个传感器和 1 个收集器。 报告= 6000ms、轮询为 6000ms。

传感器报告工作正常(每次断开连接时除外)。 但在调用轮询时、我们遇到了问题。 传感器出现安全错误并被排除在网络之外。 我们已经测试了不同的轮询和报告间隔,我们总是得到不同的行为,例如,轮询= 2000 和报告= 3000,传感器永远不会被触发,但它总是跳过第一个报告,收集器只接收第二个(在 6 秒而不是 3 秒后)。

我们的行为有什么错误、我们是否应该遵循一些设置/规则? 谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Reno:

    您能否捕获这种情况的监听器日志?

    谢谢、

    Marie H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Reno:

    您能否分享您获得的安全错误代码或两个终端的屏幕截图?
    是否 为传感器和收集器均启用了 NV_RESTORE 符号?

    是否每次都在第一个轮询请求上发生这种情况? 您能否使用 UniFlash 擦除芯片并再次刷写一个干净工程?

    此致、

    Daniel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的快速回复、很抱歉我的延迟回复、我们想再做一次测试。

    由于序列而出现问题、而不是由于轮询/报告周期。 我们犯的错误是随机地从收集器向传感器发送(轮询)数据。 轮询数据位于缓冲区中、新的报告数据到达并覆盖了它(我们假设)。

    我们更改了代码、以便在收到报告数据后立即发送轮询数据、现在它可以正常工作。

    这现在可以工作、但它可能不再与 20 个传感器一起工作?  也许有办法增加缓冲区大小还是其他办法可以解决这个潜在的问题? 谢谢你。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Reno:

    很高兴听到! 我不确定您的代码更改、我相信示例项目使用计时器进行报告和轮询、这些计时器可以正常工作。

    您可以尝试使用位于 SDK_PATH/source/ti/ti154stack/high_level/mac_cfg.c 中的 MAC_CFG_TX_DATA_MAX 来增加缓冲区大小。(您可以在工程符号中重新定义它)。

    是否仍在报告间隔中使用 6000ms? 它可能会变得很紧、对于 20 个传感器、每个传感器都有一个 300ms 的窗口来报告+ack、poll+ack。 您能否分享典型报告和轮询数据的数据速率 (PHY) 和有效载荷大小? 这将定义每个数据包的通话时间。

    您是否可以增加报告和轮询间隔?

    此致、

    Daniel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Daniel:

    感谢您的建议。 我们将数据从主 MCU 发送到 CC1310、但该数据实际上存储在我们的应用缓冲区中、当回调激活轮询函数时、我们使用缓冲的数据进行馈送、因此理论上收集器示例代码没有变化。 在传感器端、我们已在传感器 OAD 示例上构建我们的应用。

    首先、我们获得的结果不仅是使用多个传感器、而且只有一个传感器。 我们将 MAC_CFG_TX_DATA_MAX 从 2 增加到 20、这足够了吗? 这是缓冲区大小 — 可以存储多少条不同的消息或有效负载可以有多长时间? 但我担心的是、我没有看到存储器中的闪存或 RAM 消耗发生任何变化、我假设它转到 SDK 上、我们看不到。  对于我们可以增加此缓冲区的数量以确保剩余足够的资源、是否有任何建议?

    是的、我们仍在使用 6000ms。 实际上、我们最多只需要 5 个传感器、但我们稍后将添加一些传感器、这些传感器将在 15 分钟内报告数据、因此我认为、数字越大应该不是问题。 不同 应用

    - PHY 133 所以 200kbps 因为我们希望我们的设备消耗更少的功率。 在相同 Rx RSSI 下的可靠性方面、PHY 3 (50kbps) 是否是更好的选择?

    -有效负载在大多数时间是 34 字节。 在某些情况下、该值为 100 个字节。

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Reno:

    我的鸡巴已经软掉了,还在不停地在裤裆里跳动。

    对于 5 个传感器、将 MAC_CFG_TX_DATA_MAX 设置 为  20 可能看起来太多。 但我将再次检查并返回给您、因为我不确定限制是什么。 但是、如果您打算生成的数据速度快于传感器轮询的速度、则无论缓冲区有多大、缓冲区最终都会耗尽。

    数据包大小在 同一  mac_cfg.c 文件的 MAC_MAX_FRAME_SIZE 中定义。

    如果您具有良好的链路、200kbps 和 50kbps PHY 将具有相同的可靠性。 但是、如果您接近 200kbps 的 RSSI 限值、则将开始丢失数据包、而 50kbps 的 PHY 仍将具有良好的链路、因此在这种情况下它会更可靠。 如果您接近 50 kbps RSSI 限值、则可能根本没有 200 kbps 的链路。  

    此致、

    Daniel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你。  是否有关于 MAC_CFG_TX_DATA_MAX 的消息?

    您还会推荐什么号码? 在传感器侧、是否需要对缓冲器或仅收集器进行任何更改? 我主要关注的是资源、因为编译器未显示 SDK 所需的资源(我可以更改此编号,也看不到任何更改)。 谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Reno:

    很抱歉、我没有更新您。  

    MAC_CFG_TX_DATA_MAX 定义 TI 15.4-Stack 可以在缓冲区中容纳多少个封装(数据或控制)。 超过该值将导致应用程序返回溢出错误消息。  MAC_CFG_TX_DATA_MAX 可根据 RAM 可用性而增加。 但是我没有具体的数字。

    我相信您看不到内存分配发生任何变化、因为它被分配到堆中。 但如果可能、我将尝试获得更具体的答案。

    我认为您不需要在传感器端对其进行增加、但是、要考虑到 mac_cfg.c 从 SDK 链接到收集器和传感器工程中、因此如果您不进行本地复制、则两个工程将共享相同的 mac_cfg.c 配置。

    此致、

    Daniel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Reno:

    我已经确认缓冲区是从堆动态分配的。 编译器报告静态分配、因此您不会看到其中的任何更改。

    从经验来看,7-10 是一个很好的价值。 如果该数字太大、您可能会在运行时耗尽堆内存。 另外、认为 MAC 可以容纳大量数据包、可能会给应用带来错误画面。

    如果您遇到任何问题、我建议您尝试使用这些值并进行实验。

    希望这有所帮助。

    此致、

    Daniel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,谢谢你的答复。 我们使用的是没有太多 RAM 的 CC1310。 在调试模式下、是否有函数用于检查堆的状态? 如果我们将数字增加 1(例如从默认值 2 增加到 3)、则需要多多大的 RAM(例如 100,200,300、... 字节?) 以便我们可以检查可以减少多少和哪些地方、从而确保不会溢出。

    我想我们必须改变:
    MAC_CFG_TX_DATA_MAX
    MAC_CFG_TX_MAX
    MAC_CFG_RX_MAX

    有任何建议吗? 对于第一个问题、您建议使用 7-10。 我想我们也必须改变其他人。

    另外、  MAC_CFG_TX_DATA_MAX 和 MAC_CFG_TX_MAX 之间有何区别 。 谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Reno:

    您可以 在调试器模式下使用运行时对象视图 (ROV)。 要使 HeapMem 显示在 ROV 上、请对 app.cfg 进行以下更改

    var HEAPMGR_CONFIG = 0x82; // instead of 0x80

    注释掉这两行

    var ROM = xdc.useModule('ti.sysbios.rom.ROM');
    ROM.romName = ROM.CC1350;

    重新构建工程、并启动调试会话。

    从 Tools 中打开 ROV 视图、通过点击标记的按钮来添加绘图、并启用持续刷新。 您应该会看到如下所示的内容:

    将  MAC_CFG_TX_DATA_MAX 定义增加 1 不会增加自身的使用率、一旦数据排队到缓冲区中、就会发生这种情况。

    在本例中、我使用 BTN-1 触发 Collector sendToggleLedRequest 并对消息排队、我按下了几次该按钮、您可以在数据排队并发送时在图上看到该按钮。 每次调用使用了 264 个字节、增加 SMSGS_TOGGLE_LED_REQUEST_MSG_LEN 也会按预期增加缓冲区占用、但它比有效载荷大得多、这可能是由于堆栈标头和一些其他开销。

    我不知道它到底有多大、但也要考虑您的有效负载。 我的建议是像我一样尝试一下,并弄清楚你的极限。  对于 CC1310 来说、7-10 可能太多、因为空闲堆为 1952 字节。 可以从默认值 2 开始测试您的应用。

     MAC_CFG_TX_DATA_MAX 和 MAC_CFG_TX_MAX 之间 的区别在于、前者定义了数据帧的最大数量、而后者定义了 TX 任何帧(命令,数据)的最大数量。

    此致、

    Daniel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你。 这大有帮助。