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.

[参考译文] CC1312R7:关于 py-spinel 替代方法的实现

Guru**** 1112110 points
Other Parts Discussed in Thread: SYSCONFIG, WI-SUN
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1308408/cc1312r7-about-the-implementation-of-the-alternative-to-py-spinel

器件型号:CC1312R7
Thread 中讨论的其他器件:SysConfigWi-SUN

大家好、

最近、我仔细检查了基于 Wisun-Fan SDK 的项目代码、并设置了使用 py-spinel 的环境。 一切都运行良好、我发现 py-spinel 的脚本命令是通过调用项目的 ncp_base_mtd.cpp 文件中的其他函数实现的、例如 ns_br_src。

 

现在、我想将 py-spinel 工具替换为某个串 行端口助手、作为串行端口助手主机、并通过识别从项目中的串行端口接收到的字符串来执行相应的操作。

 

我已经实现了类似 py-spinel 工具的功能,例如获取 ncpversion、role 和 routerstate 等参数。 但是、仍然有一些我不确定如何调用的特定指令、例如"ping"命令或其他数据发送指令。

 

我的目标是通过串行端口输入字符串、例如"udp + destaddr + data"、将数据发送至 BR 或路由器中的指定节点。

谢谢、此致、

约兰德

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

    大家好、

    我想知道什么是"ping"命令或其他数据发送指令。

    我很期待你。

    谢谢、此致、

    约兰德

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

    嗨、团队,

    我曾尝试搜索、但不幸的是、我在 NCP_BASE_MTD.CPP 中找不到 ping 命令的相关操作功能。 我调试并模拟了程序 ns_br_src,发现使用 py-spinel 工具输入 ping 命令将调用 HandleDatagramFromStack()函数(如下所示),但在 NCP 函数打开时调用此函数。 假设我没有打开 NCP 功能,边界路由器(br)会调用哪个功能来将数据发送至路由器节点?

    据我所知,在 ns_coap_node 中,作为服务器的路由器节点可以使用 coap_service_request_send ()函数来发送数据。 然后、作为客户端的边界路由器也可以使用 CoAP_service_request_send 函数来发送数据。?

    谢谢和最好的问候,

    约兰德

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

    尊敬的 Yolande:

    我们有一个可用的替代 pyspinel : 你可以在 gitHub 上 fin 的 wfantund 网络守护程序:(这个使用相同的 ns_br hex 文件)

    https://github.com/TexasInstruments/ti-wisunfantund

    我不明白你所说的"NCP 功能未打开"是什么意思、我们仅在 NCP 模式下支持 BR。

    您看到过我们有关如何使用 CoAP 消息的 SimpleLink Academy 模块了吗? 它详细说明了如何在任务3中将数据从 RN 发送到 BR。

    https://dev.ti.com/tirex/explore/node?node=A__Ab5oYpAuOfLVRwkotwJZNQ__com.ti.SIMPLELINK_ACADEMY_CC13XX_CC26XX_SDK__AfkT0vQ__LATEST&placeholder=true

    谢谢、

    玛丽

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

    您好,Marie,ć

    非常感谢您的建议、但在此之前、我已经完成了您所说的"SimpleLink Academy 模块使用 CoAP 消息? 详细描述如何在任务3中将数据从 RN 发送到 BR。"、现在我的疑问是、如何使用边界路由器节点(BR)发送任何要发送到指定路由器节点(RN)的数据。 例如、我希望将"Hello world"数据从 BR 节点发送到与 BR 节点网络相连的特定 RN 节点。 卓越?

    谢谢和最好的问候,

    约兰德

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

    您好,Marie,ć

    有任何更新吗?

    谢谢、此致、

    约兰德

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

    尊敬的 Yolande:

    SLA I 链接的任务2涵盖了从 BR 向 RN 发送数据。 它正在使用 LED 资源、但您可以将类型从二进制切换到字符串、以发送"Hello world"消息。

    谢谢、

    M·H

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

    您好,Marie,ć

    目前、我暂时使用 UDP 通信模式进行节点间的通信。 我还想问两个问题:

    1、采用 UDP 通信模式时发现使用路由节点与其他节点形成网络后、路由节点断电、停止工作。 其他节点仍可以使用 UDP 模式相互通信。 这是否意味着不需要 UDP 通信模式取决于是否存在路由节点?

    2.关于路由表的更新:我发现在成功联网后,如果节点断开连接,路由节点或其他节点中显示的路由表仍然包含断开连接的节点信息,并且路由表不会更新。 我想 知道项目的哪个参数可用于实时更新当前路由表信息?

    谢谢、此致、

    约兰德

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

    尊敬的 Yolande:

    从2开始;器件断电后、需要花费很长时间才能被视为"已断开"。 我认为超时大约为15分钟。  

    在下一个 SimpleLink F2 SDK (版本7.40、预计将于2月底发布)中、我们将添加 SysConfig 选项以缩短此时间。  

    我不确定我是否理解您的问题1。 如果某些设备已断电,网络将使用另一条路由。

    谢谢、

    M·H

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

    您好,Marie H,

    对于问题1、我之前提到过这篇文章: e2e.ti.com/.../sub-1-ghz - forum/1067601/LP-cc1352p7-wi-sun-sun-router-node-point-communication、

    我看到技术工程师说:"对于器件之间的多跳、需要通过 BR 进行通信。" 根据我的当前情况、成功将器件联网后、BR 节点以去中心化的方式进行连接、其余节点仍可通过 UDP 进行通信。 因此、我想问一下、网络中的器件是否使用 UDP 通信、通信是否不能通过 BR?

    谢谢、此致、

    约兰德

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

    您好,Marie H,

    有任何更新吗?

    此致、

    约兰德

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

    尊敬的 Yolande:

    正如我在链接线程中所说的: 对于具有直接连接(1跳连接)的设备、数据包可以直接发送到邻居。 对于在它们之间具有多个跳频的设备、通信需要通过 BR。

    我不理解您的测试设置。 例如、您说"以分散的方式连接 BR 节点"、这是否意味着您具有多个 BR? 那么就有多个 PAN 了? 去中心化意味着什么、是器件之间的物理距离?

    谢谢、

    玛丽

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

    您好,Marie,ć

    抱歉、没有去中心化。

    客户当前的情况是、成功将器件联网后、BR 节点断开连接、其余节点仍可通过 UDP 相互通信。 我想问的是、如果网络中的设备使用 UDP 通信、通信是否不会通过 BR?

    此致、

    约兰德

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

    尊敬的 Marie 女士,Yolande 女士转达了先前提出的问题。 我很高兴能直接和您交谈。 我很抱歉我的失实陈述。 在我的当前方案中、只有一个 PAN 网络和一个 BR 节点。 我的意思是、成功将 PAN 网络中的设备联网后、BR 将断开

    并且 不再

    工作、其它路由节点仍可通过 UDP 正常通信。 明白了吗? 此外,关于您上次的答复,我还有一个问题:在一个成功联网的网络中,我如何判断两个节点是否属于邻居关系? 是否可以通过某个参数来确定? 就像我目前的情况一样、我的设备有一个边界路由和三个路由节点。 当网络连接成功时、我查询每个器件的邻居信息、结果就是每个器件都可以查询三个相邻节点。 这是否意味着三个路由节点和边界路由属于相邻关系? 非常期待您的回复! 此致、 比尔

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

    您好、Bill、

    您是否使用单播或多播消息?

    关闭 BR 路由器时,网络中的节点需要一段时间才能注册此路由器。 我怀疑会发生什么情况。 当 RN 注册为不再连接到 BR 时、整个网络将从本质上分离、所有的 RON 都将再次开始寻找 BR、并发出 PAN 广播等。

    我们没有直接 API 来查找您最近的邻居。 但是,您可以使用 PROTOCOL_STACK_INTERFACT_INFO_GET() API 来获取信息。 如果您看一下 ns_coap_node 范例 application/application.c 文件,您可以在 fetch_neighbor_defailes()辅助函数中看到一个示例:

    /*!
     * Helper function to get neighbor node metrics like rssi_in, rssi_out
     * Metrics are copied over to a global structure instance.
     */
    void fetch_neighbor_details()
    {
        protocol_interface_info_entry_t *cur;
        cur = protocol_stack_interface_info_get(IF_6LoWPAN);
    
        uint8_t max_nbrs, nbr_idx = 0;
    
        max_nbrs = cur->mac_parameters->mac_neighbor_table->list_total_size;
        cur_num_nbrs = (cur->mac_parameters->mac_neighbor_table->neighbour_list_size) - 1;
        
        // ...

    谢谢、

    M·H

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

    嗨、Marie

    我当前使用的是 ns_coap_node 示例、但我将多播端口号和单播端口号配置为 udp_port (1234)、然后将 socket_sendto ()调用为数据发送函数、将另一个器件的 IP 地址或多播地址传入为目标地址、 它们确实可以实现单播和广播功能。

    正如你所提到的,我正在使用你所说的"Fetch_neighbor_details()"函数,如果现在没有直接 API 来查找最近的邻居,我的问题是,函数 fetch_neighbor_defaults()是不是可以获取有关网络中当前所有节点的信息?
    我正在尝试确定是否像树一样形成 wisun 网络,如果是这样,当从叶节点调用 socket_sendto()到边界节点时是否会发生跳传输?

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

    您好、Bill、

    Wi-SUN FAN 实际上是一个树网络。 用户指南中有一些基本信息:

    https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_7_10_02_23/docs/ti_wisunfan/html/wisun-stack/wisun-stack-overview.html#what-is-a-fan

     在 ns_CoAP 示例中,fetch_neighbor_default()函数用于获取可转发至 BR 的 RSSI 信息。 但正如您所看到的,有很多信息 可以从 PROTOCOL_STACK_INTERFACT_INFO_GET () API 中提取。

    谢谢、

    M·H

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

    尊敬的 Marie:

    感谢您的回答。 最后、我想问的是、当新的路由节点加入网络时、BR 使用哪个回调函数来及时更新节点信息?
    此外,对于新添加的路由节点,是否可以通过哪个参数直接获取当前网络中 BR 的 IP 地址?

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

    您好、Bill、

    您将需要项目的源代码版本能够找到此内容:ns_br_src (与其他 Wi-SUN 项目位于同一示例文件夹中)。

    您可以通过 Wi-SUN 堆栈跟踪函数调用、但它们最终位于 NcpBase:SendRouteTableUpdate 中。 这会将 PROP_ROPASS_TABLE_UPDATE 事件发送到 pyspinel。  

    从 nanostack_process_routing_table_update_from_stack ()调用 SendRouteTableUpdate。 此 API 是从 ipv6_route_add_metric()中的 IPv6层调用的。 如果您愿意、可以使用 CCS 搜索功能进一步跟踪 API 调用。

    谢谢、

    M·H

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

    嗨、Marie

    正如您提到的 ipv6_route_add_metric ()函数,我目前的做法是:每次向网络添加新节点时,BR 节点都会广播数据。 此时、新添加的节点可以接收广播信息、获取并存储 BR 器件的 IP 地址、然后定期向 BR 器件报告数据。
    但我认为这种方法是没有必要的,你所引用的 ipv6_route_add_metric ()函数是由 BR 节点使用的。 对于路由节点示例 ns_coap_node_src (或 ns_node_src)、当路由节点加入网络时、是否有任何地方可以获取网络 BR 的 IP 信息?

    此致、

    比尔

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

    您好、Bill、

    没错、RN 在加入网络时会收到 BR 的 IP 地址。 该数据存储在 application.c 中找到的全局变量 root_unicast_addr 中。

    您看到过我们有关如何使用 CoAP 消息的 SimpleLink Academy 模块了吗? 它详细说明了如何在任务3中将数据从 RN 发送到 BR、包括代码片段。

    https://dev.ti.com/tirex/explore/node?node=A__Ab5oYpAuOfLVRwkotwJZNQ__com.ti.SIMPLELINK_ACADEMY_CC13XX_CC26XX_SDK__AfkT0vQ__LATEST&placeholder=true

    谢谢、

    M·H