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.
Hi Aries,
您说的低功耗节点是指经常处于休眠状态的End Device节点吗?
休眠状态的End Device 节点是可以收到广播包的,它的父节点会为它缓存一定时间的广播包,这个缓存时间在 f8wConfig.cfg文件里的NWK_INDIRECT_MSG_TIMEOUT。具体可以参考“Z-Stack Developer's Guide.pdf” 3.3.3 节。
向多个休眠的End Device发送广播包是不推荐的,可以转为向router发广播包,router再将广播包发给它的各个子设备。可以参考:http://e2e.ti.com/support/low_power_rf/f/158/p/18101/603616.aspx#603616
就是说在超时时间NWK_INDIRECT_MSG_TIMEOUT内,父节点要收到子节点的PollReq后,才发数据包给EndDevice。
TIMAC是否也有这种功能?因为PollReq是MAC层定义的动作啊。
Hi Aries,
对的,超过了NWK_INDIRECT_MSG_TIMEOUT时间,那么就是超时了,子节点再发PollReq也收不到该数据包。
在TIMAC 中也有类似的机制,如果是非直接信息类型的终端节点(in-direct messaging device),那么它需要在MSA_WAIT_PERIOD时间内醒来进行一次PollReq,从Coordinator中获取数据。具体请参考“Mac Sample Application - Software Design.pdf”的3.2.2.11节
TIMAC我测试过indirect模式发送,接收端的MSA_WAIT_PERIOD值必须小于发送端的macPibDefaults.transactionPersistenceTime才有效。但是TIMAC如何把一个数据报文完全雷同的数据包,用indirect模式发给多个目标?按照我的理解,MAC_McpsDataAlloc是获取一个发送队列缓存。MAC_McpsDataReq是将这个缓存放入发送队列,并且产生一个MAC_MCPS_DATA_CNF事件,如果同一包数据,要发给多个节点,会分配多个发送缓存。这种方式效率比较低下,ram开销大。
我希望能用到这样的功能,TIMAC下,将同样的数据发给多个不同的,要进入sleep模式的节点。节点唤醒后向coord发送PollReq。我节点发送Poll的间隔时间小于transactionPersistenceTime。
我协调器向网络发广播包,目标地址用0xFFFF,抓包的时候,看到路由器在转发这个包,同时协调器和路由器在收到EndDevice子节点DataRequest(包的名称,MAC层的命令包,MAC原语为PollRequest)后,也会将这包数据转发给EndDevice子节点。
以上功能是在Z-stack上实现的,如果要在TIMAC上实现,应该怎么做?
Hi Aries,
Z-Stack 上确实是有这个功能的,这个跟Z-Stack Developer's Guide上的描述也是吻合的。
您有试过在TIMAC上广播发送in-direct messaging吗?
您在本贴一楼提到在MAC层发送时用广播地址+MAC_TXOPTION_INDIRECT的操作是违法的,这个是实验的结论吗?