We use DA14531 modules in our production units. These modules are pre-programmed and tested before adding them to the main board.
We have noticed that a few production units suffer from bad connectivity. At closer ranges (less than 2 metres), the RSSI value drops to about -85dBm, which further drops to about -100dBm as the receiver is moved further. Some have a reduced range of about 4 to 6m. A few disconnects within a couple of metres range and then does not advertise again. The user can see the advertisement name again once the unit is rebooted.
These modules were all tested while running at the highest power level (AT+PWRLVL=12).
Is there a way to test and verify what is causing the bad connectivity (Any hardware failure, antenna issues or insufficient power supply consumption). If not, would it be possible to test any particular value and reject the module before adding them to the production boards. Most of the time, RSSI does not provide much significant data at closer distances (before adding them to the board) during production stages.
P.S. The Codeless version has been upgraded from SDK6.380.12.6 to SDK6.380.16.55, which did not solve the issue.
Kind Regards,
Arun
Hi Arun,Thank you for posting your question online.
Arun Kumar said:Is there a way to test and verify what is causing the bad connectivity (Any hardware failure, antenna issues or insufficient power supply consumption). If not, would it be possible to test any particular value and reject the module before adding them to the production boards. Most of the time, RSSI does not provide much significant data at closer distances (before adding them to the board) during production stages.
What you are describing corresponds to bad installation location. Please refer on the DA14531MOD Datasheet, on section 8. Design Guidelines on page: 17Did you follow the instructions for the placement of the DA14531MOD in your board? If the placement of the DA14531MOD fits the description of the Datasheet then it could be a soldering issue or a damaged unit.Could you please also share the AT command sequence you have during boot-up.
Best Regards,OV_Renesas
The instructions were followed on the placement of DA14531MOD on our board. Please check the references attached.
These modules are machine soldered and later X-ray verified for any soldering issues.
The AT command sequence is as follows:
Step 1. AT+AUTH=<pwd>
void user_at_auth(struct at_cmd_params_t* arg, char* reply_string) { if( (arg->arg_count == 0) || (validate_auth(&arg->cmd_buffer[arg->arg_index[0]]) == false) ) { arg->error_status = AT_CONSOLE_ERROR_14; // Argument out of range arg->success_flag = false; codeless_env.isAuth = false; return; } uint32_t authcode=ahtoi32(&arg->cmd_buffer[arg->arg_index[0]]); // arch_printf("authcode=%d,codeless_env.passCode=%d codeless_env.isAuth=%d \r\n",authcode, codeless_env.passCode,codeless_env.isAuth); if(codeless_env.passCode == authcode) { arch_printf("success\r\n"); arg->error_status = AT_CONSOLE_NO_ERROR; // Argument out of range arg->success_flag = true; codeless_env.isAuth = true; } else { arch_printf("fail\r\n"); arg->error_status = AT_CONSOLE_ERROR_14; // Argument out of range arg->success_flag = false; codeless_env.isAuth = false; } }
Note: AT+PIN is not used to hide/protect the set password.
Step 2. Queries, AT+PWRLVL. Then communicates normally.
Hi Arun,Thank you for the reply.Could you please try the following modification on the AT+PWRLVL command and see if you are able to see any difference on the Signal strength:
//Original if (validate_argument(&info, &result) == 0) { #ifdef __DA14531__ rf_pa_pwr_set((rf_tx_pwr_lvl_t)result); #else arch_sprintf(reply_string, "%s", not_supported_string); #endif arg->success_flag = true; } //Modified if (validate_argument(&info, &result) == 0) { #ifdef __DA14531__ rf_pa_pwr_set((rf_tx_pwr_lvl_t)result); rf_reinit(); //explicitly call the RF Re-init API to re-initialize the Radio after the Level change #else arch_sprintf(reply_string, "%s", not_supported_string); #endif arg->success_flag = true; }
AT+PWRLVL during connection does not have any arguments (It is a query). The function has been modified at our end to call rf_pa_pwr_get() in case arg_count == 0. It also does not sets the power level if the value sent is the same as the previously set value. However, in ble_arp.c, our code is modified as follows under rf_init_func():
#if !defined (CFG_ENHANCED_TX_PWR_CTRL) // BB: set the default power level #ifdef SET_DEFAULT_PWRLVL // Initialize Tx output power level to default 12U i.e +2.5dBm rf_pa_pwr_set(RF_TX_PWR_LVL_PLUS_2d5); #else // Initialize Tx output power level to default 0dBm rf_pa_pwr_set(RF_TX_PWR_LVL_0d0); // 9U - +0dbM // rf_pa_pwr_set(RF_TX_PWR_LVL_MINUS_13d5); //2U : -13.5dBm ~ 50 micro watts #endif // Near Field Mode Enable if (rf_nfm_is_enabled()) { rf_pa_pwr_set(RF_TX_PWR_LVL_MINUS_19d5); } #else // BB: set the default power level #ifdef SET_DEFAULT_PWRLVL // Initialize Tx output power level to default 12U i.e +2.5dBm rf_pa_pwr_set(RF_TX_PWR_LVL_PLUS_2d5); #else // Initialize Tx output power level to default 0dBm rf_pa_pwr_adv_set(RF_TX_PWR_LVL_0d0); // 9U - +0dBm // rf_pa_pwr_adv_set(RF_TX_PWR_LVL_MINUS_13d5); //2U : -13.5dBm ~ 50 micro watts #endif #endif
Our set power level is +2.5dBm, unless changed by the user. Would you like me to change this section of the code?
Hi Arun,Thank you for the reply.Since you are setting the Tx power level inside the rf_init_func, you do not need to call the rf_reinit API.Do you have any metal components on your PCB?Do you have any metal components on the box that you place the PCB?How many devices have shown this Signal Strength Issue?Best Regards,OV_Renesas
We have two aluminium pillars (one on the hole shown in the previous attached picture) on our PCB, which are much further than the minimum recommended free space. Also, all our units have got the same assembly. We might have seen more than 20+ cases (However, the current number might be a bit more). I was able to test a unit that exhibits this issue using Renesas SmartConsole and SmartBond. The distance between the module and the phone used for testing was less than 0.75m. Attached are the screen grab and log files captured.
01-31 16:25:09.263 I [BleDevice] Connected 01-31 16:25:09.264 I [BleDevice] Discover services 01-31 16:25:09.283 D [BleDevice] Read RSSI 01-31 16:25:09.285 D [BleDevice] didReadRSSI: [Success] rssi=-52 01-31 16:25:09.437 D [BleDevice] didDiscoverServices: [Success] 01-31 16:25:09.485 D [BleDevice] didDiscoverCharacteristicsFor: [Success] Device Information (0x180A) 01-31 16:25:09.499 D [BleDevice] didDiscoverCharacteristicsFor: [Success] CodeLess (866D3B04-E674-40DC-9C05-B7F91BEC6E83) 01-31 16:25:09.501 D [BleDevice] didDiscoverDescriptorsFor: [Success] Manufacturer Name String (0x2A29) 01-31 16:25:09.501 D [BleDevice] didDiscoverDescriptorsFor: [Success] Model Number String (0x2A24) 01-31 16:25:09.502 D [BleDevice] didDiscoverDescriptorsFor: [Success] Firmware Revision String (0x2A26) 01-31 16:25:09.503 D [BleDevice] didDiscoverDescriptorsFor: [Success] Software Revision String (0x2A28) 01-31 16:25:09.503 D [BleDevice] didDiscoverDescriptorsFor: [Success] System ID (0x2A23) 01-31 16:25:09.504 D [BleDevice] didDiscoverDescriptorsFor: [Success] PnP ID (0x2A50) 01-31 16:25:09.504 D [BleDevice] didDiscoverDescriptorsFor: [Success] CodeLess Inbound Command (914F8FB9-E8CD-411D-B7D1-14594DE45425) 01-31 16:25:09.505 D [BleDevice] didDiscoverDescriptorsFor: [Success] CodeLess Outbound Command (3BB535AA-50B2-4FBE-AA09-6B06DC59A404) 01-31 16:25:09.527 D [BleDevice] didDiscoverDescriptorsFor: [Success] CodeLess Flow Control (E2048B39-D4F9-4A45-9F25-1856C10D5639) 01-31 16:25:09.528 V [BleDevice] Service Database: Device Information (0x180A) - Manufacturer Name String (0x2A29) [R] - Model Number String (0x2A24) [R] - Firmware Revision String (0x2A26) [R] - Software Revision String (0x2A28) [R] - System ID (0x2A23) [R] - PnP ID (0x2A50) [R] CodeLess (866D3B04-E674-40DC-9C05-B7F91BEC6E83) - CodeLess Inbound Command (914F8FB9-E8CD-411D-B7D1-14594DE45425) [RW] - CodeLess Outbound Command (3BB535AA-50B2-4FBE-AA09-6B06DC59A404) [RW] - CodeLess Flow Control (E2048B39-D4F9-4A45-9F25-1856C10D5639) [RWN] + Client Characteristic Configuration (0x2902) 01-31 16:25:09.530 I [BleDevice] Device ready 01-31 16:25:14.445 D [BleDevice] Read RSSI 01-31 16:25:14.452 D [BleDevice] didReadRSSI: [Success] rssi=-57 01-31 16:25:19.672 D [BleDevice] Read RSSI 01-31 16:25:19.679 D [BleDevice] didReadRSSI: [Success] rssi=-53 01-31 16:25:24.868 D [BleDevice] Read RSSI 01-31 16:25:24.872 D [BleDevice] didReadRSSI: [Success] rssi=-55 01-31 16:25:29.954 D [BleDevice] Read RSSI 01-31 16:25:29.956 D [BleDevice] didReadRSSI: [Success] rssi=-55 01-31 16:25:35.067 D [BleDevice] Read RSSI 01-31 16:25:35.070 D [BleDevice] didReadRSSI: [Success] rssi=-57 01-31 16:25:40.258 D [BleDevice] Read RSSI 01-31 16:25:40.261 D [BleDevice] didReadRSSI: [Success] rssi=-56 01-31 16:25:45.465 D [BleDevice] Read RSSI 01-31 16:25:45.472 D [BleDevice] didReadRSSI: [Success] rssi=-56 01-31 16:25:50.651 D [BleDevice] Read RSSI 01-31 16:25:50.654 D [BleDevice] didReadRSSI: [Success] rssi=-54 01-31 16:25:55.782 D [BleDevice] Read RSSI 01-31 16:25:55.786 D [BleDevice] didReadRSSI: [Success] rssi=-53 01-31 16:26:00.870 D [BleDevice] Read RSSI 01-31 16:26:00.877 D [BleDevice] didReadRSSI: [Success] rssi=-57 01-31 16:26:06.014 D [BleDevice] Read RSSI 01-31 16:26:06.017 D [BleDevice] didReadRSSI: [Success] rssi=-67 01-31 16:26:11.170 D [BleDevice] Read RSSI 01-31 16:26:11.176 D [BleDevice] didReadRSSI: [Success] rssi=-68 01-31 16:26:16.368 D [BleDevice] Read RSSI 01-31 16:26:16.371 D [BleDevice] didReadRSSI: [Success] rssi=-62 01-31 16:26:21.564 D [BleDevice] Read RSSI 01-31 16:26:21.571 D [BleDevice] didReadRSSI: [Success] rssi=-66 01-31 16:26:26.763 D [BleDevice] Read RSSI 01-31 16:26:26.770 D [BleDevice] didReadRSSI: [Success] rssi=-60 01-31 16:26:32.002 D [BleDevice] Read RSSI 01-31 16:26:32.009 D [BleDevice] didReadRSSI: [Success] rssi=-56 01-31 16:26:37.190 D [BleDevice] Read RSSI 01-31 16:26:37.193 D [BleDevice] didReadRSSI: [Success] rssi=-63 01-31 16:26:42.415 D [BleDevice] Read RSSI 01-31 16:26:42.418 D [BleDevice] didReadRSSI: [Success] rssi=-57 01-31 16:26:47.658 D [BleDevice] Read RSSI 01-31 16:26:47.665 D [BleDevice] didReadRSSI: [Success] rssi=-54 01-31 16:26:52.859 D [BleDevice] Read RSSI 01-31 16:26:52.862 D [BleDevice] didReadRSSI: [Success] rssi=-64 01-31 16:26:58.109 D [BleDevice] Read RSSI 01-31 16:26:58.112 D [BleDevice] didReadRSSI: [Success] rssi=-67 01-31 16:27:03.341 D [BleDevice] Read RSSI 01-31 16:27:03.343 D [BleDevice] didReadRSSI: [Success] rssi=-54 01-31 16:27:08.566 D [BleDevice] Read RSSI 01-31 16:27:08.569 D [BleDevice] didReadRSSI: [Success] rssi=-52 01-31 16:27:13.788 D [BleDevice] Read RSSI 01-31 16:27:13.794 D [BleDevice] didReadRSSI: [Success] rssi=-60 01-31 16:27:18.894 D [BleDevice] Read RSSI 01-31 16:27:18.896 D [BleDevice] didReadRSSI: [Success] rssi=-65
Hi Arun,
I have hit a similar problem. Did you resolve your issue please?
Thanks,
Raddy