The CC3200 is a pretty neat new WiFi chip from Texas Instruments: It contains two CPU's: one running the TCP/IP and WiFi stacks and the other one (an ARM Cortex-M4F) is available to the user to run his application. When I tried to figure out if development was supported on a Linux host, I got mixed messages. On the one hand, TI's CCS IDE is available for Linux, but on the other hand, the CS3200 SDK comes as a Windows executable.
Since I have Windows available, I used it to install the SDK, and as it turns out, it just installs a bunch of files. This could easily have been packed in a cross-platform ZIP file, TI! You may be able to run this installer under Wine, but I haven't tried it.
I found instructions under "Option 3: GCC" in the Getting Started Guide that show how to build a project using GCC under Cygwin on Windows, and load and run the program using OpenOCD. So I was curious if these steps would work under Linux. Short answer: yes they do!
You can skip the Cygwin instructions under 3.3.1 of course. You do need to get the cross compiler installed as mentioned under 3.3.2 (Linux version), and make sure it is available in your path. I did not have to compile OpenOCD from source as described under 3.3.3, but installed it from the repo instead.
Building the example project as described under 3.3.4 worked after I renamed the "SimpleLink.h" file in the cc3200-sdk/simplelink/include
directory to "simplelink.h" (typical Windows case sloppiness). Then it came time to try and get the program loaded using GDB and OpenOCD.
The debugger hardware on the CC3200 Launchpad is just an FTDI USB-to-serial chip, but with TI vendor and product IDs loaded. Linux already has the FTDI driver built-in, but a UDEV rule needs to be added to make it load this driver for the custom TI vendor and product ID:
sudo vi /etc/udev/rules.d/99-tiftdi.rules
Hit 'i' and put this in the file:
# For CC3200 Launchpad with FTDI Chip that TI put their codes in. ID = 0x0451, Product ID = 0xc32a
ATTRS{idProduct}=="c32a", ATTRS{idVendor}=="0451", RUN+="echo 0451 c32a > /sys/bus/usb-serial/drivers/ftdi_sio/new_id", MODE="666", GROUP="plugdev"
Hit Escape, ZZ and you're done. There are some other docs out there that have a rule to run modprobe
instead with custom vendor and product parameters, but it seems that the newest kernels don't support these options anymore. You're now supposed to write to the new_id
node instead.
To make this work, make sure your user is in the plugdev
group (substitite the correct username of course):
sudo usermod -a -G plugdev USERNAME
That's it! Now the next instructions in the guide under 3.3.5, about testing OpenOCD and running GDB, should work just fine. Happy coding!
6 Responses to "CC3200 development under Linux"
To answer your question: "You may be able to run this installer under Wine, but I haven't tried it."
Yes, it works. Don't have a Windows machine at home :-) so no other alternative.
Have you had any luck in getting the serial output of the FTDI Port B on Linux/minicom terminal?
Thanks!
I'm trying this now, and get the following error:
Open On-Chip Debugger 0.8.0 (2014-09-23-23:37)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html [openocd.sourceforge.net]
Error: The specified debug interface was not found (ft2232)
The following debug interfaces are available:
Runtime Error: cc3200.cfg:44:
in procedure 'script'
at file "embedded:startup.tcl", line 58
in procedure 'interface' called at file "cc3200.cfg", line 44
Any idea how to fix this?
Hi sp,
Looks like some stuff was deprecated/changed in openocd-0.8.0. I had the same problem. Switching back to openocd-0.7.0 worked for me. I did have to fiddle with the libftdi stuff, but I'm pretty sure that is a distro dependant thing. (I had to synlonk libftdi1 to libftdi for the configure script to find it).
Also, I had to make a change for TI_RTOS/FreeRTOS projects in the gdbinit.
From this:
------------------------
to this
------------------------
Finally, I found it easiest to copy gbinit and cc3200.cfg to the cwd when running arm-none-eabi-gdb.
Regards
...
Thanks for the useful additions everyone. :-)
I have not tried OpenOCD 0.8.0 myself, nor have I tried to use FTDI port B.
I've updated to the latest openocd release (0.9.0) and it now includes a board definition file for the simpleLink launchpad. You'll need to adjust the gdbinit to use it instead of the cc3200.cfg provided by the SDK.
Still need the "monitor soft_reset_halt" noted above, though openocd notes it is deprecated, the suggested replacement ("reset halt") doesn't work.
Using the FTDI port B just requires the ftdi-sio module to be loaded with the TI vendor/device ie:
sudo modprobe ftdi-sio product=0xc32a vendor=0x0451
or setup udev.
It looks like openocd communicates directly via
/dev/bus/usb/<bus>/<dev> and doesn't use a tty dev node.