Utilizing the DSP on the BeagleBoard

There are multiple options of how to make use of the onboard TI TMS320C64x+ DSP. The first step is to install the GPP/DSP interface. Two of the more popular interface options are DSPBridge and DSPLink. Both were developed by TI but DSPLink is still supported, which makes DSPLink a more preferable option. After selecting DSPLink as the GPP/DSP interface, you need to build DSPLink for your specific platform. There are two options of doing this as well. Both of these options will install DSPLink and also configure your host system so you can compile your own GPP and DSP applications.

  • Building DSPLink inside OpenEmbedded
    This is generally the preferred method. DSPLink can be built using the Codec Engine bitbake recipe. This will install a full version of DSPLink 1.60 in the tmp/staging directory. It will also creates packages to quickly install prebuilt DSPLink sample applications. Further configuration allows you to compile GPP and DSP code.

  • Building DSPLink outside OpenEmbedded
    This method installs DSPLink from source which can be downloaded from TI. Version 1.61.03 is used in the guide. Use this option if you need a newer version of DSPLink than 1.60. Following the steps creates modules to install on the BeagleBoard along with setting up your host system to compile GPP and DSP code.

Although the instructions written at this website were designed around a BeagleBoard which has an OMAP3530 + TMS320C64x+ DSP, the instructions should be compatible across a variety of platforms with only a minimal number of changes.

Simple Build System for DSPLink

The full DSPLink has a convoluted nested makefile system. To simplify things, I have created a one-level make system that can be built outside OE but still use OE's tools. [Download]

This was created by using the helloDSP application written for a L137 DSP. A comparison between that makefile and the makefiles in OE's led to a merger between the two. Currently, the application builds fine and there are no noticeable errors but there may be issues since the makefile was written around a different GPP/DSP.

Adapting the makefile for other applications should be straightforward. One thing of note is the compiler symbol definitions which are specific to your application. For example, message uses -DVERIFY_DATA and -DMESSAGE_PROFILE. These may not apply to a different application.

Sample Aplication using DSPLIB

DSPLIB contains numerous functions that a communications engineer would require. It provides functions in the following fields:

  • Adaptive Filtering
  • Correlation
  • Filtering and Convolution
  • FFT
  • Math
  • Matrix

We created a sample application that uses the DSPLIB function FFT. [Download] This application is based off of TI's sample application "loop". This application performs a 32 point FFT using the function DSP_fft16x16. It is suggested to only do one iteration. It requires a buffer size of 128 since each index is 8 bits and one input to the FFT is 32 bits. The results of the FFT are printed to the terminal and can be verified using octave. When verifying, it is important to note that the FFT function truncates the lower two bits so your results may be off by a maximum decimal value of 3. The GPP source code can be modified to send different inputs to the FFT. Additionally, the DSP source code can be modified to perform a FFT on more samples.

It is required that you install DSPLIB to your local machine. In the example it expects it to be installed in $HOME/TI. DSPLIB can be downloaded from TI at http://focus.ti.com/docs/toolsw/folders/print/sprc265.html#Order%20Options

You will need to change the user field in tskLoop.c on the DSP side. There are three DSPLIB header includes which all are linked by their absolute path. Replace /home/ossie to the location of your home directory.

Please note that this application will not build in the default OE DSPLink. You will need to reconfigure DSPLink to enable CHNL which is used by loop. Once reconfigured, you will have to rebuild and replace the DSPLink modules on the beagle.

Partitioning & Formatting an SD Card

Here's a detailed set of instructions for partitioning and formatting an SD card to boot Linux: http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat

Autoboot from SD

To get the BeagleBoard to autoboot from the SD card, the following commands are needed:

OMAP3 beagleboard.org # setenv bootargs 'console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait'
OMAP3 beagleboard.org # set bootcmd 'mmcinit;fatload mmc 0 80300000 uImage;bootm 80300000' ; saveenv
OMAP3 beagleboard.org # printenv

Upon printing the environment, the output should show the updated settings.

OMAP3 beagleboard.org # printenv                                               
bootargs=console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait
bootcmd=mmcinit;fatload mmc 0 80300000 uImage;bootm 80300000

Environment size: 181/131068 bytes

Reset the board and it should now autoboot from the SD card.

Transfer Files over Serial using ZMODEM

If using minicom and a serial connection to control the BeagleBoard, there is a transfer protocol that can transfer files between your host machine and the BeagleBoard. This can be a timesaver for transferring small files. This may not be very useful for files over 1MB as serial communication limits transfer speed to about 10-12 KB/s. To install zmodem on the BeagleBoard, you will need to bitbake and install the zmodem recipe.

$ source ~/oe/beagleboard/beagleboard/profile.sh
$ cd $OE_HOME
$ bitbake lrzsz

This will create three new ipk files in ~/oe/tmp/deploy/glibc/ipk/armv7a. Copy only the main file (lrzsz_0.12.20-r4.1_armv7a.ipk) into your home directory. Replace the SD card, reboot, and minicom into the BeagleBoard. Install the ipk file and start the zmodem client to wait for a file.

$ minicom -w
root@beagleboard:~# opkg install lrzsz_0.12.20-r4.1_armv7a.ipk
root@beagleboard:~# rz
waiting to receive.**B0100000023be50

In the minicom terminal, press CTRL-A, then Z. This will bring up a bunch of minicom options. Enter S to "Send files" and select zmodem out of the options. Browse to the folder of the file you want to transfer. You can enter directories and select files using the spacebar. You can also select and send multiple files but only if they are in the same directory. Once finished selecting the files, select [Okay]. It will then show you a dialog of the file transfer with the respective transfer speed.

General Notes

Folder name of package cannot contain underscores Package name before revision cannot contain capital letters

Use opkg instead of ipkg to install on BeagleBoard

You have to change permissions of /home/root to 777 so the other computer can insert the new pkg. This has to be done locally on the BeagleBoard (by minicom)

To install Perl on BeagleBoard, bitbake the pre-existing Perl recipe and copy over two ipk files to the rfs: perl_5.8.8-r27.1_armv7a.ipk and libperl5_5.8.8-r27.1_armv7a.ipk. Additional modules can then be installed.

Open minicom with option -w. It turns on text wrapping which is off by default.


注:Utilizing the DSP on the BeagleBoard(原文出处,翻译整理仅供参考!