跳转到主要内容

DA14585 rssi转换为dbm

1年前

DA14585 rssi转换为dbm

发布的moiify0点 3回复
0的问题

嗨对话框

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

我使用

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

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

附件 大小
DA14585信号强度测试. pdf 267.64 KB

1年前

PM_Dialog

嗨moiify,

你能分享一下你正在进行的获取RSSI并转换为dBm的过程吗?任何用来复制它的代码片段都是非常有用的。

谢谢,PM_Dialog

1年前

moiify 0点
Typedef struct {uint8_t evt_type;///发布地址类型:public/random uint8_t adv_addr_type;///发布地址值struct bd_addr adv_addr;///发布数据包的数据长度uint8_t data_len;///Data of advertising packet 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。返回((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); }

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

1年前

PM_Dialog

嗨moiify,

为了将RSSI转换为实际dBm,您只需要将RSSI值作为带符号的值读取。RSSI是由发布结构(gapm_adv_report_ind)中的堆栈报告的,该结构作为app_on_adv_report_ind中的一个参数出现。为此,在广告报告回调中,您应该获得RSSI值(param->report. RSSI)并将其转换为有符号值。

例如:

Uint8_t rssi = param->报告。rssi;

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

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

谢谢,PM_Dialog