1年前
DA14585 rssi转换为dbm
发布的moiify0点 3回复嗨对话框
我做了距离测试,使用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年前
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年前
嗨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
1年前
嗨moiify,
你能分享一下你正在进行的获取RSSI并转换为dBm的过程吗?任何用来复制它的代码片段都是非常有用的。
谢谢,PM_Dialog