Reference Design For A GPIO-based Parallel Bi-Directional Bus
Student: Pranav Kumar
Mentors: Andrew Henderson, Zubeen Tolani
- 1 Status
- 2 Tasks Done
- 2.1 About Me
- 2.2 Reference Design For A GPIO-based Parallel Bi-Directional Bus
- 2.2.1 Introduction
- 2.2.2 Project Overview
- 2.2.3 Detailed Description
- 2.2.4 Progress till now
- 2.2.5 Timeline:
- 188.8.131.52 Community Bonding Period
- 184.108.40.206.1 Week 1 : Milestone #1
- 220.127.116.11.2 Week 2 : Milestone #2
- 18.104.22.168.3 Week 3 : Milestone #3
- 22.214.171.124.4 Week 4 : Milestone #4
- 126.96.36.199.5 Week 5 : Milestone #5
- 188.8.131.52.6 Week 6 : Milestone #6
- 184.108.40.206.7 Week 7 : Milestone #7
- 220.127.116.11.8 Week 8 : Milestone #8
- 18.104.22.168.9 Week 9 : Milestone #9
- 22.214.171.124.10 Week 10 : Milestone #10
- 126.96.36.199.11 Week 11 : Milestone #11
- 188.8.131.52.12 Week 12 : Milestone #12
- 184.108.40.206.13 Week 13 : Milestone #13
- 220.127.116.11.14 Week 14 : Milestone #14
- 18.104.22.168 Community Bonding Period
- 2.3 Final Goals:
- 2.4 Experience
- 2.5 Benefit
- 2.6 Future Contributions
Create a hardware/software design will incorporate shift registers (and potentially logic level converter solutions as appropriate) to allow BB.org hardware to communicate with hardware via a parallel, bi-directional bus.
I have completed the task required as described on the ideas page, and created a pull request, as listed here
E-Linux Username: pranav083
School: UIET,Panjab University,Chandigarh
Primary language: English,Hindi
Typical work hours: 9:30 - 23:00 IST GMT/EST/PST to Ist Adjusted Time
Previous GSoC participation: Skills: C,Python,ROS,OpenCV,Embeddded C,Electronics Prototying
Tools(proficient) : Git,Linux
Hardware Skills: Atmel chip, Raspberry Pi, ICs, Circuit Designing, I2C
Reference Design For A GPIO-based Parallel Bi-Directional Bus
Project name: Reference Design For A GPIO-based Parallel Bi-Directional Bus
In digital circuits, a shift register is a cascade of flip flops, sharing the same clock, in which the output of each flip-flop is connected to the 'data' input of the next flip-flop in the chain, resulting in a circuit that shifts by one position the 'bit array' stored in it, 'shifting in' the data present at its input and 'shifting out' the last bit in the array, at each transition of the clock input. As many projects require a large number of input/output pins to make the project interfacing other the other microcontroller it's having a huge requirement GPIO(e.g game controller etc.). As pocket beagle is small yet very power packed low-power board in which the GPIO are pinmux with the other peripherals and having many functionalities on the same pin like (SPI, USART), that led to the shortage of pins on the board
As it can be seen that GPIO having simple input /output (without pinmux) are very less in number which makes it really hard to use pocket beagle to use in projects where their large requirement of I/O pins. Buts as it has two powerful PRU of with a 32-‐bit RISC processor at 200MHz with single-cycle pin access for hard realme. So it makes it very easy for implementing multiple inputs and outputs control at high speed through a few GPIO pins.
the BeagleBone family has a large number of pins available on their P8/P9 headers, projects requiring a large amount of GPIO I/O may still be infeasible due to pinmux conflicts with other interfaces (SPI, UARTs, etc.). The newer PocketBeagle platform is even more restricted in the number of available GPIOs for interfacing. In addition, bi-directional bus communication using GPIOs is infeasible, as each GPIO is configured for either input or output. This project will combine your hardware and software skills to address these limitations by creating a shift register-based hardware design that will allow serial streams of data going in/out of the PocketBeagle or BeagleBone family GPIOs to be mapped into a bi-directional communications bus. Some practical uses of this are for GPIO-based game controller inputs (using *lots of buttons*), communication address/data buses for interfacing with older microcontrollers and microprocessors, and providing large numbers of logical bi-directional GPIOs.
Sometimes a project needs to have multiple inputs /outputs just for example interfacing LCD Display ,Interfacing a multiple button controller like game controller, there is need for interfacing external memory like (eg. 8kx8 SRAM older low memory version or 28f400 Flash Memory ) in which their needs to be need of multiple data line to be there in a controller to use it.
Progress till now
First of all, I studied the internal mapping of the PRU in the pocket Beagle I am able to interface swift register with the pocketBeagle And working
[hendersa]: Mention your existing C code here and link to the github project for it. For additional preliminary work, consider adding a few functions in your C code to set the read/write mode of the bus and to read/write data to/from the bus. This way, you can show that you've thought through the entire bus interfacing process and have a preliminary prototype that uses the (very slow) filesystem I/O interface. The logic in this prototype can then be used as a blueprint to build the more complex code. This will make your proposal much stronger.
Community Bonding Period
- Studying and getting further in-depth knowledge of the PRU and knowing the further use cases of the project through the mentor and another community member.
- Discussing the type of coding standard to be followed in the code with the mentors
- If any changes are suggested making changes in according to that
- Discussing the guideline followed for documentation
- study the device tree of the pocketbeagle for
- Studying the Datasheet so that during the implementation period it makes easier to apply things in a more smooth way.
Week 1 : Milestone #1
- As I was already working on the swift register interfacing with the pocket beagle will work on further improving the code for different use cases
- Testing it with different input and output modes on different GPIOs
Week 2 : Milestone #2
- Check for signal accuracy and any delay if occurring which occurring while running different test cases using CRO.
- In the meantime check for any loss which is occurring in this circuit
- Testing and Debugging the circuit making circuits for the by implementing it with different input and output with different programs and making design of the circuit on PCB as addon for pocketbeagle.
- As I will get be known to most aspect of the hardware and PRU for now so it will be easier to expoloit mosre from it, to move toward the develoment of kernel drivers
Week 3 : Milestone #3
- developing linux kernel module for the kernel user space
- testing and debuging if any problem is caused in between the development
Week 4 : Milestone #4
- expanding device driver capability to communicate taking input or output at different baud rates
- Testing the communication and synchronization with other peripherals and logic analyzer
- Preparing slides of the completed work and check for any bugs in the driver.
by this time the time for Phase I evaluation: I will deliver kernel driver, circuits, effect of swift register on the different GPIOs of the pocket beagle
Week 5 : Milestone #5
- Try to fix any bug if it is there in the kernel driver
- start to develop library in c for the user space
- Documenting the work
Week 6 : Milestone #6
- making first project that will be a game controller using the pocket beagle
- testing and writing code for it as
Week 7 : Milestone #7
Week 8 : Milestone #8
By this time the time for Phase II evaluation: I will be able to deliver library for the user space,
Week 9 : Milestone #9
- fixing bugs error and
- expanding the support for the driver in python
Week 10 : Milestone #10
Week 11 : Milestone #11
Week 12 : Milestone #12
Week 13 : Milestone #13
As the another p
Week 14 : Milestone #14
As I am from Electronics background and always involved in creating in making projects related to micro-controller.I like to learn new things in my day to day life. I have made a 3D printer that works both as a 2D printer and 3D printer using the hardware modules of a 3d printer and Open Source Marlin Firmware. Worked on finite state machines using embedded system. And I take sessions in our college to spread knowledge among ourself with common interests. I love to contribute to open source where people can help each and clearing one another problems.
Previous Contributions to Open-Source
- Making a lighter and less complex multifunctional line Following algorithm using FSM that is easy to implement and build.
- Lead the team of NGO making projects for school going children with full DIY guide and Documentation Github.
- Making a short script for login into our university wifi Github Link.
- Take the initiative to have an Open-Source Community section of India on OSRF official ROS-Discourse so that people can openly know to each other.
Contributions to this project
There was no upstream repository for this project. So, I make one and started contributing to it by starting from interfacing shift register github. And for this project I have created another repository on GitHub https://github.com/pranav083/pocketbeagle-bi-dir-comm.
- Participated in Hacktober fest 2018.
- Suggesting an efficient prototype of Harvester at eYIC, IIT Bombay(Country level competition)Docs.
- Won PocketBeagle from Mouser electronics event at IIT Roorkee, India.
As I will be on my break period from my college after semesters exam. So, I can devote my full time on this project and there will be enough time for me to learn, explore and implement new things and successfully able to complete this project on time.
It will largely impact the way people who want multiple inputs or output capability in their projects
What community members speak
After making this project for the community, I am looking forward to working more with the hardware-software integrated project and want to help pocketbeagle to made easy to use in projects for newbies.
As always I will like to contribute further in the open source community and spread my word to my local community and spreading the easy of making project using beaglebone family and its advantages over other controllers, And the way people help each other especially.