This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Alter Bluetooth Transmission Power in a WL1271

Other Parts Discussed in Thread: WL1271

Hi,

Our current product includes a WL1271 chipset (TiWi-R2 module). We would like to reduce the effective Bluetooth range of our product. Our previous product supported a CSR Bluetooth chip that facilitated range control by altering register values within silicon. Specifically - we would alter a pre-amp power register, transmit power register and the power table register values (remove all table rows except the row stipulating the lowest power). Are there registers within the WL1271 that we can alter upon each startup (dynamic storage) or when each system is setup (static storage) to reduce effective Bluetooth range? We run Linux kernel 2.6.37 and are comfortable issuing HCI commands (including vendor specific commands) using "hcitool cmd". Our hope is that we can simply use HCI_VS_WRITE_HARDWARE_REGISTER along with appropriate register and data values to do what we need. Within another post (http://processors.wiki.ti.com/index.php/Bluetooth_FCC_Mode#WL1271_.2B_ARM_Platforms) we can see details on a vendor specific HCI command (Configure Transmitter Parameters) that is helpful for FCC testing, but this command sets many parameters at once including the "Power Level". We don't need to disable scanning and put the controller into a mode appropriate for testing, we only need to change transmission strength.

Perhaps approching this from another angle is easier. If changing a config file used by the Bluetooth controller will work - we are open to this approach.

Any help is appreciated.

Mark J

  • Mark,

    Changing the initialization script used by the device is definitively the way to go for you. Can you share the file so I can see what you're using?

     

    Regards,
    Gustavo

  • HI Gustavo,

    We have not altered the original script that was supplied with the AM18x EVM that we are using as a reference. I could not even tell you which file holds this script. If you advise which file, I can send you what we are using.

    Thanks,

    Mark J

  • Mark,

    Here is the information on changing the power vector:

    Mattais,

    You need to set power vectors for the individual modulation types (GFSK=0, EDR2=1, EDR3=2) and set the max power levels in a separate command. All in all, that's 4 commands which are also executed by the service patch. You can adapt them to your needs.

    To set the following:
    a) Max Output Power is 12dBm(GFSK) and 10dBm (EDRx)
    b) Min Output Power is -35dBm
    c) Dynamic Range is ~30dBm
    d) Step Size is 5dBm
    e) The number of levels is defined by duplicating the same value in consecutive power levels.
    f) Level 0 is used for BLE/ANT in new devices. For old devices, it should be left as is.
    g) If updating the Power Vectors after loading the service patch, the re-calibration sequence must be sent afterwards.

    For the power vectors, the  command "HCI_VS_DRPb_Set_Power_Vector (0xFF82)" is used.

    The format is: { 0x82, 0xfd, 0x14, modulation type, power level 0, power level 1, ..., power level 15, 0xff, 0x00, 0x00};

    The power levels are given as signed 8-bit integers in 1/2 dBm steps, e.g. to use 10 dB, the value 0x14 (20) has to be specified. Only even values (= integer dBm steps) are possible.
     
    h) The "HCI_VS_DRPb_Set_Class2_Single_Power" (0xFF87) command should be used to pick a power level from the power vectors set before. You should pick the level with greatest value smaller than 4dBm.

    The format is: { 0x87, 0xFD, 0x03, GFSK index, EDR2 index, EDR3 index}

     

    Regards,
    Gustavo

  • Hi Gustavo,

    Thanks for the info. We read it after you had posted it and then went looking for a simpler solution. Other priorities came up, but we are finally ready to tackle this issue.

    Our challenge is that we have limited experience dealing with the HCI interface through native "C/C++". Our preference would be to use hcitool to execute required commands.  I could not find any helpful online reference explaining how to call "HCI_VS_DRPb_Set_Power_Vector" or "HCI_VS_DRPb_Set_Class2_Single_Power" (other than some TI scripts established for FCC testing). To define our requirements more ...

    - We only support GFSK (long story).

    - If power vectors are already established for min, max and some intermediate power levels, we don't need to change them and would prefer to simply select a vector. This would simplify our task. Is there an hcitool call (specifying HCI command) that we can make to read GFSK power levels? Explicit hcitool syntax would be great.

    - An example hcitool call to select a GSFK index using "HCI_VS_DRPb_Set_Class2_Single_Power" would help.

    Thanks in advance and all apologies for the delay on continuing this thread.

  • Well, we have spent considerable time utilizing "hcitool cmd" to try and issue HCI_VS_DRPb_Set_Class2_Single_Power with little success. We feel that if we had a clearly defined OCF value and parameters, we would be able to select a power vector as suggested. The other missing element is an HCI command that would allow us to verify that we actually made a controller power change. We have tried OCF values of 0xFF82, 0xFD82, and 0x0082. Only 0x0082 seems to work, but we don't seem to actually change the power level and the "FD" value provide must be used somewhere. OCF values need to be clarified.

    TI (Gustavo or ??) ... how can we get our hands on the TI specific (OGF=0x3F) HCI commands? The HCI_VS_DRPb_Set_Class2_Single_Power  and HCI_VS_DRPb_Set_Power_Vector values are defined in a header that doesn't even seem to be available to the general public!

    Given that we are now comfortable with issuing hcitool commands, I am confident that if we had OCF and parameter values for selecting a power vector and similar info for determining which vector is selected, we would be able to control power as required. If we also had OCF and parameters for setting power vector values and reading currently set power vector values, we would have even more control. How do we get this info?

    Please help.

    Mark J

  • Hi Mark,

    Could you please tell me if you succeed to modify the transmit power in WL1271?

    Thanks. 

    Regards,

    Gutemberg

  • Hi Gutemberg,

    Please refer to: processors.wiki.ti.com/.../CC256x_VS_HCI_Commands to modify the power vectors. Please let me know if you have the Wireless tools software that is required to modify the service pack.

    Regards,
    Gigi Joseph.
  • Hi Joseph, thank you very much for the reply. I still don't have the tools required to modify the service pack. Could you please tell me where I can obtain it?

    Regards,

    Gutemberg

  • Hi Joseph,

    thank you very much for the tool to modify the Service Pack. We succeed to modify the power vectors and to correctly initialize the bluetooth in our equipment with the selected settings. However, the problem we are facing still persists: even if we choose 12dBm for max output power, the bluetooth range is very poor (~2-3m). Any clues?

    Regards,

    Gutemberg

  • Hi Gutemberg,

    I suspect this is an issue with the antenna. Can you check the connections?

    Regards,
    Gigi Joseph.
  • Hi Joseph,

    apparently there is no problem with the antenna as the wifi is performing very well.

    I'm suspecting that the parameter coexOperationMode is not correctly set.
    processors.wiki.ti.com/.../WL127x_Bluetooth-WLAN_Coexistence_AppNote

    I would like to verify and to modify the operation mode as describe in:
    processors.wiki.ti.com/.../OMAP35x_Wireless_Connectivity_WL1271_Command_Line_Interface_(CLI)_User's_Guide#Bt_Coexistence_Menu

    However, there is no wlan_cu command available in the board I'm working with (CM-T335). There is a wpa_cli command instead (I'm not sure if I can use it to modify the operation mode).

    Could you please explain me how to verify and modify the operation mode of the SoftGemini?

    Thank you in advance.

    Regards,
    Gutemberg
  • Hi Gutemberg,

    Sorry for the late reply. You wouldn't need to modify the coex parameter.
    Can you send me the commands that you added to the bts file? Are you also adding the "calibration" commands after the power vector commands? Also, can you verify if the actual power is 12dBm?

    Regards,
    Gigi Joseph.