rfWsnConcentratorDmOad Example

Example Summary

The WSN Dual Mode Concentrator example illustrates how to implement a sub-1GHz Wireless Sensor Network Concentrator device which listens for packets from other nodes. This example is meant to be used together with the WSN Dual Mode Node example to form a one-to-many network where the nodes send messages to the concentrator. Both the Nodes and Concentrator can be configured to also send BLE beacons.

The Dual Mode Concentrator receives sensor data from the Dual Mode Nodes and displays the sensor reading on UART and LCD. The concentrator can also be configured by a button press to also send out BLE advertisements (beacons) packets, the beacon then contain sensor data from one of the nodes. The concentrator effectivly acts as a relay for the sub-1GHz sensor data to the BLE beacon packet.

This examples showcases the use of several Tasks, Semaphores and Events to receive packets, send acknowledgements and display the received data on the LCD. For the radio layer, this example uses the EasyLink API which provides an easy-to-use API for the most frequently used radio operations.

Peripherals Exercised

Whenever an updated value is received from a node, it is updated on the LCD display.

Resources & Jumper Settings

If you’re using an IDE (such as CCS or IAR), please refer to Board.html in your project directory for resources used and board-specific jumper settings. Otherwise, you can find Board.html in the directory <SDK_INSTALL_DIR>/source/ti/boards/<BOARD>.

Fields left blank have no specific settings for this example.

Example Usage

*Use the buttons to select a node and beacon type and use any smarthone application that decodes the Eddystone beacons to view the beacon data. To view MS beacon, use the TI SensorTag smartphone app.

The example also support Over The Air Update (OAD), where new FW can be loaded over OAD. The must be an OAD Server, which is included in the concentrator, and an OAD client which is included in the sensor.

Generating the required binary images

For generating the images the following tools are required:

The prebuilt BIM binary is generated from the BLE SDK projects:

The python intelhex merge utility is used to combine the BIM and App into one hex file that can be downloaded with SmartRF Studio:

cd <SDK_DIR>/examples/rtos/CC1310_LAUNCHXL/easylink/hexfiles/oad
python /usr/bin/hexmerge.py -o rfWsnNodeOad_CC1310LP_all.hex "--overlap=error" rfWsnNodeOad_CC1310LP_app.hex bim_extflash_cc1350lp_bim.hex

An OAD image can then be created from the application image with the oad_image_tool.py:

python ../../../../../../tools/easylink/oad_image_tool.py -v 0x[major version:minor version] -i app rfWsnNodeOad_CC1310LP_app.hex -ob rfWsnNodeOad_CC1310LP_app.bin -m 0x1000

Where major version (XX) and minor version (YY) must be of the format 0xXXYY, for example 2.3 would be 0x0203.

Using the OAD example

To be safe when using for the first time the external flash of the Concentrator and the Node should be wiped. Program both LP boards with bin/CC1350LaunchPad_ExtFlashErase.hex. The program will flash the LED’s while erasing and once finished the LED’s will stop flashing. Allow the application to run until the external flash has been erased and the LED’s stop flashing.

The wipe flash FW can be found in below lacation and should be downloaded with Uniflash programmer: <SDK_DIR>/hexfiles/native_oad/CC1350LaunchPad_ExtFlashErase.hex

The Concetrator OAD Server and Node OAD Client FW must then be loaded in to the LP’s using the Uniflash programmer:

The Concetrator will display the below on the UART terminal:

Nodes   Value   SW    RSSI
 0x0b    0887    0    -080
 0xdb    1036    0    -079
 0x91    0940    0    -079
*Action: Update available FW
Info: Available FW unknown
cmd:

The node OAD image can be loaded into the external flash of the Concentrator over the UART with the oad_wrtie_bin.py script. The action must first be selected using BTN-2. Press BTN-2 until the Action is set to Update available FW, then Press BTN-1 and Press BTN-2 to execute the action.

When “Available FW” is selected and BTN-2 is pressed the terminal will display:

    Waiting for Node FW update...

The UART terminal must first be closed to free the com port. Then the python script run:

    python ../../../../../../tools/easylink/oad/oad_wrtie_bin.py /dev/ttyS28 rfWsnNodeOad_CC1310LP_app.bin

After the download the UART terminal can be re-opened and the “Available FW” will be updated to reflect the new FW.

The current FW version running on the node can be requested using the Send FW Ver Req action. This is done by pressing BTN-1 until Action is selected. Then press BTN-2 until the Action is set to Update available FW, The Press BTN-1 until intended device is selected. Press BTN-2 to execture the action.

The next time the node sends data it will respond and the FW version will be displayed:

Nodes   Value   SW    RSSI
 0x0b    0887    0    -080
 0xdb    1036    0    -079
*0x91    0940    0    -079
 Action: Update available FW
Info: Node 0x91 FW v1.0

The FW running on the nodes can now be updated to the available fw on the concentrator. The Action must first be selected using BTN-1. The Press BTN-2 until the Action is set to Update node FW, and Press BTN-1 until the intended device is selected. Press BTN-2 to execture the action.

The next time the node sends data it will respond and the FW update request and start requesting OAD blocks, which will be displayed:

Nodes   Value   SW    RSSI
 0x0b    0887    0    -080
 0xdb    1036    0    -079
*0x91    0940    0    -079
 Action: Update available FW
Info: OAD Block 14 of 1089

Once the OAD has completed the node will reset (if not yo may need to do a manual reset).

Building an OAD hex

The following steps talk through how to use CCS or IAR to create an OAD hex file which can be used to create the OAD biniaries as described in previous sections

Building the hex file in CCS

  1. Import the CCS porject into CCS(for more information conslt the Examples Users Guide in the proprietary-rf documentation)
  2. Exclude the ccfg.c file from the project.
  3. Enable hex file conversion in Project->Properties Arm Hex Utility
  4. Set memory width to 8 in General options
  5. Set output format to intel hex.
  6. Make a code change, for testing this can just be updating the nodeFwVersion string in NodeTask.c
  7. build
  8. copy hex from the projects Debug dir to the bin folder

Building the hex file in IAR

  1. Create a new IAR workspace
  2. Creae a new Empty IAR projectect and save it as rfWsnNodeOad
  3. Select Project -> “Add Project Connection” and add C:\ti\simplelink_cc13x0_sdk_1_xx_xx_xx\examples\rtos\CC1350_LAUNCHXL\easylink\rfWsnDmNodeOad\tirtos\iar\rfWsnDmNodeOad.ipcf
  4. Remove the ccfg.c file from the project.
  5. Enable hex file conversion in Project->Option Arm Hex Output Converter
  6. Check “Generate additional output”
  7. Set output format to Intel Extended hex.
  8. Make a code change, for testing this can just be updating the nodeFwVersion string in NodeTask.c
  9. build
  10. copy hex from the projects Debug dir to the bin folder

Building the hex file in CCS with GCC Compiler

  1. Import the GCC porject into CCS (for more information conslt the Examples Users Guide in the proprietary-rf documentation)
  2. Exclude the ccfg.c file from the project.
  3. Enable hex file conversion in Project->GNU Objcopy Utility
  4. In Edit flags add the following: -O ihex --remove-section .vtable --remove-section .dmaSpi0RxControlTableEntry --remove-section .dmaSpi0TxControlTableEntry --remove-section .dmaSpi1RxControlTableEntry --remove-section .dmaSpi1TxControlTableEntry --gap-fill 0xff
  5. Make a code change, for testing this can just be updating the nodeFwVersion string in NodeTask.c
  6. Build
  7. copy hex from the projects Debug dir to the bin folder

Application Design Details

For SensorTags there is a pin conflict, so either the DEVPACK-DEBUG or the DEVPACK-WATCH must be used and BOARD_DISPLAY_EXCLUDE_UART must be added to the global precompiler defines in order to use LCD.

For IAR users using any SensorTag(STK) Board, the XDS110 debugger must be selected with the 4-wire JTAG connection within your projects’ debugger configuration.

References