C++ GPIO seg fault on Rock64 using Pine64-CPP
#1
I'm trying to run the example.cpp that comes with Pine64-CPP from https://github.com/databit/Pine64-CPP

I am throwing segmentation faults when I run.
 
Initializationsucceeds:
The man-setup() call initialzes the board.  I traced the success path to the following if statement in the setup() function in gpio.cpp
    if((uint64_t)gpio_mem % PAGE_SIZE)
And I also traced the successful  "this->gpioMap =" statement to the one that uses SUNXI_GPIO_BASE
    
In the example code, I initialize the pin with
   man->pinMode (PI_GPIO_24, OUTPUT);
 
The pinMode function in gpio.cpp, launches _setPullupdn with gpio=78 and pud = 1.  As expected
Inside _setPullupdn,  the following is set
     bank= 2
     index = 0
    offset = 28
 
The segmentation fault seems to come from this line in gpio.c
   regval = *(&pio->PULL[0] + index);
 
I have a 4 GB Rock64 running armbian bionic desktop from https://www.armbian.com/rock64/
 
sudo cat /sys/kernel/debug/gpio   gives me

GPIOs 0-31, platform/pinctrl, gpio0:
 gpio-0   (                    |vcc_host_5v         ) out hi    
 gpio-2   (                    |?                   ) out lo    
 gpio-30  (                    |vcc_sd              ) out lo    
 
GPIOs 32-63, platform/pinctrl, gpio1:
 gpio-50  (                    |mdio-reset          ) out hi  
 
GPIOs 64-95, platform/pinctrl, gpio2:
 
GPIOs 96-127, platform/pinctrl, gpio3:
 
GPIOs 510-511, platform/rk8xx-gpio, rk8xx-gpio, can sleep:
 gpio-510 (                    |?                   ) out lo    
 gpio-511 (                    |?                   ) out lo   
 
 
Anyone have any thoughts?
Thanks.
#2
So, I never resolved the problems with the Pine64-CPP library but I found an alternate. 

First, I used bash scripts to make sure the Rock64 was working, and I had the right pin addresses.
       https://github.com/Leapo/Rock64-BashGPIO

I used the table table from this website to correctly identify the gpio indices.
        https://github.com/Leapo/Rock64-R64.GPIO...GPIO-Modes
        I used the items from the column lableled GPIO# (ROCK)

Lastly, I used the GPIO Class from the following. 
Even though it is was created for the Raspberry Pi, I found that it correctly manipulated the files in /sys/class/gpio on my Rock64.
      https://github.com/halherta/RaspberryPi-GPIOClass-v2

Note: I have only tested the GPIO read function, since that is what I'm trying to do for my project.

Edit 2/20/19
The GPIO Class approach only worked in C++.  For a C version, I used the sysfs code from this site:
     https://elinux.org/RPi_GPIO_Code_Samples
However, to use the Rock64 GPIO assignments from 100 to 103, I needed to change #define BUFFER_MAX 3 to #define BUFFER_MAX 4. 
This may break things for two digit GPIO assignments.  I didn't really test that


Possibly Related Threads…
Thread Author Replies Views Last Post
  Disable MicroSD reader for extra GPIO mxruben 0 332 07-27-2024, 10:08 PM
Last Post: mxruben
  Rock64 No Audio @ Debian 12 dmitrymyadzelets 2 1,145 04-08-2024, 06:47 AM
Last Post: dmitrymyadzelets
  OpenWRT on the Rock64 CanadianBacon 14 10,994 04-03-2024, 08:48 AM
Last Post: helpmerock
  Rock64 bricked shawwwn 7 7,068 03-17-2024, 12:22 PM
Last Post: dmitrymyadzelets
  Rock64 won't boot luminosity7 10 6,141 03-16-2024, 08:33 AM
Last Post: dmitrymyadzelets
  Rock64 doesn't boot dstallmo 1 760 03-16-2024, 08:29 AM
Last Post: dmitrymyadzelets
  How well does Rock64 deal with HDR and Atmos on Kodi? drvlikhell 3 2,767 04-29-2023, 04:24 AM
Last Post: newestssd
  Rock64 board not working, no HDMI no Ethernet. EDited 3 4,293 01-17-2023, 02:31 PM
Last Post: Flagtrax
  ROCK64 v3 can it boot from USB? Tsagualsa 4 3,021 11-29-2022, 11:31 AM
Last Post: Macgyver
  rock64 v3 spiflash Macgyver 0 1,072 11-28-2022, 02:18 PM
Last Post: Macgyver

Forum Jump:


Users browsing this thread: 1 Guest(s)