I red a post about image processing with PRU. The author explains how the PRUs could be used for image capture. But for me it’s not clear if you can’t use GPIOs for this job. Isn’t the GPIO speed fast enough for taking 1.3MP jpeg image at a frame rate of 30fps? I looked into data sheet of AM355x, system reference manual and technical reference manual to find GPIO clock speed, but I couldn’t find the info.
This is the data sheet of the OV9655.
The PRUs have access to the GPIO pins and some of those pins can be accessed directly by PRU instructions if the pins are configured to do this.
GPIO speed is fast enough (not by a large margin), but that is not the primary issue. The typical clock rate used for 1.3MP images at 30Hz is 48MHz and the PRU runs at 200MHz. This means that you only get to use about 4 PRU clock cycles per pixel. It is a nontrivial task to synchronize with the camera, capture the pixel intensity, store each pixel, and keep track of all of the timing — in 4 PRU cycles per pixel. This can also be a bandwidth problem if you wish to capture more frames than will fit in RAM because you will need to find some way to store them at 39 megapixels per second and that isn’t easy to do using nand flash, SD cards, or over USB 2.0.
The OV9655 only produces images in an uncompressed form and does not produce images in a compressed form like JPEG. Some image sensors are able to provide JPEG compression.
In short, interfacing with a high speed device such as an image sensor is a challenging, but not impossible task on a BBB.