ZigBee_数据发送函数解析

数据发送函数原型:

afStatus_t AF_DataRequest( afAddrType_t *dstAddr,     //指向发送目的地址指针          
                           endPointDesc_t *srcEP,     //指向目的端点的端点描述符指针
                           uint16 cID,                //发送端点的输出簇ID
                           uint16 len,                //发送字节数
                           uint8 *buf,                //指向发送数据缓存的指针
                           uint8 *transID,            //发送序列号指针,如果消息缓存发送,这个序列号将增加1
                           uint8 options,             //发送选项  路由发现
                           uint8 radius               //最大条数半径   路由域
                          ) 

一般配置模式:

afAddrType_t my_DstAddr;
  my_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;     //寻址方式
  my_DstAddr.endPoint = GENERICAPP_ENDPOINT;         //设置端口号
  my_DstAddr.addr.shortAddr = 0x0000;                //协调器的短地址
  AF_DataRequest( &my_DstAddr, &GenericApp_epDesc,   //发送目的地址、发送的端点描述符
                     GENERICAPP_CLUSTERID,           //簇 ID
                     sizeof(data_buffer),            //发送的字节长度
                     (uint8 *)&data_buffer,          //发送的数据
                     &GenericApp_TransID,            //发送的数据ID序号
                     AF_DISCV_ROUTE,                 //可选一项或几项   路由发现
                     AF_DEFAULT_RADIUS );            //路由域

路由发现选项:

#define AF_ACK_REQUEST           0x10   //APS层应答确认请求,只使用在单播模式中
#define AF_DISCV_ROUTE           0x20   //  如果要使设备发现路由,将一直使用此选项
#define AF_EN_SECURITY           0x40   //如果使用这个选项将导致设备跳过路由直接发送消息
#define AF_SKIP_ROUTING          0x80   //保留

发送数据的目的地址:

typedef struct
{
  union
  {
    uint16      shortAddr;        //目的地址,短地址或长地址
    ZLongAddr_t extAddr;          
  } addr;
  afAddrMode_t addrMode;          //地址模式,枚举类型,有四种模式
  uint8 endPoint;                 //端点信息
  uint16 panId;                   //网络PANID
} afAddrType_t;   

地址模式中的四种寻址方式:

typedef enum
{
  afAddrNotPresent = AddrNotPresent,    //间接寻址  多用于绑定,当不知道目标地址时,从绑定表中查找
  afAddr16Bit      = Addr16Bit,         //单点寻址,指定短地址  用于点对点通信
  afAddr64Bit      = Addr64Bit,         //单点寻址,指定长地址  用于点对点通信
  afAddrGroup      = AddrGroup,         //组播寻址  使用前必须定义组                                 
  afAddrBroadcast  = AddrBroadcast      //广播寻址                                   
} afAddrMode_t;

广播寻址四种模式:
0xFFFF:数据包将被传送到网络上的所有设备,包括睡眠中的设备。对于睡眠中的设备,数据包将被保留在其父节点,直到它苏醒后主动到父节点查询,或者直到消息超时丢失数据包(此为默认值)

0xFFFD:除了睡眠中的任何设备

0xFFFC:发送给所有的路由器,包括协调器

0xFFFE :不指定目标地址,而是通过协议栈读取绑定表获得相应额度的目标设备的短地址

关于发送函数长度的问题:
osal_strlen(theMessageData)+1, 如果不在发送函数中加入这一句,会出现速率倍增问题
广播与单播通信实验!!!!

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[2\]的内容,8258 Zigbee数据发送格式遵循IEEE 802.15.4协议的数据帧结构。数据帧由同步帧头(SHR)、同步序列码(Preamble Sequence)、帧定界符(Start of Frame Delimiter)、MAC数据帧和PHY数据域组成。MAC数据帧嵌套在PHY数据域中。具体的数据帧结构可以参考IEEE 802.15.4协议定义的数据帧结构图。\[2\] 根据引用\[3\]的内容,当协调器希望将数据传输到设备时,在不启用信标的网络中,协调器会先将准备发送给设备的数据暂时存储起来。然后,当协调器接收到设备发送数据请求帧时,协调器会回复一个ACK给设备表示收到数据请求。接着,协调器将数据发送给设备。最后,设备接收到数据后会给协调器回复一个ACK表示接收到数据。这是对等设备之间的数据传输流程。\[3\] #### 引用[.reference_title] - *1* *2* [物联网--Zigbee协议(二):Zigbee协议架构以及数据帧结构](https://blog.csdn.net/aixuexidexiaowan/article/details/127017017)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ZigBee网络数据传递流程_IEEE802.15.4协议—帧类型和数据传输模型](https://blog.csdn.net/weixin_39819327/article/details/110218799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值