A record of my learning experience. Discusses general, high-level considerations. Gathers many links that I followed.
For advanced, C programmers who are new to TI’s tool chain for programming embedded devices.
CC26xx Family SW Quickstart Guide also covers this material.
This blog shows a similar process for an older EVM (SensorTag), but using Windows OS and CCS Desktop.
The Narrow Subject
Here I assume the CC2650 target (an mcu and radio system on a chip) but only discuss:
- Bluetooth (the chip allows other protocol choices i.e. WiFi or Zigbee)
- TI-RTOS (other RTOS choices might be various free OS’s)
This might apply to other TI chips such as CC13xx, CC2640, and other earlier chips.
The Broader Subject
Wireless networks, not necessarily IoT development. My use case is not serious IoT: I don’t want to connect to the Internet and I don’t even want to talk to standard Bluetooth devices, just between two of my own. I don’t even want Bluetooth protocol, it just happens to be what I studied first.
I could be wrong. You should follow links to original sources.
Other target, IoT, and wireless network ecosystem choices
ARM mBed ecosystem also offers an online IDE, desktop development tools, an RTOS, and bluetooth stack.
The CC26xx target uses the ARM ISA. You might be able to use the ARM ecosystem, but I think the bluetooth stack in the ARM ecosystem might not work on the CC26xx? The CC26xx has two processors, a host (ARM M3) and a network (ARM M0) processor. A Bluetooth stack should have an interface at the HAL layer between the upper layers of the BT stack and a network processor’s implementation of the lower layers. I don’t know whether either the ARM bluetooth stack upper layers, or the TI network processor lower layers (in firmware on the M0), conform to any HAL interface standard.
(Note that TI also has much documentation on implementing “network processors”. There, they are treating the CC26xx as a server for yet another processor, the application processor, say a powerful cpu of a desktop PC.)
ARM does not make chips (only the design IP for them). You might consider whether using TI tools locks you into their chips, and whether using the ARM ecosystem would give you a choice of chips.
TI’s IDE Choices
CCS Cloud – “online IDE” or “online compiler”: browser and cloud based: few files stored or installed on your development system (host)
CCS Desktop – installed on your host computer, based on Eclipse IDE
Energia – (Arduino clone) does not support the CC26xx family target.
Dev System OS Choices
For CCS Cloud, shouldn’t matter, but it does: to burn to the EVM requires setting up communication via USB to the EVM, which is host OS dependent (drivers and permissions.) CCS Cloud requires installation of TI Cloud Agent on your desktop. All three major OS’s are supported.
For CCS Desktop, all three major OS’s are supported, but Windows seems to be favored. E.g. installing the Bluetooth stack is biased: requires Wine on Linux.
TI’s instructions for Building BLE Projects on Linux. It acknowledges that TI does not officially support their BT stack on a Linux dev system (but they do support their IDE and RTOS.)
To develop, you need three components:
- IDE (CCS Desktop or Cloud)
- Bluetooth stack (or another wireless stack, i.e. library)
Using CCS Cloud, all three components come easy, automatically.
Using CCS Desktop, you must know the steps.
Installing CCS Cloud
Installation is minimal. Search for “CCS Cloud Tools”. Click on “CCS Cloud>Click to Start Developing”. It will open in your browser. When you first try to “Run” your target app, it will give you further instructions for installing:
- a browser plugin
You must install TICloudAgent, and on Linux it depends on installing certain 32-bit libraries. It’s web page seems out of date, it doesn’t show support for Ubuntu 16.4 or for this EVM (Launchpad.)
CCS Cloud is intended for starting programmers or small trials, i.e. for education and evangelism. I don’t think the user base is large, yet.
I want to use it ( I have used Energia for small projects.) But so far, I have had a fitful experience. In other words, it seems somewhat fragile: requires refresh or restarting things. Maybe slow. But at least you can quickly experiment and learn the scope of your project (what might work, what else you need to learn.)
For example, at first ‘Run’ (burning to target) didn’t work for me, and after rebooting my dev system the next morning and plugging in the EVM after CCS Cloud was started, it did work.
For example, at first a project built successfully. Then subsequent builds failed even though I had not changed a line of code. The fix may be to delete a project and redownload it (using TI Resource Explorer.) Maybe it is a consequence of changing between my two host computers.
Sometimes it fails to login (“too many logins”). I guess there are limits on their servers?
The browser connection times out at inconvenient times (say every 30 minutes.)
Run (download to target)
“Failed to connect to target” : you don’t have the target plugged into a USB port on your desktop.
“Firmware update required” : the debugging interface half of the EVM board requires flashing. This seems to be a warning, as download to the target seemed to proceed.
Installing CCS Desktop
A training video.
CCS Desktop is based on Eclipse IDE. It is not a plugin that you can download from within Eclipse, but is downloaded and installed(?) separately (thats weird.) If you are an Eclipse user, the overall look-and-feel is familiar, but specifics might not be.
The installer is 32-bit, but TI says to use 64-bit Linux (that’s weird.) You MUST follow the instructions for installing 32-bit library dependencies. (a 64-bit host will run 32-bit apps if the needed 32-bit libraries are also installed.)
The installer won’t run by double clicking it (because “>file *.run” shows it is 32-bit ELF?) but will run from the command line. The installer is a .run instead of a .bin (thats weird?) but see this explanation of what a .run file is (essentially, an installation tool outside the approved Debian process.)
If you the installer starts but shows an error dialog “Failed to locate …libgcrypt…” you didn’t follow the instructions for installing that component. You follow the link and click on “32-bit” (which points to ftp for a .deb file) and expect to continue to install libgcrypt using “Ubuntu Software” installer app.
When the CCS Desktop installer runs, expect a wizard to run, that downloads and installs.
CCS Desktop: Installing TI-RTOS
You install TI-RTOS (development libraries) from within CCS. Navigate to the TI App Center and choose “TI-RTOS for CC13xx and CC26xx”.
CCS Desktop: Installing Bluetooth Stack
TI’s instructions for Building BLE Projects on Linux gives specifics for installing the BT stack on Linux using Wine (Windows emulator.) Those instructions seem to be out-of-date. I needed these changed instructions:
sudo apt-get install wine
sudo apt-get install winbind
(Download the Windows .exe installer.)
wine ble_cc26xx_setupwin32_2_01_00_44423.exe (expect installer dialog)
cp -r ../.wine/drive_c/ti/simplelink/ .
My changes to the instructions:
- Once you install the BLE SDK, I suppose it creates files in the proper place, and then you can uninstall Wine from your Linux computer?
- When I tried “>wine ble….exe” it yielded errors about “ntlm” and needing package “winbind.” And failed to create ~/<me>/.wine/drive_c/ti (where it should be installing files.) So I also installed package winbind.
- The installer did not seem to create .wine/
drive_c/Program Files(x86\)/Texas Instruments/Boundary/ so I omitted the step of copying it.
(I haven’t successfully built a project yet.)
CCS Desktop: Importing Example Projects
I tried the TI Resource Explorer and did not have much luck finding
TI’s instructions for Building BLE Projects on Linux also gives instructions for importing example projects.
CCS Desktop: Tweaking Example Projects
The instructions there for changing the linked resources (paths, capitalization of fileNames, and fileName wording) are slightly dated but generally accurate: you will need to use the principle and tweak the exact changes yourself. For example, the filename “RF.c” seems to have changed in the latest release of BLE SDK.
If you get:
error: can't create session manager: can't find a JVM;
the environment variable 'XDCTOOLS_JAVA_HOME' is set,
but does not appear to be a directory containing a 64-bit
Java Runtime Environment
Then see this post on TI Forum .
What are Images?
For the CC26xx, burning the target comprises two steps:
- the app
- the bluetooth stack
These are two different projects in the IDE.
TI calls them “images”. I suppose that means they are loaded in different addresses of target ROM, and that the app on the target knows where to find the BT stack. You only need to burn the BT stack once (unless it changes upstream, a new version.)
What are the symptoms of failing to burn both? The app and not the BT stack: does the app complain somehow? The BT stack and not the app: nothing whatsoever happens, there is no app to boot?
Test Projects, CCS Cloud
How to use TI’s example projects to test your dev system. These were written while I was using CCS Cloud; they might not apply to CCS Desktop.
Project Zero for CC2650
A demo app to burn onto your SimpleLink LaunchPad. Essentially it sets up the Launchpad as a BT peripheral that a central device (a phone, etc.) can poll (see advertisements), connect to, and change attributes (to blink LED’s.) This describes the demonstration, what a user sees.
As near as I can tell, this is NOT the app that is burned into a LaunchPadXL-CC2650 out of the box. At that time, pushing the upper right button on the LaunchPad causes it to BT advertise, and for the green LED to blink.
This can be a test case for your development system. If you successfully build and burn it, it should behave as described, talking to a BT scanner on another device. Unfortunately, to see the results you need to use some of the free BT scanner apps, you need another BTLE enabled device, Android 4.3 or greater, or a recent iPhone or iPad that supports BT Low Energy.
This project prints “debug messages” once per second for a few seconds. It doesn’t use the radio. It is intended to teach how to code semaphores etc.
CCS Cloud: When you click the Debug icon, expect a dialog to open (the dialog that shows progress). It should say, in order, paraphrased:
The red/green led on the top half of the EVM should blink as the program is burned.
CCS Cloud: Then the dialog goes away and the debug panels of the IDE show new information, and a marker appears across from “main()” in the panel that shows the code. The debugger is waiting for you to start the app.
Press the “Resume” icon in the debugger panel (looks like the standard “Play/Pause” icon on VCR’s). Expect the program to run and print some messages into the Debug tab of the panel across the bottom of the IDE. The final message should be “bigTime ended.”
This example project is configured for another EVM. When you try to “Run” it on the LaunchpadXL-CC2650 EVM, you get the error “….Failed to connect….”.
To fix it, click right mouse button on the project in the Project Explorer Pane of CCS Cloud. Expect a menu to pop up. Choose “Project Properties”. Expect a dialog to appear. In the “General” section, in the “Connection” textbox, click. Expect a pulldown menu to appear. Choose “XDS110” (the type of interface on the upper half of this EVM.) Choose OK and build again.
Repeat for the other half of the project, the …App… versus the ….Stack….
It seems like a few “Run” errors in red while burning, such as “Failed Device Reset”, are ~normal~ and that CCS Cloud retries and eventually succeeds.
Sometimes Ubuntu displays “You have just opened a digital audo device” dialog meaning it has seen the Launchpad on the USB port somehow. Choose “Do nothing” and “Do this always.” Maybe it interferes with CCS Cloud if you don’t?