Library upgrade to PRU gives Fast IO on Beaglebone

The BeagleBone Black has a powerful featureset: decent clock speed, analog inputs, multiple UART, SPI and I2C channels and on-board memory, to name a few. One missing feature seems to be the lack of support for the two on-board Programmable Real-time Units (PRU’s). Each of these 32-bit processors run independently of the main processor, but are able to interface with the main processor through the use of shared RAM and some interrupts. Unfortunately, PRU’s are not supported and in the absence of information, difficult to program. Enabling the PRU’s will allow them direct access to external sensors via the GPIO pins, for example. Perhaps most enticing is the idea that the PRU’s add real-time processing capability to the BBB.

[Thomas Freiherr] is working on the libpruio project to allow PRU support on the BBB. It is “designed for easy configuration and data handling at high speed. libpruio software runs on the host (ARM) and in parallel on a Programmable Realtime Unit SubSystem (= PRUSS or just PRU) and controls the subsystems”. Additional information about the project is available on the libpruio wiki, and files can be downloaded from here (German Page).

This paper presented at inter.noise2014 (PDF) a couple of months ago has a nice comparison of various small computer/controller boards and outlines the advantages of the BBB once its PRUs are enabled. If readers come across applications of the BBB with PRUs enabled, let us know in the comments. If you want to work your way into the world of the PRU we highly recommend this tutorial series.

Thanks for sending in the tip, [Patrick]

[Image Source: libpruio stepper motor example]

19 thoughts on “Library upgrade to PRU gives Fast IO on Beaglebone

  1. I saw some stepper-control software a while back, and what struck me was that the PRU stuff was specifically called out as closed-source because that had been the only way the author could get access to the docs. I’m glad to see that’s apparently changing.

  2. Well if people are wanting to know more about the pru/see other applications:

    An example of working with it:
    http://www.element14.com/community/community/designcenter/single-board-computers/next-gen_beaglebone/blog/2013/05/22/bbb–working-with-the-pru-icssprussv2

    There’s also a C compiler:
    http://www.ti.com/tool/PRU-SWPKG

    It’s possible to use it for camera imaging:
    http://www.element14.com/community/community/designcenter/single-board-computers/next-gen_beaglebone/blog/2013/08/18/bbb–imaging-with-a-pru-connected-camera

    The information on the pruss was removed from the chip’s documentation, but it was thrown onto github:
    https://github.com/beagleboard/am335x_pru_package

  3. yes, yes, there is no support at all for PRUs.
    most probably guys at Machinekit (fork of LinuxCNC) are from another universe – Machinekit is using PRUs to generate step signals for whatever stepper-driven CNC machine you need. I have one 3D printer with BBB and Machinekit right next to me…
    the full potential of PRUs is yet to be unlocked, but I really hate statements like “One missing feature seems to be the lack of support for the two on-board Programmable Real-time Units (PRU’s)”. To be honest, I did not read any further…

  4. It’s wrong to say that the PRUs are not supported. I think the right thing to say is “they are not supported by TI”, as in only community support is offered. That being said, this looks like a very interesting library that can hopefully serve as a basis for coordinating the efforts toards better use of the PRUs. It looks like a lot of work has gone into it and as the maintainer of Redeem, this is a very interesting development, certainly something to look into!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.