Android, Beagleboard, Kernel and the DSP-Bridge

Application access to the DSP

Application access to the DSP

The Beagleboard features a Digital Signal Processor (TMS320C64x+ DSP). For our spectrum analyzer it would be a very nice feature to calculate the FFT in the DSP.

To access the DSP the Kernel needs to implement the DSP-Bridge driver. However, it is quite challenging to get the driver into the Kernel. Several attempts to patch the Embinux Kernel with the original patches failed.[Embinux Kernel Git Repository]

The good news is that the omap-kernel (linked in the Android Git repository) features the DSP-Bridge driver that we were looking for. [Android omap Kernel Git Repository]

The challenge was to get the Kernel running on the Beagleboard. We had first given up on it since the USB-Host Controller was not working. But after trying every other Kernel (Embinux, 0xdroid, mainline omap kernel, etc.) we gave it another try. Since we are booting an NFS Root File System we needed USB and Ethernet support on startup time. The key is to configure the Beagleboard’s USB-OTG as a Host Device. This can be done in the menuconfig of the Kernel. This was not the only challenge. A Kernel panic occurred when looking for the init file.
The solution was to configure the Kernel properly and including all Android driver modules (which seems kind of obvious at this point). To give you an idea of how the config of the 2.6.29 Android Omap Kernel could look like you can check our .config out here. [.config file]

Android now boots correctly.

Well, there is still one problem though. The Input Event Subsystem seems to be messed up, thus our keyboard and mouse is not working at all.
The Event Input Subsystem works now properly with the above .config file.

To break it down:

Working with the omap-Kernel of the Google Git repositories we can state the following:

  • DSP-Bridge Driver
  • Nicely maintained by a big community


  • USB-Host Controller not working yet (USB OTG in host mode works)

10 thoughts on “Android, Beagleboard, Kernel and the DSP-Bridge

  1. Manuel Di Cerbo Post author

    The frequency is limited by the I2C Bus which operates at around 100 [kHz] (8 bit Serial) at max. If we do our Job right we will be able to display the Spectrum up to 12.5 / 2 [kHz] which is about 6.25 [kHz].

  2. Sren Steen Christensen

    In case your I2C peripheral is able to go higher than 100kHz, the OMAP is capable of running Fast Speed I2C going to 400kbits/ or even High Speed I2C going to 3.4Mbit/s.

    You should therefore be able to go higher. One problem using I2C ADCs is though, that it normally impossible to ensure equidistant sampling, which will leave you with a useless dataset for doing the FFT… Using an ADC on the McBSP bus will be much better for this…

    Good luck with the project

  3. Manuel Di Cerbo Post author

    Thank you very much for your comment Soren.

    This is a very nice idea you have. You are absolutely right about the ADC sampling frequence inconsitency.

    We also had the idea to use an ADC over SPI to get a higher sampling rate. However, we wanted to use the USB interface since it seems to be underrated in many other applications due its “complex” protocol stack.

    The McBSP Bus would be the absolutely best solution.

    On the other hand we would very much like to make use of the DSP on the OMAP3530 (for our FFT), however it is very difficult to access it. We tried the dspbridge and always got stuck in various troubles.

    So much about our current state :D

    Thanks for your ideas and stick around :)

  4. Aparna

    Hello All,

    I tried booting Android with the steps given above..
    Its booting fine, But the keyboard and mouse does’nt work…
    Can anybody help me out??


  5. Pingback: Alex Gordon

  6. Pingback: Kylie Batt

  7. Pingback: Kylie Batt1

Leave a Reply

Your email address will not be published. Required fields are marked *


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>