吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1214|回复: 4
收起左侧

[讨论] zigbee单播通信

[复制链接]
dumbking 发表于 2021-7-27 00:46

一、单播通信理论

(1)Zigbee网络通信方式有4种:单播,广播,组播,绑定(MAC)。

(2)单播通信的特点:在Zigbee网络里,模块之间要进行通信,发射模块要明确知道接收模块的网络地址。

(3)Zigbee模块的地址特点:模块在加入网络的时候,父节点随机分配网络地址给子节点。但是协调器模块在)网络里的地址永远都是0x00。

image-20210528085917105

单播发送数据需要明确的信息
(1)目标地址
(2)目标端点与簇
(3)要发送的数据大小

应用任务层数据发送函数

该函数在GenericApp.c里的GenericApp_SendTheMessage函数里:

AF_DataRequest(
              &GenericApp_DstAddr, //目标的网络地址指针
              &GenericApp_epDesc,//端点描述符指针
              GENERICAPP_CLUSTERID,//目标簇
              (byte)osal_strlen( theMessageData ) + 1,//发送数据的大小
              (byte *)&theMessageData,//发送数据缓冲区的地址
              &GenericApp_TransID,//这是个全局变量,用来保存发送的次数
              AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );//发送路径,don't care

image-20210529101711143

image-20210528090054641

网络地址结构体

网络地址结构体就是定义在GenericApp.c前面的一个结构体变量,该类型为afAddrType_t,系统已经默认定义了一个网络地址结构体变量GenericApp_DstAddr,我们可以在GenericApp_Init()函数中,对网络地址结构体变量的成员进行赋值。

//网络地址结构体:
typedef struct
{
      union
     {
            uint16      shortAddr;//网络地址
            ZLongAddr_t extAddr; //MAC地址
     } addr;
     afAddrMode_t addrMode;//通信模式
     byte endPoint; //指定的端点
     uint16 panId;  //don't care
} afAddrType_t;
//通信模式枚举类型:
typedef enum
{
        afAddrNotPresent = AddrNotPresent,//当前不确定
        afAddr16Bit      = Addr16Bit,//单播通信模式
        afAddr64Bit      = Addr64Bit,//MAC通信模式
        afAddrGroup      = AddrGroup,//组播通信模式
        afAddrBroadcast  = AddrBroadcast//广播通信模式
} afAddrMode_t;        

image-20210529102118365

二、端点与簇

1.端点

(1)通常发送的数据要明确该数据是给接收模块的哪个任务层用的,而这个就是用端点来指定的

(2)端点是一个字节的编号,通常为定义在GenericApp.h中的一个宏。端点必须要与任务层绑定,而这个就是用端点描述符来实现的。

(3)端点描述符是一个结构体变量,该变量定义在GenericApp.c开头,我们也可以定义新的端点描述符。该结构体的类型为 endPointDesc_t,系统也默认定义了一个端点描述符GenericApp_epDesc。

(4)我们可以在 GenericApp_Init()函数中,把新的端点描述符变量赋值,使新的端点与某个任务层绑定。

//端点结构体类型:
typedef struct
{
       byte endPoint;//端点的值
       byte *task_id;  //与端点绑定的任务层ID
       SimpleDescriptionFormat_t *simpleDesc;//端点的描述信息,don’t care
       afNetworkLatencyReq_t latencyReq;//don’t care
} endPointDesc_t;        

2.簇

(1)在接收模块中,每个任务层可以对不同种类的数据采取不同的处理方式,这里的数据种类就是簇(CLUSTER)

(2)在发送模块中,簇是定义在GenericApp.h中的一个宏,我们也可以定义新的簇。

(3) 系统也默认定义了一个簇 GenericApp_CLUSTERID,在GenericApp.h中

三、 应用任务层数据发送接收API

(1)该函数为GenericApp.c中的void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )

image-20210529115258491

(2)在switch语句中可以定义对不同的簇采用不同的方式处理数据

(3)该函数中的pkt->cmd.Data就是接收数据的首地址

image-20210528090956245

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

bennyt 发表于 2021-7-27 01:47
来学习一下通信标准,不错。
头像被屏蔽
Wits 发表于 2021-7-27 07:10
andyup2 发表于 2021-7-27 08:33
hejie127 发表于 2021-7-27 10:19
太复杂了,纯原理的真的感觉很难上手。
不知道zigbee有没有8266这样的模块化产品可以直接使用呢?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 00:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表