Difference between revisions of "BeagleBoard/GSoC/2020 Projects/PRU Bi-dir bus"

From eLinux.org
Jump to: navigation, search
(Timeline)
(ProposalTemplate)
 
(22 intermediate revisions by 2 users not shown)
Line 7: Line 7:
 
About
 
About
 
''Student'': [http://elinux.org/User:Deebot Deepankar]<br>
 
''Student'': [http://elinux.org/User:Deebot Deepankar]<br>
''Mentors'': [http://elinux.org/User:Jkridner Jason Kridner] Zubeen Tolani<br>
+
''Mentors'': [http://elinux.org/User:Jkridner Jason Kridner], Kumar Abhishek, Saketh, Hunyue Yau ,Drew Fustini <br>
  
 
''Code'': https://github.com/deebot/Beaglebone-BidirectionBus<br>
 
''Code'': https://github.com/deebot/Beaglebone-BidirectionBus<br>
Line 15: Line 15:
  
 
=Status=
 
=Status=
This project is currently just a proposal.
+
Basic Ground work has started. can be viewd here  https://github.com/deebot/Beaglebone-BidirectionBus
  
 
=Proposal=
 
=Proposal=
Line 38: Line 38:
 
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.
 
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 interfacing 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 variant that comes with beaglebone is a non preemptive Linux variant that means there is limit to doing high frequency tasks in a reliable manner.
 
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 interfacing 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 variant that comes with beaglebone is a non preemptive Linux variant that means there is limit to doing high frequency tasks in a reliable manner.
The idea here is to interface the universal shift register 74HC299 with the PRU and then  these PRU can be controlled from the main arm processor using ioctl calls and Remoteproc utility. The implementation of  software 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 accordingly. 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.
+
The idea here is to interface the universal shift register CD54HC299 (CD54HC299 available in PDIP package so can be usedd on breadbaord,SN54F299 which was mentioned on the idea page is obsolete.)with the PRU and then  these PRU can be controlled from the main arm processor using ioctl calls and Remoteproc utility. The implementation of  software 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 accordingly. 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 specific syntex.
+
We would be requiring to wirte an LKM to communicate with PRU in linux userspace. These LKM are also written in c/c
Once everything is up and running, I would like to make  PCB board in shield formfactor with the shiftregister chip and few LEDs,and LCD and button so that in future people can play around with such chips more easily and can integrate them in their i/o intensive projects.  
+
++ language with some special kernal specific syntex.Then Once everything is up and running, I would like to make  PCB board in shield/cape form factor with the shiftregister chip and few LEDs,and LCD and button so that in future people can play around with such chips more easily and can integrate them in their i/o intensive projects.  
  
 
IMPORTANT
 
IMPORTANT
User by the name Jkridner in the IRC pointed me to  previous year GSoC ( https://github.com/pranav083/pocket_beagle-work) where a shift register was interfaced using assembly language.But as i could see the communication with main processor could be improved.My solution is using a c language approach which would attract more user base than assembly. I would be doing my circuit diagrams on Eagle rather than in eagle which would be more professional way of sharing schematics in the community.  
+
User by the name Jkridner in the IRC pointed me to  previous year GSoC ( https://github.com/pranav083/pocket_beagle-work) where a shift register was interfaced using assembly language.But as i could see the communication with main processor could be implemented using RemoteProc which is now supported on the latest kernal.My solution is using a c language approach which would attract more user base than assembly. Further i am extending the work to make a cape on this reference design.
 +
I also intend to do a step by step wikis  so  that a beginner can easily understand and test simple i/o features.
  
Also  i think i think i could do wikis that a beginner can easily understand and test simple i/o features
 
 
Timeline
 
  
 
===Timeline===
 
===Timeline===
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.)
 
 
 
{| class="wikitable"
 
{| class="wikitable"
| Mar 30 || Proposal complete, Submitted to https://summerofcode.withgoogle.com
+
| Mar 30 || Proposal complete, Submitted to https://summerofcode.withgoogle.com </br>
 
|-
 
|-
 
| Apr 27 || Proposal accepted or rejected
 
| 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
+
| May 25 || By this day i plan to go through following Books to have holistic understanding and note/mark important sections that can be of help directly and indirectly in my implementation </br>
1.exploring Beaglebone by Derek 2. Linux driver Cookbook  
+
1.exploring Beaglebone by Derek</br>
Review of existing similar work on other SoC platform, install necessary softwares  crossplatform development setup and debugging tools
+
2. Linux driver Cookbook</br>
|-
+
Review of existing similar work on other SoC platform </br>
| May 25 || Introductory YouTube video and setup of hardware and breadboard etc Ready for development
+
Understand the theory of configuring pins and logic levels and study of modes of GPIO.</br>
|-
+
Installation of  necessary software and crossplatform toolchain and debugging tools for development on eclipse </br>
| June 1 || By this time I would have  tested interfacing PRU in c with simple hardware like buttons , study of timing diagram in datasheet
+
Discuss any changes in the timeline or approach with the mentor</br>
|-
+
Arranging shift register IC 74hc299 74hc595 and otherhardware </br>
| June 8 || analyzing the timing diagrams of shift registers  using oscilloscope/logic analyser and connected LEDs and if needed studying the theory of shift register in detail. shift register would be up and running with basic functionality
 
|-
 
| June 15 18:00 UTC ||Documentation, cleanup and extending functionality to implement different modes  shift left and load parallel data and interfacing buttons , LEDs and 16X2 LCD using the Shiftregister 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 ||  Device tree ovrlays to integrate hardware
 
|-
 
| June 29 ||  Extending the basic LKM and remoteproc/pru_rproc calls and bidirectional communication
 
 
|-
 
|-
| July 6 || Extending drivers for bidirectional communication and ioctl calls/user space libraries and Communication between the main processor and PRU
+
| May 30 || Milestone #1, Introductory YouTube video</br>
 +
setup 75hc595 hardware on breadboard or general purpose PCB </br>
 
|-
 
|-
| July 13 18:00 UTC || Documentation and cleanup. Buffer time for anything left out which was planed (Mentors and students can begin submitting Phase 2 evaluations )
+
| Till June30 : First Evaluation  || Control the 74HC595 using Buttons and control LEDs on Output.</br>
 +
Understand Remoteproc and rpmsg <br>
 +
Write  C codes for PRU and control the IC.<br>
 +
A basic Linux driver to talk to IC.<br>
 
|-
 
|-
| July 17 18:00 UTC || Planing the layout  and physical shield shape of PCB, checking for PCB footprint and creating custom footprints  and schematic on EagleCad (Phase 2 Evaluation deadline)
+
| July30 - Second Evaluation  || Understand the IC 74HC299 and the modes </br>
 +
Interface it with the PRU with a c code and implement different modes</br>
 +
Write driver to appear it as linux sub system </br>
 
|-
 
|-
| July 20 || Routing of board
+
| August 2 Third Evaluation || extending functionality to implement different modes</br>
 +
extending the driver functionality </br>
 +
Device tree overlays/ systemd unit functions for on boot configuration</br>
 +
final documentation</br>
 +
Final Video</br>
 
|-
 
|-
| 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 || Documentation and final improvements Mentors submit final student evaluations
 
 
|}
 
|}
 +
 +
 
There will be many wikis that will explain the steps, i want to make life easier for the noobs and beginners as it is sometimes very difficult to understand codes on github
 
There will be many wikis that will explain the steps, i want to make life easier for the noobs and beginners as it is sometimes very difficult to understand codes on github
  
Line 102: Line 94:
 
I also did one project where i extended the i/o of atmega328P with TLC5940 chip which gave me PWM capabilities  and ability to control 9 Tricolour LEDs with few arduino pins .Link to board files and software is here [https://drive.google.com/drive/folders/1a-xCQbZVewmPrdciffyjagsNq0rjFDue TLCbasedcoaster]<br>
 
I also did one project where i extended the i/o of atmega328P with TLC5940 chip which gave me PWM capabilities  and ability to control 9 Tricolour LEDs with few arduino pins .Link to board files and software is here [https://drive.google.com/drive/folders/1a-xCQbZVewmPrdciffyjagsNq0rjFDue TLCbasedcoaster]<br>
  
Further my resume can help you access my capabilites https://drive.google.com/open?
+
Further my resume can help you access my capabilites [https://drive.google.com/file/d/1ZqI5eIz89_8ZBwUr8c1QP4yZGXeDZhC2/view?usp=sharing Resume]</br>
 
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
 
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:
 
To be precise the strategy will be:
Line 109: Line 101:
 
1. Getting the shift register up and running.<br>
 
1. Getting the shift register up and running.<br>
 
2. Controlling the shift register modes from linux user space using ioctl calls<br>
 
2. Controlling the shift register modes from linux user space using ioctl calls<br>
3. Design a board on Eagle cad to make things easier to do for other community memebers.<br>
+
3. Design a board on Eagle cad to make things easier to do for other community members.<br>
 
Final Deliverables promised<br>
 
Final Deliverables promised<br>
 
1.Firmware for PRU, <br>
 
1.Firmware for PRU, <br>
Line 124: Line 116:
 
==Misc==
 
==Misc==
 
https://github.com/jadonk/gsoc-application/pull/140
 
https://github.com/jadonk/gsoc-application/pull/140
 
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 that in German grading system there are 1 to 5 grades. Grade 1 is excellent  and as we move higher, the lower the performance.  5 is fail.<br>
 
https://drive.google.com/open?id=18R6cgMSYd-fMf63EsSG-y7yqbSJr3JmP<br>
 
 
2.  Some places my project got featured.<br>
 
On digi official website (Makes xbee and several other products)<br>
 
https://www.digi.com/resources/project-gallery/all-terrain-rover<br>
 
https://makezine.com/2016/05/19/build-rescue-bots-using-off-the-shelf-parts/<br>
 
 
3. some Contributions on Element14<br>
 
https://www.element14.com/community/people/deepankarmaithani/blog <br>
 
https://www.element14.com/community/community/raspberry-pi/raspberrypi2/blog/2015/04/30/raspberry-pi-my-experience <br>
 
4. My old blog which is now abandoned <br>
 
https://creativengin.blogspot.com/2015/06/processing-what-is-there-in-processing.html <br>
 
 
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. <br>
 
https://mygit.th-deg.de/dm04339/custom-and-minimal-linux-for-raspbarrypi-arm-cortex-a53-architecture <br>
 

Latest revision as of 07:04, 27 May 2020


ProposalTemplate

{{#ev:youtube|Jl3sUq2WwcY||right|BeagleLogic}} About Student: Deepankar
Mentors: Jason Kridner, Kumar Abhishek, Saketh, Hunyue Yau ,Drew Fustini

Code: https://github.com/deebot/Beaglebone-BidirectionBus
Wiki: http://elinux.org/BeagleBoard/GSoC/Deepankar
GSoC: [N/A]

Status

Basic Ground work has started. can be viewd here https://github.com/deebot/Beaglebone-BidirectionBus

Proposal

All the requirements listed on the ideas page are fulfilled.Pull request is pull

About you

IRC: deepankar
Github: https://github.com/deebot
Gitlab: https://mygit.th-deg.de/dm04339
School: Techniche Hochschule Deggendorf
Country: Germany
Primary language (We have mentors who speak multiple languages): English
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 and Cape For A GPIO-based Parallel Bi-Directional Bus.t

Briefly,The basic idea is to extend the i/o ports using universal shift registor so as to create a possibility for projects that require large no of i/o. Further it is required to write Drivers and userspace library to access additional i/o from linux user space

Description

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 interfacing 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 variant that comes with beaglebone is a non preemptive Linux variant that means there is limit to doing high frequency tasks in a reliable manner. The idea here is to interface the universal shift register CD54HC299 (CD54HC299 available in PDIP package so can be usedd on breadbaord,SN54F299 which was mentioned on the idea page is obsolete.)with the PRU and then these PRU can be controlled from the main arm processor using ioctl calls and Remoteproc utility. The implementation of software 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 accordingly. 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/c ++ language with some special kernal specific syntex.Then Once everything is up and running, I would like to make PCB board in shield/cape form factor with the shiftregister chip and few LEDs,and LCD and button so that in future people can play around with such chips more easily and can integrate them in their i/o intensive projects.

IMPORTANT User by the name Jkridner in the IRC pointed me to previous year GSoC ( https://github.com/pranav083/pocket_beagle-work) where a shift register was interfaced using assembly language.But as i could see the communication with main processor could be implemented using RemoteProc which is now supported on the latest kernal.My solution is using a c language approach which would attract more user base than assembly. Further i am extending the work to make a cape on this reference design. I also intend to do a step by step wikis so that a beginner can easily understand and test simple i/o features.


Timeline

Mar 30 Proposal complete, Submitted to https://summerofcode.withgoogle.com
Apr 27 Proposal accepted or rejected
May 25 By this day i plan to go through following Books to have holistic understanding and note/mark important sections that can be of help directly and indirectly in my implementation

1.exploring Beaglebone by Derek
2. Linux driver Cookbook
Review of existing similar work on other SoC platform
Understand the theory of configuring pins and logic levels and study of modes of GPIO.
Installation of necessary software and crossplatform toolchain and debugging tools for development on eclipse
Discuss any changes in the timeline or approach with the mentor
Arranging shift register IC 74hc299 74hc595 and otherhardware

May 30 Milestone #1, Introductory YouTube video

setup 75hc595 hardware on breadboard or general purpose PCB

Till June30 : First Evaluation Control the 74HC595 using Buttons and control LEDs on Output.

Understand Remoteproc and rpmsg
Write C codes for PRU and control the IC.
A basic Linux driver to talk to IC.

July30 - Second Evaluation Understand the IC 74HC299 and the modes

Interface it with the PRU with a c code and implement different modes
Write driver to appear it as linux sub system

August 2 Third Evaluation extending functionality to implement different modes

extending the driver functionality
Device tree overlays/ systemd unit functions for on boot configuration
final documentation
Final Video


There will be many wikis that will explain the steps, i want to make life easier for the noobs and beginners as it is sometimes very difficult to understand codes on github

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 (focus area: Embedded systems) focuses extensively on c language, linux OS, FPGA and writing software for low level hardware. Moreover I have worked as Junior design Fellow at University of Delhi which was a full time job where I played with discrete hardware elements, varies ICs and did a lot of testing on breadboard using oscilloscope and software tools.
My projects can be seen on my website

https://deebot.github.io and on my youtube channel Youtube-Deepankar.

I also did one project where i extended the i/o of atmega328P with TLC5940 chip which gave me PWM capabilities and ability to control 9 Tricolour LEDs with few arduino pins .Link to board files and software is here TLCbasedcoaster

Further my resume can help you access my capabilites Resume
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. Controlling the shift register modes from linux user space using ioctl calls
3. Design a board on Eagle cad to make things easier to do for other community members.
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

Contingency

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 the most difficult times. The technical reference manuals provided by TI on am3358 and am5729 can also be of great help

Benefit

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. Also 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.

Misc

https://github.com/jadonk/gsoc-application/pull/140