Skip to content

第14章 仿真到 CC2530 逐行迁移 ​

本章目标

把 ns-3 的点对点 LED 仿真代码,逐行对照迁移到 CC2530 + Z-Stack 3.0 工程。看完你会明白:协议是同一套,只是换了 API 皮。

14.1 迁移总览 ​

维度ns-3 仿真CC2530 + Z-Stack
工程类型Linux C++(ns-3 模块)IAR EW for 8051 工程
协议栈ns-3 zigbee 模块TI Z-Stack 3.0(源码提供)
设备类型设置SetDeviceType()zgDeviceLogicalType 编译宏
数据发送ZigbeeAps::ApsdeDataRequestAF_DataRequest
数据接收ApsdeDataIndication 回调afIncomingData / 应用事件
GPIO/LEDLED_ON() 模拟函数HalLedSet(HAL_LED_1, ...)

14.2 逐行迁移对照表(核心) ​

#ns-3 代码(仿真)CC2530 Z-Stack(真机)说明
1capabilities.SetDeviceType(COORDINATOR);-DZDO_COORDINATOR(编译宏)/ zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR;角色声明
2capabilities.SetDeviceType(ENDDEVICE);-DZDO_ENDDEVICE / ZG_DEVICETYPE_ENDDEVICE终端角色
3req.m_srcEndPoint = 8;afRegister(&endPointDesc8);(端点 8 描述符注册)ns-3 免注册,Z-Stack 必须注册
4req.m_dstEndPoint = 3;SampleApp_epDesc.endPoint = 3;目的端点
5req.m_clusterId = 0x0006;clusterList[0].clusterId = ONOFF_CLUSTER_ID;On/Off 簇
6req.m_profileId = 0x0104;profileId = HA_PROFILE_ID;Home Automation
7payload[0]=0x01; payload[1]=seq++;theMessageData[0]=0x01; theMessageData[1]=seq++;应用载荷
8ApsdeDataRequest(aps, req, p);AF_DataRequest(&SampleApp_DstAddr, &endPointDesc3, 2, theMessageData, &r, 0, AF_DEFAULT_RADIUS);发送调用
9ind.m_srcEndpoint == 8 && ind.m_dstEndPoint == 3afIncomingMSGCB 里判 MSGpkt->srcEndPoint / dstEndPoint接收过滤
10LED_ON() / LED_OFF()HalLedSet(HAL_LED_1, HAL_LED_MODE_ON/OFF);执行动作
11命令码 0x01/0x00 应用协议同样自定义(可换成 ZCL On/Off 命令 0x01/0x00)应用层协议不变
12序号防重放同理(或交给 APS 计数器)安全习惯

14.3 关键差异点(易踩坑) ​

差异说明
端点要注册Z-Stack 必须 afRegister,否则收不到任何消息
目的地址结构Z-Stack 用 afAddrType_t(短地址 + 端点),发送前要填 addr.shortAddr
目的端点放在消息里Z-Stack 的 AF_DataRequest 参数包含目的端点,而接收端用 srcEndPoint/dstEndPoint 过滤
任务事件驱动Z-Stack 收包走 OSAL 事件(如 SampleApp_MessageMSGCB),不是回调

14.4 迁移三步法 ​

  1. 照抄结构:角色 → 端点注册 → 发送/接收处理(表里 1~12 行);
  2. 换 API 皮:ApsdeDataRequest → AF_DataRequest,HalLedSet 替代模拟函数;
  3. 真机验证:SmartRF 烧录两块板,串口观察「收到命令 → LED 亮灭」。

学习价值

先仿真理解「协议在干什么」,再迁移就只剩「API 怎么拼」——这就是本栏目存在的意义。

aioteer · 物联网专业课程群

💬AI 伴学配置