IEEE 802.15.4 Simple TRX

这个示例使用了两块开发板,分别充当 TX 和 RX 的角色。 TX 设备可以定期向 RX 设备发送消息,来演示 IEEE 802.15.4 MAC Driver API 的基本使用。

环境需求

该示例支持以下开发套件:

开发套件

硬件平台

开发板名称

RTL8752H HDK

RTL8752H EVB

有关更多要求,请参考 快速入门

硬件连线

请参考 快速入门 中的 RTL8752H EVB 接口和模块 部分。

配置选项

IEEE 802.15.4 的相关配置,请参考文件 subsys\zb-mac-test\test\rtk_mac\mac_test_common.c 中的 zb_mac_drv_init

默认配置: PanID=0x05ShortAddr=1Channel=12

备注

两个设备应该使用相同的 IEEE 802.15.4 配置。

IEEE 802.15.4 示例工程默认使用 P3_0 作为 Data UART 的 TX 引脚,使用 P3_1 作为 Data UART 的 RX 引脚。

工程中含有 zb_tst_cfg.h 文件,该文件定义了 Data UART 的引脚设置。Data UART 引脚可以根据实际硬件环境自行配置。

#else // For EVB board
#define ZB_DBG_UART_TX_PIN                  P3_0
#define ZB_DBG_UART_RX_PIN                  P3_1

Data UART 的波特率应设置为 2,000,000,电脑 串口助手 工具的参数设置下。

../../../../_images/serial_port_setup.png

串口配置

编译和下载

此示例可以在以下的 SDK 文件夹中找到:

Project file: sdk\board\evb\ieee802154_test\mdk

Project file: sdk\board\evb\ieee802154_test\gcc

要编译和运行示例,请按照以下步骤操作:

  1. 打开项目文件。

  2. 为了编译目标,请按照 快速入门 中的 编译 APP Image 步骤进行操作。

  3. 编译成功后,APP bin 文件 app_MP_sdk_xxx.bin 将会在 bin 文件目录下生成。

  4. 要将 APP bin 下载到 EVB 上,请按照 快速入门 中的 MP Tool 步骤进行操作。

  5. 按下开发板上的 reset 按钮,系统将开始运行。

测试验证

将示例程序烧录到两个开发板后,使用串口工具可以查看运行结果。

测试

  1. 按下 reset 按钮并输入 demo 命令后,设备将周期性地执行 sleep-wake up-send 循环。

  2. 按下 reset 按钮后,设备将自动接收帧。

例如输入 demo 2000000,参数 2000000 表示时间,单位为微秒,可以看到下图所示的 log 信息:

../../../../_images/demo_log.png

示例 Log 信息

代码介绍

本章节的主要目的是帮助应用开发者熟悉开发流程。本章节将根据以下几个部分进行介绍:

源码目录

应用项目中的源文件目前分为以下几类:

└── Project: ieee802154_test
    └── ieee802154_test
        ├── include
        ├── Lib                      包括用户应用程序构建时所依赖的所有二进制符号文件
            ├── gap_utils.lib
            ├── lowerstack.lib
            ├── rtl87x2g_sdk.lib
            ├── libzb_mac_driver.lib
            ├── ROM.lib
            └── zb_ROM.lib
        ├── cmsis
        ├── peripheral               包括应用程序使用的所有外围驱动程序和模块代码
        ├── profile                  包括示例应用程序使用的配置文件或服务
        ├── app                      包括 IEEE 802.15.4 用户应用程序的实现
            ├── overlay_mgr.c
            ├── ancs.c
            ├── app_task.c
            ├── main.c
            └── peripheral_app.c
        ├── shell                    包括 shell 实现
        └── rtk_mac                  包括 IEEE 802.15.4 应用程序实现
            ├── dbg_printf.c
            ├── zb_main.c
            ├── mac_test_cmd.c
            ├── mac_802154_frame.c
            └── mac_test_common.c

初始化

当 EVB 开发板启动并且芯片被重置时,主函数将被调用,并执行以下初始化函数:

int main(void)
{
   extern uint32_t random_seed_value;
   srand(random_seed_value);
   board_init();
   pwr_mgr_init();
   zb_task_init();
   os_sched_start();
   return 0;
}
  • pwr_mgr_init 初始化 DLPS 电源管理模块。

  • zb_task_init 初始化应用任务并注册任务主函数 zb_task_init

  • os_sched_start() 启动操作系统调度器。当调度器启用时,zb_task_init 将被调用,并调用 Zigbee 主函数 zb_test_task 和射频主函数 rx_test_task

void zb_task_init(void)
{
   mac_Initialize_Patch();
   zb_pin_mux_init();
   zb_periheral_drv_init();
   zb_mac_interrupt_enable();
   zb_mac_drv_enable();
   bool zb_sem_create = false;
   zb_sem_create = os_sem_create(&zb_sem, "zb_sem", 0, 16);
   if (zb_sem_create)
   {
      DBG_DIRECT("os_sem_create true");
   }
   else
   {
      DBG_DIRECT("os_sem_create false");
   }
   os_task_create(&zb_task_handle, "zb_test", zb_test_task, NULL, ZB_TASK_STACK_SIZE,
                  ZB_TASK_PRIORITY);
   os_task_create(&rx_task_handle, "rx_test", rx_test_task, NULL, ZB_TASK_STACK_SIZE,
                  ZB_TASK_PRIORITY);
}

TX/RX 流程

在输入 demo 命令后,演示函数将被调用。 该演示函数 cmd_demo 主要用于根据命令行参数设置一些全局变量,并创建一个新任务 ctimer_task,该任务会定期调用 demo_cb 函数,并初始化电源管理。 demo_cb 函数的目的是生成并发送一个 IEEE 802.15.4 数据帧,并记录处理时间。

具体步骤如下:

  1. 定义并初始化一些变量,包括帧控制字段(fc)、开始时间(start)、PAN ID(panid)、源地址(saddr)和目标地址(daddr)。

  2. 设置帧控制字段(fc)的各种属性,如帧类型、寻址模式等。

  3. 使用 generate_ieee_frame 函数生成数据帧,并将其存储在全局变量 g_tx_buf 中。

  4. 调用 GEN_SEQ_DATA_MV_PTR 宏生成序列数据。

  5. 使用 mac_txn_payload_set() 函数将数据帧加载到发送缓冲区(tx buffer)。

  6. 重置传输状态。

  7. 调用 mac_txn_trig() 函数触发数据帧的发送。

  8. 等待传输完成。

  9. 调用 print_tx_result 函数输出传输结果。

  10. 记录结束时间并计算处理时间,然后输出处理时间信息。

  11. 设置电源管理并进入睡眠模式。

射频中断处理

在 TX 或 RX 完成后,射频模块将运行并触发相应的中断。中断类型可以在 RXMAC 中断TXMAC 中断 中找到。