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.

CC1312R: 15.4协议栈 收集器断电后,sensor没有进入孤立模式

Part Number: CC1312R

Ti大神好:

我使用两块cc1312 最新sdk 15.4协议栈, 使用collector 和sensor 的默认例程进行通讯:

当sensor已经连上collector之后, collector断电且在sensor进入孤立节点之前重新上电,此时sensor没有进入孤立节点并且还在发送数据,但是collector收不到;

此时重启sensor和重启collector之后都无法恢复.只能将collector断电且等待一段时间(sensor进入孤立节点之后)再重新上电,才能恢复,请问这个情况是哪块配置的问题?

我这边使用sdk提供的例程 

修改点:

1. 打开sensor和collector 的 -DAUTO_START宏,以便于自动启动

2. collector 启动后自动开启允许网络加入

此外没有修改例程

  • 并不是每次都出现,概率触发

  • 你好,

    1.请问使用的是sensor_sm&collector_sm例程吗

    2.概率触发的频次是?

  • collector 和sensor_oad_offchip_secure例程,触发概率不定, 只要是 collector短时间内断电重新上电,如果sensor没有进入孤立节点的情况下,容易导致这种情况

  • 麻烦帮忙尽快确认一下,需要移植的已经做完了,最后一个bug,马上要转量产了

  • 这种情况可能是由于collector重新上电后被看作一个新的网络节点,而sensor仍然保留着旧的网络信息,因此造成了不匹配。

    你可以按照以下思路(任一)尝试一下:

    1.修改sensor使其在断联之后重新寻找并加入新的网络,而不仅仅是等待进入孤立节点。

    2.都在collector断电且等待一段时间 这样可以达到同步 有测这个时间大概是多久吗

    3.在collector节点上电时,设置一个恢复机制,让collector能够识别出已经存在的sensor节点并加入

  • 1. sensor端目前并不会断开,仍然再发送数据,所以这个方案可能不太行

    2.现场使用的时候无法避免collector的短时间反复上电, collector断电后,sensor全部进入孤立节点大概3-5秒左右,具体应该跟sensor配置的孤立检测时间有关

    3.恢复机制,应如何实现,才能使collector知道sensor未发送数据,如果维护一个数组或者在flash中存储所有节点并进行计时,似乎对内存消耗特别严重


    主要我们的现象是 sensor认为自己还在和collector连接并没有进入孤立模式,collector 也不认为sensor已经掉线,但是却无法收到sensor的数据, 个人猜测应该是双方互相还能收到ack(因为sensor都未进入孤立),只是有些问题导致了没有收到数据

  • 还有一种可能是,CC1312有一种特性是,当设备断电时自动进入低功耗,所以可能导致数据收不到

    你可以尝试修改电源管理模式或者是调整唤醒时间

  • 或者是

    collector定期发出信标以表示其存在,然后sensor定期进行主动扫描以确认连接的collector是否存在,如果不存在,就让sensor重启连接

  • 也有可能是collector时序不同步的问题,可能会影响双方通信,

    collector断电且等待一段时间 这样可以达到同步
  • 这几个方案有没有比较具体的修改示例,这个似乎比较复杂

  • ,然后sensor定期进行主动扫描以确认连接的collector是否存在,如果不存在,就让sensor重启连接

    没有示例

    伪代码可以看一下思路

    while True:
    
    # 这一步可以通过检查收到的ACK或者网络状态标志来完成
    
    if not network.isConnected():
    
       #此时假设有sacnNetworks函数,会返回所有可见的collector的列表
    
      visible_networks = network.scanNetwork()
    
    
    
      #检查连接的collector是否可见
    
       if desired_collector not in visible_networks:
    
      #如果collector不可见,等待一段时间
    
       sleep(1000);
       continue
    
    
    
       #如果collector可见,试图连接它
    
      network.connect(destired_collector)
    
    
    
    #等待一段时间再进入下一次循环
    
     sleep(1000);

    比较拙劣,大致看一下思路