zigbee在发送数据不成功的时候,会启用重发机制,而这个重发机制分为:MAC重发,APSC重发,NWK重发,而APSC和NWK重发是以接收到MAC ACK为前提,否则不会重发。
一、重发次数的定义
应用层发出的普通数据包,若一直无响应,如果收不到MAC ACK,则重发发送次数=macPibDefaults.maxFrameRetries + 1;如果收到了MAC ACK则重发次数=NWK_MAX_DATA_RETRIES * ( macPibDefaults.maxFrameRetries + 1 )
应用层发出的需分包的数据包,若一直无响应,如果收不到MAC ACK,则重发发送次数=macPibDefaults.maxFrameRetries + 1;如果收到了MAC ACK则重发次数=APSC_MAX_FRAME_RETRIES * ( macPibDefaults.maxFrameRetries + 1 )
二、 重发次数的设置
MAC重发次数次数在“mac_pib.c”文件里的macPibDefaults数组里面定义,默认是重发3次。
当maxFrameRetries=0的时候,从下面抓包数据可知,协调器对短地址为0xBA89的终端发送了三组数据,每组一条,每次间隔大概400ms。
当maxFrameRetries=1的时候,从下面抓包数据可知,如果终端没回MAC ACK,则协调器会发送三组数据,每组发送两条,
但是哪里控制发送三组数据我暂时还没找到。
APSC重发和NWK重发设置的位置位于“f8wConfig.cfg”文件
/* The maximum number of retries allowed after a transmission failure APSC分发包重发次数(条件收到MAC ACK)*/
-DAPSC_MAX_FRAME_RETRIES=3
/* Max number of times retry looking for the next hop address of a message NWK应用层重发次数(条件收到NWK ACK)*/
-DNWK_MAX_DATA_RETRIES=3
参考资料: