Firmware Extensions: Custom firmware for BeagleLogic
Clone this wiki locally
BeagleLogic offers a powerful framework for data capture using the Programmable Real-Time Units and users are welcome to extend the default BeagleLogic firmware by writing extensions that can support different data formats or data capture.
An example use case can be using a camera module like the OV7670. A correctly configured camera module outputs image data, PCLK, HSYNC and VSYNC signals. The PRU firmware could in this case, wait for a VSYNC pulse and after receiving the pulse, receive each pixel following the PCLK and HSYNC signals as they arrive. So the data available from /dev/beaglelogic device node will be raw image data. One could also write Linux drivers to expose the incoming image as a framebuffer device, this would require a bit more effort.
Other examples include reading in analog data for SDR/datalogging applications. A single PRU firmware for PRU0 not involving PRU1 for sample rates < 50Msps may be developed in the future.
To add a custom firmware into the BeagleLogic tree, the requirement is that the firmware sources be made available under a GPLv2 only license. No firmware blobs will be accepted into the BeagleLogic repository. The firmware must have its own build rules and Makefile - you may use the firmware bundled with BeagleLogic as a starting point. The firmware also needs to be transparent to the BeagleLogic kernel layer - only a firmware reload is required for the PRUs so PRU0 firmware needs to be modified with care. PRU1 firmware can be adapted to different data formats or to follow a clock signal given as input, for example.
Custom firmware may be placed into subdirectories in 'beaglelogic-firmware/extensions/' directory. Make a directory with your firmware and submit as a pull request. Test the new firmware with existing BeagleLogic kernel drivers before submitting.
PRUDAQ is the first supported custom firmware, and the source files are available in the tree here