Sub-1G 开发指南¶
1 概述¶
本文档将介绍Sub-1G模块的相关内容,以供开发者参阅。
Sub-1G支持半双工无线通信,工作频段为 370~590 MHz,740~1180MHz。最高具有-140dBm 的灵敏度,22dBm 的最大输出功率。
2 配置¶
通信频率
频率设置范围为370~590 MHz,740~1180MHz。收发两端需要配置相同的频率。
扩频因子(SF)
SF因子的设置范围为7-12。数值越大传输速度越慢,传输距离越远。收发两端需要配置相同的SF参数。
信道带宽(BW)
带宽支持62.5KHz、125KHz、250KHz、500KHz。带宽越小,传输速度越慢,传输距离越远。收发两端需要配置相同的BW参数。
编码率(CR)
码率支持4/5,4/6,4/7,4/8。码率越小,传输速度越慢,传输距离越远。收发两端需要配置相同的CR参数。
低速率模式
低速率模式提供了更低速率的传输,0.08~20.4Kbps。会使得传输距离上更远一些。初始化时将ldr_en置1即可使能。
前导码符号数量(Preamble)
取值范围 8—65535,默认值为 8。在实现空中唤醒应用场景时可以将前导码符号数量增大,同时发射时间也会增大,从而实现接收端在低功耗模式下被长的前导码唤醒的功能。
同步字(syncword)
同步字用于设备的通信识别,只有设置了相同同步字的设备才能进行通信。
功率
发射功率表(433MHz)如下:
功率配置值
实际发射功率(dbm)
发射电流(mA)
0
-23.50
11
1
-18.00
13
2
-11.00
15
3
-8.00
16
4
-7.00
17
5
-6.00
18
6
-4.00
20
7
-2.00
23
8
0
25
9
0.60
29
10
1.10
30
11
4.60
34
12
7.10
38
13
9.00
42
14
10.00
46
15
11.70
50
16
12.70
53
17
13.70
57
18
14.40
60
19
15.10
64
20
16.10
69
21
17.00
74
22
17.60
79
23
18.60
87
24
19.70
100
25
21.00
113
26
22.00
135
27
22.00
136
28
22.00
137
29
22.00
138
30
22.00
139
发射电流仅为Sub-1G模块的电流,不包含MCU及其他部分的电流
3 通信模式¶
3.1 发射模式¶
单包发送:TX完成后会退出TX,下一次TX需要重新调用TX函数
连续发送:设置完连续TX模式后,可以一直调用写数据函数进行TX,不需要每次都调用TX函数
一般我们推荐使用单包发送的模式进行。
3.2 接收模式¶
无超时单包接收:打开接收后,不会超时退出,一直等到接收到一包数据为止,接收完成后退出RX模式。
有超时单包接收:打开接收后,如果设置时间内没有收到数据,将超时退出RX模式,并上报超时中断。
连续接收模式:连续接收模式没有超时设置,RX启动后会一直等到数据,然后上报RX中断。之后自动再次进入RX。
3.3 接收提前中断功能¶
Sub-1G模块在RX模式下提供了一种提前中断的功能。提前中断功能需要设置确定从第几个字节开始计数,以及检查多少个字节的数据(目前仅支持8字节或者16字节两种),也就是要求发送端至少需要发送超过8字节的数据,此功能才会有效。
当接收到指定大小的数据后,芯片就会产生中断,此时我们读取接收到的数据,如果判断是我们预期的数据,可以继续让芯片接收,如果不是我们预期的数据则可以直接让芯片退出接收。在一些特定的场景下,此功能对于系统的执行效率是有帮助的。
4 低功耗¶
Sub-1G模块提供了两种休眠模式,一种是sleep,另一种是deepsleep
Sleep:调用sub_oneg_pm_ctrl函数控制进入sleep模式,或者从sleep模式唤醒
Deepsleep:调用sub_oneg_pm_ctrl函数控制进入或退出deepsleep模式。但是需要注意的是,从deepsleep模式下醒来之后,需要重新初始化,收发模式也需要重新选择。
5 DCDC功能¶
DCDC 功能开启后,可以使芯片的接收电流降低至 12.5mA,默认该功能关闭。
开启 DCDC 功能后,当芯片需要休眠时,需要提前手动关闭 DCDC 功能。
6 CAD功能¶
CAD功能可以检测空中是否有Sub-1G信号。MCU可以在一段时间内检测CAD-IRQ(GPIO11)是否被拉高来判断是否有信号。在初始化中将cad_en置1,就会开启CAD检测功能。CAD功能仅在接收模式有效。
开启CAD功能将会修改芯片的接收阈值,所以我们在使用完成CAD功能之后应该调用关闭函数,关闭CAD功能。
7 智能搜索功能¶
Sub-1G模块可实现在接收模式下智能化的识别信道中的SF参数,达到接收不同SF信号的目的。
使用此功能需要在TX端将配置结构体intelligent_search_en设置为1即可。RX端需要将配置结构体intelligent_search_en设置为1后,调用sub_oneg_intelligent_search函数设置搜索范围,目前版本的芯片只支持搜索 SF7~11,暂不支持 SF12 智能搜索。但是不建议全部开启,因为全部开启后会出现丢包现象。一般开启范围不超过3个。需要关闭智能搜索时将配置结构体intelligent_search_en设置为0,再次调用sub_oneg_intelligent_search函数。
开启智能搜索功能,会修改RF的接收阈值,所以在不使用搜索功能的时候建议关闭此功能。
7 Sub-1G驱动API¶
sub_oneg_configure函数实现了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);
sub_oneg_intelligent_search函数实现了智能搜索的开关以及配置搜索范围。
设置范围可以选择以下一个宏或者多个宏的或值。
#define SUB_ONEG_SF_SEARCH_7 (1 << 0)
#define SUB_ONEG_SF_SEARCH_8 (1 << 1)
#define SUB_ONEG_SF_SEARCH_9 (1 << 2)
#define SUB_ONEG_SF_SEARCH_10 (1 << 3)
#define SUB_ONEG_SF_SEARCH_11 (1 << 4)
/**
* @brief Control intelligent search.
*
* @param cfg Pointer to the sub-1G config struct.
* @param sf_range SF range of search.
*
* @retval 0 If successful.
* @retval -errno Negative errno code on failure.
*/
int sub_oneg_intelligent_search(sub_oneg_cfg *cfg, uint8_t sf_range);
sub_oneg_cad_off函数实现了关闭CAD功能
/**
* @brief Disable CAD function
*
*/
void sub_oneg_cad_off(void);
sub_oneg_receive_start函数实现了开启接收。
/**
* @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);
sub_oneg_receive_stop函数实现了停止接收。
/**
* @brief Exit receive mode.
*
* @param cfg Pointer to the sub-1G config struct.
*/
void sub_oneg_receive_stop(sub_oneg_cfg *cfg);
sub_oneg_send函数实现了发送数据。
/**
* @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);
sub_oneg_pm_ctrl函数实现了低功耗的控制。
/**
* @brief Power management control.
*
* @param pm Power management mode.
* DEEPSLEEP_TO_STANDBY3: from deepsleep to run mode.
* SLEEP_TO_STANDBY3: from sleep to run mode.
* STANDBY3_TO_DEEPSLEEP: from run mode to deepsleep.
* STANDBY3_TO_SLEEP: from run mode to sleep.
* @retval 0 If successful.
* @retval -errno Negative errno code on failure.
*/
int sub_oneg_pm_ctrl(sub_oneg_pm_ctrl_t pm);
sub_oneg_plhd_switch函数实现了提前中断功能的开关,其中参数start_address表示开始的位置,可以从0开始也就是数据的头部开始,也可以从数据的中间位置,例如2,3,4等位置开始。on_off参数0表示disable,1表示enable。
/**
* @brief The phld function was enabled.
*
* @param start_address Match the number of start bytes.
* @param length Matches the length of bytes. You can just choose 8 or 16 bytes.
* SUB_ONEG_PLHD_LEN8 8 bytes
* SUB_ONEG_PLHD_LEN16 16 bytes
* @param on_off Enable or disable this function.
*/
void sub_oneg_plhd_switch(uint8_t start_address, uint8_t length, uint8_t on_off);
sub_oneg_dcdc_switch函数实现了控制dcdc的开关。
/**
* @brief The dcdc mode was enabled.
*
* @param on_off 1-enable 0-disable.
*/
void sub_oneg_dcdc_switch(uint8_t on_off);
sub_oneg_irq_cb 函数是中断的回调函数,用户需要实现该回调函数以便处理中断事件。具体的事件类型以及使用方式可以参考Sub-1G的例程。
/**
* @brief Sub-1G event callback function. Application need implementation.
*
* @param irq_type event type.
* @param rx_msg Point to the rx message struct. Only if the rx event is valid.
*
*/
typedef void (*sub_oneg_irq_cb)(uint8_t irq_type, rx_message_t *rx_msg);