BeagleBoard/GSoC/2020 Projects/PRU Bi-dir bus

< BeagleBoard‎ | GSoC‎ | 2020 Projects
Revision as of 00:31, 31 March 2020 by Deebot (talk | contribs)
Jump to: navigation, search


{{#ev:youtube|Jl3sUq2WwcY||right|BeagleLogic}} About Student: Deepankar
Mentors: Jason Kridner

GSoC: [N/A]


This project is currently just a proposal.


Please complete the requirements listed on the ideas page and fill out this template.

About you

IRC: deepankar
School: Techniche Hochschule Deggendorf
Country: Germany
Primary language (We have mentors who speak multiple languages): Language
Typical work hours (We have mentors in various time zones): 8AM-5PM CET
Previous GSoC participation: I highly appreciate the contribution of opensource community, i have learnt alot of things and could use alot of softwares because they are freely avialble in opensource. By participating in GSoC i want to contribute back to the community and in the process want to learn new things and make new likeminded friends

About your project

Project name: Reference Design For A GPIO-based Parallel Bi-Directional Bus.t


The solution I am proposing involves external universal shift register which will interface with the Beagle bone using the PRU and will also be accessible from the linux system using ioctl calls. This could be a very interesting solution that can enable the community to do stuff with beaglebone which were earlier not easily implementable due to lack of gpio pins. This can have a lot of applications in interfcaing multicolor LEDs and creating animations and also as mentioned in the problem statement can be used to control game controllers. Here the emphasis is on interfacing with PRU so that the extened I/O can also be used for time critical tasks. As we know the standard linux varient that come with beaglebone is a non premtive Linux varient that means there is limit to doing high frequency tasks in a realiable manner. The idea here is to interface the universal shift register SN54F299 with the PRU and then these PRU can be controlled from the main arm processor using ioctl calls and Remoteproc utility. The implementation of softwarre for the PRU will be in c language. The main challenge here will be to understand the timing diagram in the shift registers datasheet and then implement a code to communicate. Basically a shift register is composed to D flipflops which are chained together and can be used to do SIPO, SISO,PISO,PIPO operations. In our universal shift register There are also 3 different modes in the universal shift registers which can be used to perform input output operations or doing a parallel data load. The plan is to connect LEDs to the output and play with the modes once the firmware is up and running then switch to kernal stuff. We would be requiring to wirte an LKM to communicate with PRU in linux userspace. These LKM are also written in c language with some special kernal based syntex. Once everything is up and running, I would like to make a PCB board with the shiftregister chip and few LEDs, so that in future people can play around with such chips more easily and can interate them in their i/o intensive projects.



Provide a development timeline with a milestone each of the 11 weeks and any pre-work. (A realistic timeline is critical to our selection process.)

Mar 30 Proposal complete, Submitted to
Apr 27 Proposal accepted or rejected
May 18 Pre-work complete, Coding officially begins!. By this day i plan to go through following Books to have hollistic understanding and note mark important sections that can be of help directly and indiretly in my implementation

1.exploring Beaglebone by Derek 2. Linux driver Cookbook

May 25 Milestone #1, Introductory YouTube video, Review of existing similar work on other SoC platform, install necessary softwares and debugging tools
June 1 By this time I would have setup the breadboard and tested interfacing PRU in c with simple hardware like buttons , study of timing diagram in datasheet and analyzing the timing diagrams of shift registers using oscilloscope and connected LEDs and if needed studing the theory of shift register in detail
June 8 shift register would be up and running with minimal functionality
June 15 18:00 UTC Documentation, cleanup and extending functionality to implement different modes shift left and load data Milestone #4, Mentors and students can begin submitting Phase 1 evaluations
June 19 18:00 UTC Phase 1 Evaluation deadline Basic Helloworld LKM and familiarising with LKM specific syntex and simentics
June 22 Communication with PRU and instruct them from Arm processor
June 29 Milestone #5 Extending the basic LKM and remoteproc calls,
July 6 Extending drivers for bidirectional communication and ioctl calls
July 13 18:00 UTC Milestone #8, Mentors and students can begin submitting Phase 2 evaluations
July 17 18:00 UTC Phase 2 Evaluation deadline
July 20 Planing the layout and physical shape of PCB, shield based or normal board, checking for PCB footprint and creating custom footprints and schematic on EagleCad
July 27 PCB boards files and Gerbers will be ready. Can be sent to boardhouse so as to have some boards before final submission
August 3 Refining the Driver solution and final video
August 10 - 17 18:00 UTC Buffer time for any problems:Final week: Students submit their final work product and their final mentor evaluation
August 17 - 24 18:00 UTC Documentationa and final improvementsMentors submit final student evaluations

Experience and approach

I have studied hardware and software design with my bachelors in Electronics and Communication which was more focused on understanding digital circuits, analog circuits and several other important aspects of hardware , my current course which is a Masters course in Applied computer science having focus are Embedded systems focuses extensively on c language, linux and writing software for low level hardware. More over I have worked a Junior design Fellow which was a full time job where I played with discreate hardware elements, varies ICs and did a lot of testing on breadboard and oscilloscope. My projects can be seen on my and on my youtube channel . Also my resume can help you access my capabilites Since in my job roles I worked in a small team of interdisciplinary people I had to handle different aspects of embedded system design which has given me suitable experience to undertake this task that require multiple skills To be precise the strategy will be:

The development task can be divided into three parts:
1. Getting the shift register up and running. 2. Controling the shift register modes from linux user space using ioctl calls 3. Design a board on Eagle cad to make things easier in future. Final Deliverables promised 1.Firmware for PRU, 2.LKM to allow control from linux user space, 3.Design files for PCB, 4.Wiki pages for documentation and short video at the beginning and end


I can ask my questions on GSoC IRC. Further i have been active in different DIY forums for long time, I have been contributor to element14 forums and hackaday,.Further I think I also have good collection of books, some colleagues who have worked with beagle bone and my linux professor whom I can ask to help in most difficult times. The technical reference manuals provided by TI on am3358 and am5729 can also be of great help


I think this will openup a new way to easily do projects that require too many i/o when using the LCDs and HDMI, the beaglebone is left with few pins to do other gpio intensive stuff. I think with this hardware the PRUs can be put to more extensive use and can can unleash its potential for it being a very capable component that can precisely control critical things.


Is there anything else we should have asked you? Finally I am also sharing a few more things to convince that I can do this project. 1. Below is the link to my last semester transcript and I have done several subjects connected to linux, c and embedded systems. Please note in german grading there are 1 to 5 grades. Grade 1 is excellent and as we move higher the lower the performence. 5 is fail.

2. Some places my project got featured. On digi official website (Makes xbee and several other products)

3. Contributions on Element14 4. My old blog which is now abandoned

5. I had difficulties writing proposal to elinixwiki. But to convince I can write wiki’s. And do documentation. Can look at this project which I did for my course operating systems.