cancel
Showing results for 
Search instead for 
Did you mean: 

I use STM32 Nucleo (MB1355C and USB dongle) to build up Zigbee application. I am trying ZbNwkIfSetTxPower() to extend wireless coverage but see no effect.

JayRullia
Associate II

Hi. 

I am Jay working with STM32 ST board (MB1355C and USB dongle) to build Zigbee application. 

To become familiar with STM32Cube Firmware, I picked and ran one example of STM32Cube_FW located at

STM32Cube_FW_WB_V1.13.0\Projects\P-NUCLEO-WB55.Nucleo\Applications\Zigbee\Zigbee_SE_Msg_Server_Router

STM32Cube_FW_WB_V1.13.0\Projects\P-NUCLEO-WB55.Nucleo\Applications\Zigbee\Zigbee_SE_Msg_Client_Coord

I used Nucleo board and USB dongle for Coordinator/Router each.

When I do coverage testing (i.e possible distance), I found that Router (USB dongle) succeeds in joining Coordinator within 8~10m distance.

While trying to increase Tx power with using "ZbNwkIfSetTxPower()",

 I found that "APP_ZIGBEE_NwkForm()" sets Tx Power to 0dB (default value).

Due to its setting Tx Power value to 0dB, I should put a Router (USB dongle) within 8~10m away from Coordinator.

I dig out more into "ZbStartup()", I cannot find how to set Tx Power in that function.

Actually I want it to form a Zigbee network successfully between Coordinator/Router even much away distance like 40m, or 50m..

Any comments will be really appreciated..

Thanks in advance..

4 REPLIES 4
Remy ISSALYS
ST Employee

Hello,

This is a known limitation of the zigbee standard that state, (for some lost reasons) that the link quality has to be “very good�? to succeed on the Zigbee commissioning. But the standard, on STM32WB, can be bypassed, to remove the condition “link quality�? altogether. Saying it differently: without modifying the TX_POWER level, adding the 3 lines bellow, only at ZR side) will remove the “link quality > 3�? condition and the commissioning distance will then be of 50 meters (with free line of sight between ZC and ZR). To bypass the link quality, this code example is provided (file : Zigbee\Zigbee_OnOff_Client_Router\STM32_WPAN\App\app_zigbee.c)

….

   /* Attempt to join a zigbee network */

   ZbStartupConfigGetProDefaults(&config);

 

//   printf("Solution, related to ZbNwkIfSetTxPower, no huge differences between join and application with val8 equal 1\r\n");

   uint8_t val8;

   val8 = 1;

   status = ZbBdbSet(zigbee_app_info.zb, ZB_BDB_JoinIgnoreLqi, &val8, sizeof(val8));

//   printf("val8 equal 1, and M0_AND_M4_0db : value of 50 meter for Join plus or minus 10m, then 70 meters for On OR Off\r\n");

//   printf("val8 equal 1, and M0_AND_M4_minus20db : value of 6 meter for Join plus or minus 2m, then 8 meters for On of Off\r\n");

   

    /* Set the centralized network */

   APP_DBG("Network config : APP_STARTUP_CENTRALIZED_ROUTER ");

   config.startupControl = zigbee_app_info.startupControl;

 

   /* Using the default HA preconfigured Link Key */

   memcpy(config.security.preconfiguredLinkKey, sec_key_ha, ZB_SEC_KEYSIZE);

 

   config.channelList.count = 1;

   config.channelList.list[0].page = 0;

   config.channelList.list[0].channelMask = 1 << CHANNEL; /*Channel in use */

….

For legal reasons, the ST legal department is asking me to add this sentence:

In relation to the bypass solution written above, since not in line with the Zigbee standard, ST decline any responsibility in case using it. 

NOTE: Zigbee specification paragraph for the link quality

In Zigbee specification document zigbee-specification_2017.pdf the question of LQI-“link cost�? above/bellow a certain threshold is listed. Copy paste of the main sentence here:

3.6.1.4.1 Joining a Network Through Association

For a device that is not already joined to a network, the NLME-JOIN.request primitive shall cause the NWK layer to search its neighbor table for a suitable parent device, i.e. a device for which following conditions are true:

• The link quality for frames received from this device is such that a link cost of at most 3 ((See NOTE2: link cost 3 code details)) is produced when calculated as described in section 3.6.3.1.

After this good news, I am sorry to say that we discovered a second issue related to TX_power. TX_power can be switch to 6db on a nucleo board but it doesn’t have, exactly the expected behavior.

We are working on this second issue and we hope that this second TX_power issue is not needed in your case.

This second issue related to TX_power will be solved with the M0 bin of FW 1.14.

Best Regards

JayRullia
Associate II

Dear Remy.

0693W00000LyP6hQAF.png 

According to schematic, my board is as above that follows ST reference schematic.

VFBSMPS is fed by 3.3V. And VDD is as well.

To increase Tx power, I think I need to do 'Max PA level' in the red circle below.

0693W00000LyP7fQAF.png 

To do that, I try to find the proper API as below.

LL_PWR_SMPS_SetStartupCurrent()

LL_PWR_SMPS_SetOutputVoltageLevel()

ZbNwkIfSetTxPower()

Can you tell me what to do to increase Tx power which help coverage much more like 40~50m?

If you can tell me how to make a coverage much more like 80~100m, I really appreciate your help.

Thanks in advance.

Dear Remy.

Many thanks for your answer. (^^)

I applied your suggestion of bypass the link quality and tried again...

Before applying, I see only 8~10m coverage but after applying your suggestion, I got better result around 20~22m.

I use Nucleo board, P-NUCLEO-WB55-NUCLEO (WB55STM32WB55RG) and USB dongle (STM32WB55CG).

And then I tried your suggestion onto my own designed board (STM32WB55CG) and got same result (around 20~22m coverage)

Remy..

Actually my application requires 80~100m radius coverage. So I need to find out how to get the target of 80~100m..

To get the target coverage, I hope you give me some advices to following questions.

  1. Do you have any other idea to make longer coverage? How about adding PA onto my board? Adding PA could show longer coverage?
  2. Do you have other IC than STM32WB55CG whcih shows longer coverage? As I said above, I need 80~100m coverage. If you have other IC suggestion, please let me know. If so, I can change the IC following your advice.

Thanks very much..

Remy ISSALYS
ST Employee

Hello,

It is quite surprising that all your trials are limited to 22 meters (both your trials with Nucleo + USB dongle AND your designed board) while. We had some figures (in “typical case conditions�? + no noise + waiting 2 minutes for commissioning to succeed) around 50 meters. Not sure that this answer will help.

Do you have some noisy environment (other Zigbee/Thread/BLE/Wifi… or can you turn them off?)?

Do you have “free line of sights�? between devices? Can you switch to 3.6V and set the tx_power to 6dB? Can you switch devices roles? ( Revert the ZC and the ZR).

Can you confirm that you are doing all your experiments inside your building (or Can you move outside?)

And, in case none of those questions are helping, have you gone through those RF guidelines?

https://www.st.com/content/st_com/en/support/learning/stm32-education/stm32-moocs/STM32WB_RF_guidelines.html

You can look AN5395 based on the SKY66118-11 PA from Skyworks Solutions (max output power = 20 dBm).

https://www.st.com/resource/en/application_note/an5395-stm32wb-series-mcus-with-an-external-power-amplifier-stmicroelectronics.pdf

Best Regards,

Remy