DA14585 rssi转换为dbm

⚠️
大家好. .谢谢你来参加论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,并包含在Dialog主网站中。所有的帖子和账户都已迁移。我们现在只接受新论坛的流量-请张贴任何新的线程//www.wsdof.com/support.我们将在未来几天修复漏洞/优化搜索和标签。
4个职位/ 0个新
最后发表
moiify
离线
最后看到:1个月3天前
加入:2020-03-12 07:26
DA14585 rssi转换为dbm

嗨对话框

我做了一个距离测试,使用da14585和一个信标。SDK提供的API似乎与实际情况不符。

我使用

uint8_t ble_rf_rssi_convert(uint8_t rssi_reg){//注意:近似转换对应以下公式:// dBm = (0.474f * rssi) - 112.4f。return (rssi_reg >> 1U) - 112U);}

我把测试结果放在下面的pdf中,请注意表格。非常感谢

设备:
PM_Dialog
在线
最后看到:12分16秒前
工作人员
加入:2018-02-08 11:03
嗨moiify,

嗨moiify,

您能分享一下您获取RSSI并转换为dBm的步骤吗?任何代码片段来复制它将是非常有用的。

谢谢,PM_Dialog

moiify
离线
最后看到:1个月3天前
加入:2020-03-12 07:26
类型定义struct {
Typedef struct {uint8_t evt_type;///广告地址类型:public/random uint8_t adv_addr_type;///广告地址值struct bd_addr adv_addr;///广告包的数据长度uint8_t data_len;///广告包数据uint8_t Data [ADV_DATA_LEN];///广告包uint8_t RSSI值;} ST_SCAN_INFO;void default_app_adv_report_ind(struct gapm_adv_report_ind const *param) {ble_scan_cb((ST_SCAN_INFO *)param);} int8_t ble_rf_rssi_convert(uint8_t rssi_reg){//注意:近似转换对应于以下公式:// dBm = (0.474f * rssi) - 112.4f。return (rssi_reg >> 1U) - 112U); } void ble_scan_cb(ST_SCAN_INFO *param) { ST_BLE_SCAN_RESULT scan_result = {NULL, 0, NULL, 0}; TBEACON_INFO_STR *tBeaconInfoStr = NULL; int8_t dbm = 0; dbm = ble_rf_rssi_convert(param->rssi); }

我使用上面的代码进行开发和测试。请看一看。非常感谢!

PM_Dialog
在线
最后看到:12分16秒前
工作人员
加入:2018-02-08 11:03
嗨moiify,

嗨moiify,

为了将RSSI转换为真正的dBm,您只需要将RSSI值读取为带符号的值。RSSI由广告结构(gapm_adv_report_ind)中的堆栈报告,该结构作为app_on_adv_report_ind中的参数。为此,在广告报告回调中,您应该获得RSSI值(param->report. RSSI)并将其转换为signed值。

例如:

Uint8_t rssi = param->报告。rssi;

如果rssi = 0xCD,则应该将其转换为-51dBm的有符号值。

当您通过rf_585.c文件中的rf_rssi_convert()从广告报告中获得该值时,它会自动在dbm中转换。该函数传递给堆栈,堆栈为您执行转换。为了将rssi转换为dbm,您不需要收回这个函数。

谢谢,PM_Dialog