当前文档版本为 v1.2.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

Sub-1G: trx sample

重要

此例程仅存在于特殊版本的SDK中,如有需要请联系Panchip。

1 功能概述

trx_sample演示了BLE和Sub-1G的使用方法,此例程只能在PAN3730 Soc上运行。例程实现了使用BLE进行简单配网后,利用Sub-1G信号进行远距离通信。本例程为了更好的观察提供了RGB灯的控制。

2 环境准备

  • PAN3730 EVB两块

  • Type-C USB线两条(用于供电和查看串口打印Log)

  • 硬件接线:

    • 使用USB线,将PC USB与EVB Type-C USB(USB->UART)相连

    • 使用杜邦线或者跳线帽将EVB上的:

      • TX0 与 P00相连

      • RX0 与 P01相连

  • PC软件: 串口调试助手(UartAssist)或终端工具(SecureCRT),波特率921600

  • 码表或者其他ANT接收设备,手机(nrf connect)

3 编译和烧录

例程位置:zephyr\samples_panchip\sub_1G\trx_sample

编译时Board选择pan3730_evb,Config选择prj.conf

使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍

4 演示说明

例程上电初始化会打印如下日志:

*** Booting Zephyr OS build zephyr-v2.7.0-998-ge555e7b98489  ***
*** llcontroller-v1.0.0-07cf993f ***
controller initializing....
[00:00:00.001,000] <dbg> sub1g.main: BLE and Sub_1G trx sample start!
[00:00:00.001,000] <wrn> bt_hci_core: Failed to set device name (-12)
[00:00:00.100,000] <inf> bt_hci_core: Identity: F5:A6:75:BF:C1:57 (random)
[00:00:00.100,000] <inf> bt_hci_core: HCI: version 5.1 (0x0a) revision 0x0003, manufacturer 0x07d1
[00:00:00.100,000] <inf> bt_hci_core: LMP: version 5.1 (0x0a) subver 0x0000
[00:00:00.103,000] <inf> bt_adv: Start Advertising as F5:A6:75:BF:C1:57 (random)

此时我们用手机app nrf connect 可以搜索到Sub1G Device2这个设备并进行连接。连接成功后需要进行配网操作。选择下图红框中的服务,并向此服务上传两字节数据,具体协议格式如下:

Device type(1 Byte)

Device Number(1 Byte)

0x00 - 接收设备 0x01 - 发送设备

取值范围:0x01- 0xFF

BLE选择服务如下:

../../../_images/ble_connect.jpg

BLE服务界面

此时例程将上报的配网信息进行保存,但不会立即生效,直到APP端主动断开连接,才认为是配网结束,并开始配置网络

设置为发送设备的日志如下,设备编号设置为1:

[00:12:11.887,000] <inf> sub1g: device msg: 1 1

[00:20:21.262,000] <dbg> sub1g.sub_oneg_main_thread: sub-1G init success

设置为接收设备的日志如下,设备编号也设置为1,编号必须与发送设备设置一致

[00:00:22.998,000] <inf> sub1g: device msg: 0 1

[00:00:25.695,000] <dbg> sub1g.sub_oneg_init: Sub-1G rx open

[00:00:25.695,000] <dbg> sub1g.sub_oneg_main_thread: sub-1G init success

配网结束后,就可以使用发送设备的key2键发送控制信息,去控制接收设备的RGB灯。日志如下:

发送设备日志:
[00:37:53.076,000] <dbg> sub1g.button2_irq_callback_falling: Prepare send open light command

[00:37:53.093,000] <inf> sub1g: command send success

接收设备日志:
[00:00:53.215,000] <dbg> sub1g.sub_oneg_main_thread: Light ON

如果想重新返回配网模式,则短按key1键即可返回配网模式进行重新配网。

5 开发者说明

  1. 启用Sub-1G驱动,需要在prj.conf文件中添加”CONFIG_SUB_ONEG=y”和”CONFIG_NEWLIB_LIBC=y”

    CONFIG_SUB_ONEG=y
    CONFIG_NEWLIB_LIBC=y
    
  2. 启用BLE模块,需要在prj.conf文件中添加以下宏定义

    CONFIG_BT=y
    CONFIG_BT_SMP=n
    CONFIG_BT_PERIPHERAL=y
    CONFIG_BT_DIS=y
    CONFIG_BT_DIS_PNP=n
    CONFIG_BT_BAS=y
    CONFIG_BT_DEVICE_NAME="Sub1G Device2"
    CONFIG_BT_DEVICE_APPEARANCE=833
    CONFIG_BT_AUTO_PHY_UPDATE=n
    CONFIG_BT_DEBUG_LOG=y
    
  3. Sub-1G初始化

    /**
     * @brief Configure the sub-1G module.
     *
     * @param cfg Pointer to the sub-1G config struct.
     *
     * @retval 0 If successful.
     * @retval -errno Negative errno code on failure.
     */
    int sub_oneg_configure(sub_oneg_cfg *cfg);
    
  4. Sub-1G接收启动

    /**
     * @brief Start receive mode.
     *
     * @param cfg      Pointer to the sub-1G config struct.
     * @param mode     Set continue rx mode or single rx mode.
     *					CONTINUE_RX_MODE: After the rx is finished,
     *						it will not exit the rx mode and will remain in the rx mode.
     *					SINGLE_RX_MODE: When rx is finished, it exits rx mode
     * @param timeout  Set rx timeout(ms), 0 indicates no timeout until data is received.
     *
     * @retval 0 If successful.
     * @retval -errno Negative errno code on failure.
     */
    int sub_oneg_receive_start(sub_oneg_cfg *cfg, sub_oneg_rx_mode_t mode, uint32_t timeout);
    
  5. Sub-1G发送数据

    /**
     * @brief Start send mode.
     *
     * @param cfg      Pointer to the sub-1G config struct.
     * @param buffer   Send data buffer.
     * @param length   Send data length.
     * @return int     The time it takes to send.
     */
    int sub_oneg_send(sub_oneg_cfg *cfg, uint8_t *buffer, size_t length);
    
  6. Sub-1G停止接收

    /**
     * @brief Exit receive mode.
     *
     * @param cfg     Pointer to the sub-1G config struct.
     */
    void sub_oneg_receive_stop(sub_oneg_cfg *cfg);
    

​ 更多有关sub-1G的介绍请参考 Sub-1G使用指南文档

6 RAM/Flash资源使用情况

Memory region         Used Size  Region Size  %age Used
FLASH:       89880 B       256 KB     34.29%
SRAM:        26944 B        50 KB     52.63%