Beagleboard gsoc 2019 bi-directional progress

About Me
IRC: pranav_kumar Github: https://github.com/pranav083 E-Linux Username: pranav083 School: UIET,Panjab University,Chandigarh Country: India Primary language: English,Hindi Typical work hours: 9:30 - 23:00 IST GMT/EST/PST to Adjusted Time Previous GSoC participation: This is my first time participation in gsoc .I got intrested for it by seeing the vast amount of development for open source hardware around the world .And i also want to become a part of it. Skills: C,Python,ROS,OpenCV,Embeddded C,Electronics Prototying,circuit designing

Tools(proficient): Git, Linux, C Experience: C, Python, OpenCV, Arduino

Hardware Skills: Raspberry Pi, ICs, Circuit Designing, Atmel chips, I2C, circuit designing, circuit debugging.

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

Student: Pranav Kumar Mentors: Andrew Henderson, Kumar Abhishek, Hunyue Yau Code: https://github.com/pranav083/pocket_beagle-work Wiki: https://elinux.org/index.php?title=/BeagleBoard/GSoC/GPIO-parallel-bi-dir-bus

Part A:
https://stackoverflow.com/questions/36090929/modifying-the-device-tree-for-the-beaglebone-black https://zeekhuge.me/post/a_handfull_of_commands_and_scripts_to_get_started_with_beagleboneblack/ https://www.element14.com/community/community/designcenter/single-board-computers/next-gen_beaglebone//blog/2013/05/22/bbb--working-with-the-pru-icssprussv2 https://markayoder.github.io/PRUCookbook/ http://git.ti.com/ti-linux-kernel/ti-linux-3-8-y-kernel/trees/master/arch/arm/boot/dts
 * Command explanation for converting device tree in readable format:
 * A get start guide:
 * Outdated but fine source on pru:
 * A basic guide to pru programming:
 * A online to understand kernel structure of beaglebone on the device tree:

Part B:
https://github.com/hendersa/bes through you have to make couple of changes to get it working. https://www.ofitselfso.com/BBBCSIO/Help/BBBCSIOHelp_PRUBlinkUSR3LEDExamplePASMCode.html http://exploringbeaglebone.com/wp-content/uploads/resources/BBBP8Header.png http://exploringbeaglebone.com/wp-content/uploads/resources/BBBP9Header.png https://credentiality2.blogspot.com/2015/09/beaglebone-pru-gpio-example.html https://elinux.org/Ti_AM33XX_PRUSSv2#Beaglebone_PRU_connections_and_modes http://processors.wiki.ti.com/index.php/PRU_Linux_Application_Loader_API_Guide#prussdrv_exec_program https://www.openvim.com/
 * For using the prussdrv technique in pru programming through asssembly language:
 * basic PRU example :
 * pin P8 header:
 * pin P9 header :
 * for undersading gpio functionality :
 * pru pin modes register etc. :
 * Function use while compiling through prussdrv technique:
 * learning vim with ease :

Part C:
https://github.com/jadonk/validation-scripts/tree/master/test-capemgr https://www.kilobaser.com/blog/2014-07-28-beaglebone-black-devicetreeoverlay-generator https://learn.adafruit.com/introduction-to-the-beaglebone-black-device-tree/device-tree-overlays
 * https://github.com/beagleboard/cloud9-examples/blob/master/PocketBeagle/TechLab/rgb.pru0c
 * https://duckduckgo.com/?q=pru+assembly++programs&t=brave&ia=web
 * http://www.ofitselfso.com/BeagleNotes/UsingDeviceTreesToConfigurePRUIOPins.php#InterpretingPinMuxState
 * https://beagleboard.org/Community/Forums?place=msg%2Fbeagleboard%2F2D5Pz3r7ZZ8%2Fmlcb4xMQNYkJ#board_forum_embed
 * http://www.ofitselfso.com/BeagleNotes/AboutTheDeviceTree.pdf
 * error https://github.com/beagleboard/kernel/tree/4.1
 * docs for kernel 3.8 https://docs.google.com/document/d/17P54kZkZO_-JtTjrFuVz-Cp_RMMg7GB_8W9JK9sLKfA/edit?hl=en&forcehl=1#
 * capmngr https://elinux.org/Capemgr
 * validation scripts:
 * device tree generation :
 * Easy Go through example on device tree(usart pins):
 * https://rogerdudler.github.io/git-guide/

Part D:

 * http://www.element14.com/community/community/knode/single-board_computers/next-gen_beaglebone/blog/2013/05/22/bbb--working-with-the-pru-icssprussv2
 * pinmux gui: http://processors.wiki.ti.com/index.php/TI_PinMux_Tool_v4
 * http://processors.wiki.ti.com/index.php/TI_PinMux_Tool
 * pinmux video (not clear to me ): https://www.youtube.com/watch?v=Q8yby_i3N_M
 * (example especially for ti ccs on pru): http://processors.wiki.ti.com/index.php/PRU_Training:_Hands-on_Labs
 * pinmux online generation tool : http://pinmux.tking.org/index.html
 * timing diagram generation software : https://wavedrom.com

Sites with error
https://github.com/beagleboard/kernel/tree/4.1 reference from page https://elinux.org/Capemgr https://www.kilobaser.com/blog/2014-07-28-beaglebone-black-devicetreeoverlay-generator
 * error404:
 * device tree generator

Common Commannd
sudo dtc -I dtb -O dts -o am335x-boneblack.dts am335x-boneblack.dtb sudo dtc -I dts -O dtb -o file.dtb file.dts sudo dtc -O dtb -o file.dtbo -b 0 -@ file.dts sudo pasm -b file.p It will generate a file.bin file in the same directory sudo arm-linux-gnueabihf-g++ pru.cpp prussdrv.c -o file_out For the above given file go to the given repository https://github.com/pranav083/pocket_beagle-work/tree/master/pru Note: Always remember to make changes in the device tree file located in /lib/firmware/ directory sudo ./file_out (reference from the above file output)
 * To decompile the device tree blob(/boot/dtbs/4.11.xx):
 * To recompile the device tree(/boot/dtbs/4.11.xx):
 * To compile dtbo file(/lib/firmware/):
 * To complile a normal pasm code (assembly code) :
 * To compile it using pruss technique :
 * Run the program by the following command

Date : 31 May 2019

 * First I made an introductory youtube video of my project
 * Purchased hardware related to this project like 8-bit logic analyzer ,logic level converter
 * Understand about the code structure on making kernel module Beagleboard and understanding the beaglelogic code docs
 * Read a little bit about kernel module development from this page.

Date : 1 June 2019

 * Till now made the circuit based on the GitHub link withh shift register circuit diagram.
 * Made the circuit for testing the board see the circuit drive link
 * Further work is to implement first user space program then PRU assembly code program.
 * completed studing kernel module developnment from site as suggested by my mentor and further looking into makefile

Date : 2 June 2019
I think i should also include blocker and goals in my further work


 * Till Now
 * Today I studied more about kernel module development and try to understand the code base starting from docs, then kernel folder and firmware folder
 * Try to complete the first week commitment of making the video for the different interfacing circuit but faces some problem due to less understanding assembly code in PRU
 * As i was working earlier in the User space so i was comfortable to make the program their but i want to submit the video and code with the assembly code
 * Blockers:
 * During navigating through the code of beaglelogic .asm file are less understandable for me.
 * Less understaning of the PRU assembly code to tackle that i watched again pru video from beagle bone site.
 * came across a github page during my search for barebone pru programming on pocket_beagle_samples
 * And downloaded the Sitara PRU but it was too big to be understable to me.

Date : 3 June 2019

 * Till Now
 * Got guidance from @Jkrinder and @Hendersa through the IRC channel on the documentation regarding the PRU that are from the TI
 * As PRU have very little assembly code instruction set (There is around 40+ instruction set ) for the pru on this guide page : https://www.ti.com/lit/ug/spruij2/spruij2.pdf
 * And the guide for c/c++ complier for t=your assembly code : https://www.ti.com/lit/ug/spruhv6c/spruhv6c.pdf
 * Clone and Made the changes in the file as suggested for the file : https://github.com/hendersa/bes/blob/v0.1/src/pru.cpp by deleting line 57 and line 58 and adding " || 1 " on the line 60
 * Ran the program but got error as the main function was not there


 * Blocker
 * Building the program was not successful send my issue to my mentor
 * reading the datasheet stated above but very less success with it

Date : 4 June 2019

 * Till Now
 * while waiting for the response from the mentors started to study the assembly guide as found from different websites
 * completed the video training course on the pru programming and its different aspects through : https://training.ti.com/PRU-training-series
 * Setup ccs studio in a hope for running the pru through assembly codes


 * Blocker :
 * Still exploring the right way to program the pru in the beagle bone
 * Compile the code with out the main function and got bus error
 * Though found a way program as stated on most of the sites through the ti ccs studio but it is not the right way to continue

Date : 5 June 2019

 * Till Now
 * Got reply from the mentor and it worked after including main function and by compiling
 * starting every thing from new by re flashing the os image on the beaglebone black wireless
 * unable to install the library from the site : https://github.com/beagleboard/am335x_pru_package
 * Today is the meeting day and led a little discussion on which approach to use prussdrv or remoteproc.

 As the project progress a little bit i thing of writing a blog on enabling pru in beagle board as the most of the sources are outdated 
 * Blocker
 * Still dont know how to get the system working through the assembly code and then come through the setup guide of complier form
 * Tried the method again of enabling pru from element14 site

Date : 6 June 2019

 * Till Now
 * Changed the uEnv.txt for enabling remotproc pru system in beaglebone
 * Today finally get the pru assembly code working most of thanks to @hendersa guidance
 * Because till now from my side i had searched most of the resources that i can avail from web, beaglebone google group,etc.
 * But learn many things about its working and structure in the mean time.


 * Blocker
 * Most of the earlier problrm that i was facing is over for now now testing to run assembly code.

Date : 7 June 2019

 * Till Now
 * while working on the example from this site :https://credentiality2.blogspot.com/2015/09/beaglebone-pru-gpio-example.html and folowing the example given my beaglebone some how refuse to connect through the cable
 * after reflashing the image and installing and making the desired changes it get up and running
 * Blocker
 * most of the days ran out in debugging the beaglebone

Date : 8 June 2019

 * Till Now
 * after testing some other sites.I go through the https://www.ofitselfso.com/BBBCSIO/Help/BBBCSIOHelp_PRUInterruptHostExamplePASMCode.html
 * It started to work working by following the stated steps
 * Made changes in the bes file provided by https://github.com/hendersa/bes/ and compile that in one folder to make it easy to use in the future aseembly code compiling
 * Blocker
 * not able to under how the address is getting mapped for different register values and how the banks are used in the working solutions
 * Through the solution provided by https://credentiality2.blogspot.com/2015/09/beaglebone-pru-gpio-example.html is get understood by me but it was not a working solution.
 * As i am still not able to make chnages in the device tree and the change

Date : 9 June 2019

 * Till Now
 * reading out the device tree and resource table generation
 * updated the done work on my github (through for this time it is very less :( .)
 * I was getting problem in navigating through vim .so,i Practice it from https://www.openvim.com (as i also dont know the commands)
 * Blocker
 * still not able to activate the gpio present in the p8 and p9 header through the assembly code
 * submitted my query to the mentors waiting for the reply

Date : 10 June 2019

 * Till Now
 * checking for the different techinique available for activating the gpio and as the resources available are a bit old so i have to find out resources from different place to make it work
 * digging deep into the datasheet in understanding the how the pins are getting activated through the pasm code
 * Blocker
 * same as above still no success on acquiring the pins

Date : 11 June 2019
/sys/devices/bone_capemgr.*/slots in the recent kernel version
 * Till Now
 * the mail received by the refernce to the derek molloy lecture in which he taught about the device tree understanding, compiling.
 * but it was for the kernel 3.8 and their is no folder named
 * Blocker
 * able to change the file but the effect are visible on the board

Date : 12-13 June 2019

 * Till Now

/boot/dtbs/4.14.71-ti-r80/am335x-boneblack.dts and changing the file gives no effect on the board .so, to eliminate any error of possibility i shifted to the Black Rev C .As given in the guide http://www.ofitselfso.com/BeagleNotes/AboutTheDeviceTree.pdf
 * some how able to change and understand how the device tree work and the procedure to activate according to the previous kernel
 * But to eliminate any error of possibility i shifted to beaglebone black Rev C .As many site give their preference to change the device tree located in the folder /file
 * Repeat the example that studied earlier in hope that pru pins start working
 * not much work done in this day other than this.

Date : 14 June 2019
lbco r0, CPRUCFG, 4, 4  // read SYSCFG clr r0.t4               // clear SYSCFG[STANDBY_INIT] sbco r0, CPRUCFG, 4, 4  // enable OCP master port; SET r30, r30, 15 CLR r30, r30, 15 - as r30 register means it is an output register in which their is no listing of p8_13 port if i take the reference from the page : https://elinux.org/Ti_AM33XX_PRUSSv2#Beaglebone_PRU_connections_and_modes - and if go through the command it means that it is manipulating P8_15 as given in the table. But the P8_13 pin is activated not that pin p8_15 which should be activated according the reference information /lib/firmware
 * Till Now
 * while searching on the internet came acrooss a code which seems to be working. Through it doesnot have documentation but it is understandable excepts for few code https://gist.github.com/jianingy/b144c9f70ae059a734fe5d49cb99cd30
 * for the first time i was able to activate the gpio no p8_13 by under stand the code. And the few thing that i learnt that
 * 1) first enable ocp master port mode a
 * 2) then make changes to device tree in according to that
 * 3) make the output enable for the pin
 * Blocker
 * still not able to understand the following line on the above link (line 43,53)
 * Blocker
 * To test these code started to make my own set of activated pins in the device tree in the folder

Date : 15 June 2019

 * Till Now
 * making the device tree for the program but the problem is that pin available from the pru is scatted as pins are their but some give functionality of both input and output is less.
 * https://gist.github.com/pranav083/263142be5e0480025b2f7cd2a78ed631 here is the done work till now
 * Note: the above stated pins are now for demonstration reference purpose only. Just testing the derek molloy style of activating the ports of pru through the device tree.
 * But the problem that still remains that how the p8_15 will activated as previous day guide shows that p8_13 can be controlled with register r30 and bit no. 15.
 * made a little commit to my working directory on github.
 * Blocker
 * will raise the concern with my mentor about this and the project is going on slow speed i want to make the things a little bit fast.

Date : 16 June 2019

 * Till Now
 * My previous problem got solved regarding the p8_13 header pins. Its came out that the pin available is basically memory mapped and their is no need of line 43 and 53 as stated in the page link https://gist.github.com/jianingy/b144c9f70ae059a734fe5d49cb99cd30 listed on 14 june 2019 on the.
 * Able to create devive tree file (*.dtbo) and also able to make changes in according that in the assembly code mainly working on the mode 7 of pin for now.hc
 * Now finally working on making assembly code for swift register 74hc595 now.

Date : 17-18 June 2019

 * Till Now
 * testing different techniques in which i can use the shift register
 * waiting for the response from the mentor about the further progress of the project
 * made the youtube video of the progress video at https://www.youtube.com/watch?v=yTIs10-VrbM
 * committed the code on git : https://github.com/pranav083/pocket_beagle-work/tree/master/1.shift/bb_black
 * the code for the link : https://gist.github.com/pranav083/5e666ff1b78cfe28f2073b420f2511e0
 * Blocker
 * waiting for suggestion from the mentor about the project further development

Date : 19 June 2019

 * Till Now
 * As told by @ds2 made the table of pin that i had used in the during the working of shift register 74hc595. Through he did not recommend using mode 7 of the board as it is directly connected the ARM processor
 * Some suggestion is given by @abhishek_ on the pin mux and device tree overlay file
 * regarding wave(timing) of register diagram its is suggested by @hendersa to use https://wavedrom.com
 * blocker
 * still not clear how to move further running the suggestion given by @abhishek still no success on accessing the pins using the pru
 * their is confussion regarding the device tree overlay to me i think.

Date : 20 June 2019

 * Till Now
 * made the timing diagram of 74hc595 shift register : https://github.com/pranav083/pocket_beagle-work/tree/master/1.shift/bb_black
 * the dtsi file generated by the dev.ti.com is not working with as it is returring error to the file while compiling
 * error of the gist file : https://gist.github.com/pranav083/fe3916cd4a97e8b9a823d82c82458d82
 * waiting for mentor to reply I think i should discuss to move towards the kernel development and after the ic 74hc299 get arrived. then i should shift try the pru thing then also
 * Blocker
 * waiting for ic to be shipped
 * pru is not getting programmed by me and the pin mux info in site is confusing as :http://pinmux.tking.org/index.html as p8_15 pin shows pru0_r30_15 but i didinot find this working on the pin p8_15