rfEasyLink_tx Example

Example Summary

Example includes the EasyLink API and uses it to configure the RF driver to transmit packets. This project should be run in conjunction with the rfEasyLinkRx project.

For more information on the EasyLink API and usage refer to https://processors.wiki.ti.com/index.php/SimpleLink-EasyLink

Peripherals Exercised

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>.

Example Usage

Run the example. Board_PIN_LED1 will toggle every 100 ms indicating a packet has been transmitted. This will happen 10 times. The 11th transmission will then be aborted, toggling Board_PIN_LED2. This cycle will continue.

Before running this application you should first start the rfEasyLinkRx on a second board to see that the transmitted packets are received.

Application Design Details

This example shows how to use the EasyLink API to access the RF driver, set the frequency and transmit packets. The RFEASYLINKTX_ASYNC define is used to select between the Blocking or Async TX API.

The rfEasyLinkTx example will transmit a packet every 10 ms for 10 packets, if RFEASYLINKTX_ASYNC is defined (as it is by default) then the 11th TX will be scheduled, but will be aborted. This is to show an example of aborting a TX. LED2 will toggle when a TX abort happens. Board_PIN_LED1 and Board_PIN_LED2 indicates an error (not expected to happen). The TX/abort cycle will repeat indefinitely.

A single task, “rfEasyLinkTxFnx”, configures the RF driver through the EasyLink API and transmits messages.

Overview

The EasyLink API should be used in application code. The EasyLink API is intended to abstract the RF Driver in order to give a simple API for customers to use as is or extend to suit their application[Use Cases] (@ref USE_CASES).

General Behavior

Before using the EasyLink API:

The following is true for receive operation:

The following apply for transmit operation:

Error Handling

The EasyLink API will return EasyLink_Status containing success or error code. The EasyLink_Status codes are:

Power Management

The power management framework will try to put the device into the most power efficient mode whenever possible. Please see the technical reference manual for further details on each power mode.

The EasyLink Layer uses the power management offered by the RF driver Refer to the RF Driver documentation for more details.

No-RTOS Implementation

The No-RTOS implementation uses usleep() to implement the timeout feature for the asynchronous case.

Supported Functions

| Generic API function          | Description                                        |
|-------------------------------|----------------------------------------------------|
| EasyLink_init()               | Init's and opens the RF driver and configures the  |
|                               | specified modulation                               |
| EasyLink_transmit()           | Blocking Transmit                                  |
| EasyLink_transmitAsync()      | Non-blocking Transmit                              |
| EasyLink_transmitCCAAsync()   | Non-blocking Transmit with Clear Channel Assessment|                                                                                     
| EasyLink_receive()            | Blocking Receive                                   |
| EasyLink_receiveAsync()       | Non-blocking Receive                               |
| EasyLink_abort()              | Aborts a non-blocking call                         |
| EasyLink_EnableRxAddrFilter() | Enables/Disables RX filtering on the Addr          |
| EasyLink_GetIeeeAddr()        | Gets the IEEE Address                              |
| EasyLink_SetFreq()            | Sets the frequency                                 |
| EasyLink_GetFreq()            | Gets the frequency                                 |
| EasyLink_SetRfPwr()           | Sets the TX Power                                  |
| EasyLink_GetRfPwr()           | Gets the TX Power                                  |

Frame Structure

The EasyLink implements a basic header for transmitting and receiving data. This header supports addressing for a star or point-to-point network with acknowledgements.

Packet structure:

 _________________________________________________________
|           |                   |                         |
| 1B Length | 1-64b Dst Address |         Payload         |
|___________|___________________|_________________________|

Note for IAR users: When using the CC1310DK, the TI XDS110v3 USB Emulator must be selected. For the CC1310_LAUNCHXL, select TI XDS110 Emulator. In both cases, select the cJTAG interface.