Please enable javascript, or click here to visit my ecommerce web site powered by Shopify.
Jump to: navigation, search

Difference between revisions of "RockpiS/dev/libmraa"

< RockpiS‎ | dev
(Install essential packages: Added "install compiler" since gcc is not preinstalled in the March 2020 image)
(17 intermediate revisions by 3 users not shown)
Line 11: Line 11:
 
==== Install essential packages ====
 
==== Install essential packages ====
  
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.
+
Package libmraa is in the Radxa APT bionic-stable and buster-stable repositories.
  
 
Execute the following commands to add Radxa APT
 
Execute the following commands to add Radxa APT
  
  rock@rockpis:~$ export DISTRO=bionic-testing     # for Bionic
+
  rock@rockpis:~$ export DISTRO=bionic-stable     # for Bionic
  
 
or
 
or
  
  rock@rockpis:~$ export DISTRO=buster-testing     # for Buster
+
  rock@rockpis:~$ export DISTRO=buster-stable     # for Buster
 
  rock@rockpis:~$ echo "deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main" | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list
 
  rock@rockpis:~$ echo "deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main" | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list
  
Line 31: Line 31:
 
  rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: >=0.4
 
  rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: >=0.4
 
  rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: >= 4.4.143-47
 
  rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: >= 4.4.143-47
 +
 +
Install compiler:
 +
rock@rockpis:~$ sudo apt install -y build-essential
  
 
==== Enable interface ====
 
==== Enable interface ====
Line 85: Line 88:
 
     PIN26      ADC_IN0          //the measure voltage must lower than 1.8v
 
     PIN26      ADC_IN0          //the measure voltage must lower than 1.8v
  
For those ROCK Pi S system images released after March 1st, 2020, to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c3''' and so overlays=, need to follow [https://wiki.radxa.com/Device-tree-overlays Device tree overlays].
+
For those ROCK Pi S system images released after March 1st, 2020, the configuration file is /boot/uEnv.txt. For more details, follow this guide, [https://wiki.radxa.com/Device-tree-overlays Device tree overlays].
  
For those ROCK Pi S system images released before March 1st, 2020, modify '''/boot/uEnv.txt''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c3''' for test.
+
For those ROCK Pi S system images released before March 1st, 2020, the configuration file is /boot/hw_intfc.conf.
 
+
<pre>
+
rock@rockpis:~$ cat /boot/uEnv.txt
+
verbosity=7
+
overlay_prefix=rockchip
+
rootfstype=ext4
+
fdtfile=rockchip/rk3308-rock-pi-s.dtb
+
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3
+
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848
+
initrdsize=0x64d1d4
+
kernelversion=4.4.143-47-rockchip-g495ff574976c
+
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c
+
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c
+
</pre>
+
  
 
==== Test ====
 
==== Test ====
Line 113: Line 102:
 
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.
 
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.
  
===== test gpio =====
+
===== GPIO test =====
  
 
Use '''mraa-gpio tool''' to test
 
Use '''mraa-gpio tool''' to test
  
    root@rockpis:~# mraa-gpio list
+
root@rockpis:~# mraa-gpio list
    01        3V3:  
+
01        3V3:  
    02          5V:  
+
02          5V:  
    03    I2C_SDA: GPIO I2C   
+
03    I2C_SDA: GPIO I2C   
    04          5V:  
+
04          5V:  
    05    I2C_SCL: GPIO I2C   
+
05    I2C_SCL: GPIO I2C   
    06        GND:  
+
06        GND:  
    07 I2S0_8CH_MC: GPIO  
+
07 I2S0_8CH_MC: GPIO  
    08    UART0_TX: GPIO UART  
+
08    UART0_TX: GPIO UART  
    09        GND:  
+
09        GND:  
    10    UART0_RX: GPIO UART  
+
10    UART0_RX: GPIO UART  
    11 PWM2,I2C3_S: GPIO I2C  PWM   
+
11 PWM2,I2C3_S: GPIO I2C  PWM   
    12 I2S0_8CH_SC: GPIO  
+
12 I2S0_8CH_SC: GPIO  
    13 PWM3,I2C3_S: GPIO I2C  PWM   
+
13 PWM3,I2C3_S: GPIO I2C  PWM   
    14        GND:  
+
14        GND:  
    15    SPDIF_TX: GPIO  
+
15    SPDIF_TX: GPIO  
    16 I2S0_8CH_SD: GPIO  
+
16 I2S0_8CH_SD: GPIO  
    17        3V3:  
+
17        3V3:  
    18 I2S0_8CH_SD: GPIO  
+
18 I2S0_8CH_SD: GPIO  
    19 UART1_RTSN,: GPIO SPI  UART  
+
19 UART1_RTSN,: GPIO SPI  UART  
    20        GND:  
+
20        GND:  
    21 UART1_CTSN,: GPIO SPI  UART  
+
21 UART1_CTSN,: GPIO SPI  UART  
    22 I2S0_8CH_LR: GPIO  
+
22 I2S0_8CH_LR: GPIO  
    23 UART1_RX,I2: GPIO I2C  SPI  UART  
+
23 UART1_RX,I2: GPIO I2C  SPI  UART  
    24 UART1_TX,I2: GPIO I2C  SPI  UART  
+
24 UART1_TX,I2: GPIO I2C  SPI  UART  
    25        GND:  
+
25        GND:  
    26    ADC_IN0: AIO  
+
26    ADC_IN0: AIO  
    root@rockpis:~# mraa-gpio set 15 1          #pin15 pull high
+
root@rockpis:~# mraa-gpio set 15 1          #pin15 pull high
    root@rockpis:~# mraa-gpio set 15 0          #pin15 pull high
+
root@rockpis:~# mraa-gpio set 15 0          #pin15 pull high
  
 
===== PWM test =====
 
===== PWM test =====
Line 182: Line 171:
  
 
===== I2C test =====
 
===== I2C test =====
ROCK Pi S V1.2 provides 3 I2C,There are  I2C0 ,I2C1, I2C3. If you need the I2C function, you can turn on one or more of them。
+
ROCK Pi S V1.2 provides 3 I2C,There are  I2C0 ,I2C1, I2C3. If you need the I2C function, you can turn on one or more of them.
  
 
Firstly, modify the /boot/uEnv.txt file to add the following
 
Firstly, modify the /boot/uEnv.txt file to add the following
Line 200: Line 189:
 
We use  MPU6050 tets i2c.
 
We use  MPU6050 tets i2c.
 
Modify the macro  MPU6050 in '''/home/rock/mraa-examples/i2c_mpu6050.c''' ,as follows to test I2C0. To test I2C1 and I2C3, change '''#define I2C_BUS 0''' to '''#define I2C_BUS 1'''  or'''#define I2C_BUS 3''' .
 
Modify the macro  MPU6050 in '''/home/rock/mraa-examples/i2c_mpu6050.c''' ,as follows to test I2C0. To test I2C1 and I2C3, change '''#define I2C_BUS 0''' to '''#define I2C_BUS 1'''  or'''#define I2C_BUS 3''' .
   
+
Run the compiled file
+
  /* mraa header */
 +
  #include "mraa/i2c.h"
 +
  '''#define I2C_BUS 0'''
 +
 
 +
Save and compile pwm.c
 +
rock@rockpis:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa
 
  rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050
 
  rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050
 
  accel: x:0 y:0 z:0
 
  accel: x:0 y:0 z:0
Line 219: Line 213:
  
 
===== UART test =====
 
===== UART test =====
 +
ROCK Pi S V1.2 provides 3 UART,There are  '''uart0''' ,'''uart1''', '''uart2'''. If you need the uatr function, you can turn on one or more of them.
 +
 +
Firstly, Disable console and enable '''uart0''' for uart test.modify the '''/boot/uEnv.txt''' file to add the following
 +
 +
root@rockpis:~# cat /boot/uEnv.txt
 +
verbosity=7
 +
overlay_prefix=rockchip
 +
rootfstype=ext4
 +
fdtfile=rockchip/rk3308-rock-pi-s.dtb
 +
'''overlays=rk3308-uart0 rk3308-uart1 rk3308-uart2'''
 +
'''console='''
 +
rootuuid=c3800af9-fa58-4fb3-bb56-e52fd04837ba
 +
initrdsize=0x5c96c3
 +
kernelversion=4.4.143-47-rockchip-g495ff574976c
 +
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c
 +
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c
 +
 +
Here set console to NULL value.
 +
 +
then reboot . use ssh connect to rockpis,we must have 2 windows,one is for send data,anothor is for receive.
 +
 +
send command follow:
 +
rock@rockpis:~$ sudo mraa-uart dev 0 baud 1500000 send  radxa
 +
 +
Another window sets the baud  1500000 and receives the data
 +
 +
radxa
 +
 +
receive command follow:
 +
rock@rockpis:~$ sudo mraa-uart dev 0 baud 1500000 recv  1000
 +
radxa
  
 
===== SPI test =====
 
===== SPI test =====
Line 241: Line 266:
 
Create file test-spi.c and add the following contents.
 
Create file test-spi.c and add the following contents.
  
  rock@rockpis:~/mraa-examples$ cat test-spi.c  
+
rock@rockpis:~/mraa-examples$ cat test-spi.c  
  #include <signal.h>
+
#include <signal.h>
  #include <stdlib.h>
+
#include <stdlib.h>
  #include <unistd.h>
+
#include <unistd.h>
 
+
  /* mraa header */
+
/* mraa header */
  #include "mraa/spi.h"
+
#include "mraa/spi.h"
 
+
  /* SPI declaration */
+
/* SPI declaration */
  '''#define SPI_BUS 2'''
+
'''#define SPI_BUS 2'''
 
+
  /* SPI frequency in Hz */
+
/* SPI frequency in Hz */
  #define SPI_FREQ 10000000
+
#define SPI_FREQ 10000000
  int
+
int
  main(int argc, char** argv)
+
main(int argc, char** argv)
  {
+
{
      mraa_result_t status = MRAA_SUCCESS;
+
    mraa_result_t status = MRAA_SUCCESS;
      mraa_spi_context spi;
+
    mraa_spi_context spi;
      int i, j;
+
    int i, j;
 
+
      /* initialize mraa for the platform (not needed most of the times) */
+
    /* initialize mraa for the platform (not needed most of the times) */
      mraa_init();
+
    mraa_init();
 
+
      //! [Interesting]
+
    //! [Interesting]
      /* initialize SPI bus */
+
    /* initialize SPI bus */
      spi = mraa_spi_init(SPI_BUS);
+
    spi = mraa_spi_init(SPI_BUS);
      if (spi == NULL) {
+
    if (spi == NULL) {
          fprintf(stderr, "Failed to initialize SPI\n");
+
        fprintf(stderr, "Failed to initialize SPI\n");
          mraa_deinit();
+
        mraa_deinit();
          return EXIT_FAILURE;
+
        return EXIT_FAILURE;
      }
+
    }
 
+
      /* set SPI frequency */
+
    /* set SPI frequency */
      status = mraa_spi_frequency(spi, SPI_FREQ);
+
    status = mraa_spi_frequency(spi, SPI_FREQ);
      if (status != MRAA_SUCCESS)
+
    if (status != MRAA_SUCCESS)
          goto err_exit;
+
        goto err_exit;
 
+
      /* set big endian mode */
+
    /* set big endian mode */
      status = mraa_spi_lsbmode(spi, 0);
+
    status = mraa_spi_lsbmode(spi, 0);
      if (status != MRAA_SUCCESS) {
+
    if (status != MRAA_SUCCESS) {
          goto err_exit;
+
        goto err_exit;
      }
+
    }
     
+
   
      j = 10;
+
    j = 10;
      while(j) {
+
    while(j) {
    j--;
+
  j--;
          printf("0x%x\n",mraa_spi_write(spi, 0xaa));
+
        printf("0x%x\n",mraa_spi_write(spi, 0xaa));
      }
+
    }
  err_exit:
+
err_exit:
      mraa_result_print(status);
+
    mraa_result_print(status);
 
+
      /* stop spi */
+
    /* stop spi */
      mraa_spi_stop(spi);
+
    mraa_spi_stop(spi);
 
+
      /* deinitialize mraa for the platform (not needed most of the times) */
+
    /* deinitialize mraa for the platform (not needed most of the times) */
      mraa_deinit();
+
    mraa_deinit();
 
+
        return EXIT_FAILURE;
+
      return EXIT_FAILURE;
  }
+
}
  rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa
+
rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa
  
 
Then short pin19 and pin21 and run  test-spi
 
Then short pin19 and pin21 and run  test-spi
Line 322: Line 347:
  
 
<pre>
 
<pre>
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa
+
rock@rockpis:~/mraa-examples$ gcc -o aio aio.c -lmraa
 
rock@rockpis:~/mraa-examples$ sudo ./aio
 
rock@rockpis:~/mraa-examples$ sudo ./aio
 
ADC A0 read 1A5 - 421
 
ADC A0 read 1A5 - 421

Revision as of 08:24, 12 May 2020

    ROCK Pi S >  Development >  Install Libmraa 

Libmraa on ROCK Pi S

This guide describes how to use libmraa on ROCK Pi S.

Install essential packages

Package libmraa is in the Radxa APT bionic-stable and buster-stable repositories.

Execute the following commands to add Radxa APT

rock@rockpis:~$ export DISTRO=bionic-stable      # for Bionic

or

rock@rockpis:~$ export DISTRO=buster-stable      # for Buster
rock@rockpis:~$ echo "deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main" | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list

Get the pub key

rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -

Install essential packages:

rock@rockpis:~$ sudo apt-get update
rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: >=0.4
rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: >= 4.4.143-47

Install compiler:

rock@rockpis:~$ sudo apt install -y build-essential

Enable interface

See ROCK Pi S GPIO pintout. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:

Hardware V12

16 GPIO:

   PIN03      GPIO2_A2
   PIN05      GPIO2_B0
   PIN07      GPIO2_B3
   PIN09      GPIO4_C4
   PIN11      GPIO4_C2
   PIN12      GPIO4_A3
   PIN13      GPIO4_C6
   PIN15      GPIO4_C5
   PIN16      GPIO4_D2
   PIN18      GPIO4_D4
   PIN19      GPIO1_B0
   PIN21      GPIO1_A7
   PIN22      GPIO4_D5
   PIN23      GPIO1_B1
   PIN24      GPIO1_B2
   PIN26      GPIO1_B2

3 I2C:

   PIN23      I2C0_SDA
   PIN24      I2C0_SCL
   PIN3       I2C1_SCL
   PIN5       I2C1_SDA
   PIN13      I2C3_SDA
   PIN15      I2C3_SCL
  

1 SPI:

   PIN19      SPI2TX        //must disable i2c0
   PIN21      SPI2RX        //must disable i2c0
   PIN23      SPI2CLK
   PIN24      SPI2CSN

3 UART:

   PIN8       UART0_TX
   PIN10      UART0_RX
   PIN23      UART1_TX
   PIN24      UART1_RX
   PIN19      UART2_RX
   PIN21      UART2_TX

2 PWM:

   PIN11      PWM2
   PIN13      PWM3

1 ADC:

   PIN26      ADC_IN0          //the measure voltage must lower than 1.8v

For those ROCK Pi S system images released after March 1st, 2020, the configuration file is /boot/uEnv.txt. For more details, follow this guide, Device tree overlays.

For those ROCK Pi S system images released before March 1st, 2020, the configuration file is /boot/hw_intfc.conf.

Test

Package libmraa provides some examples for testing spi, uart, i2c, gpio, etc. We way use the c files in /usr/local/share/mraa/examples/c.

And we copy them to home directory.

rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples

You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.

GPIO test

Use mraa-gpio tool to test

root@rockpis:~# mraa-gpio list
01         3V3: 
02          5V: 
03     I2C_SDA: GPIO I2C  
04          5V: 
05     I2C_SCL: GPIO I2C  
06         GND: 
07 I2S0_8CH_MC: GPIO 
08    UART0_TX: GPIO UART 
09         GND: 
10    UART0_RX: GPIO UART 
11 PWM2,I2C3_S: GPIO I2C  PWM  
12 I2S0_8CH_SC: GPIO 
13 PWM3,I2C3_S: GPIO I2C  PWM  
14         GND: 
15    SPDIF_TX: GPIO 
16 I2S0_8CH_SD: GPIO 
17         3V3: 
18 I2S0_8CH_SD: GPIO 
19 UART1_RTSN,: GPIO SPI  UART 
20         GND: 
21 UART1_CTSN,: GPIO SPI  UART 
22 I2S0_8CH_LR: GPIO 
23 UART1_RX,I2: GPIO I2C  SPI  UART 
24 UART1_TX,I2: GPIO I2C  SPI  UART 
25         GND: 
26     ADC_IN0: AIO 
root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high
root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high
PWM test

ROCK Pi S V1.2 provides 2 PWM, PWM2 and PWM3. It is necessary to enable PWM1, PWM2 and PWM3 at the same time if you need PWM function.

Firstly, modify the /boot/uEnv.txt file to add the following

root@rockpis:~# cat /boot/uEnv.txt
verbosity=7
overlay_prefix=rockchip
rootfstype=ext4
fdtfile=rockchip/rk3308-rock-pi-s.dtb
overlays=rk3308-console-on-uart0 rk3308-pwm1 rk3308-pwm2 rk3308-pwm3
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848
initrdsize=0x64d1d4
kernelversion=4.4.143-47-rockchip-g495ff574976c
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c


Modify the macro PWM in /home/rock/mraa-examples/pwm.c as follows to test PWM2. To test PWM3, change #define PWM 11 to #define PWM 13.

/* PWM declaration */
#define PWM 11

Save and compile pwm.c

rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa
rock@rockpis:~/mraa-examples$ sudo ./pwm 
PWM value is 0.010015
PWM value is 0.019985
PWM value is 0.030000
PWM value is 0.040014
PWM value is 0.049984
PWM value is 0.059999
I2C test

ROCK Pi S V1.2 provides 3 I2C,There are I2C0 ,I2C1, I2C3. If you need the I2C function, you can turn on one or more of them.

Firstly, modify the /boot/uEnv.txt file to add the following

root@rockpis:~# cat /boot/uEnv.txt
verbosity=7
overlay_prefix=rockchip
rootfstype=ext4
fdtfile=rockchip/rk3308-rock-pi-s.dtb
overlays=rk3308-console-on-uart0  rk3308-i2c0 rk3308-i2c1 rk3308-i2c3
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848
initrdsize=0x64d1d4
kernelversion=4.4.143-47-rockchip-g495ff574976c
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c

We use MPU6050 tets i2c. Modify the macro MPU6050 in /home/rock/mraa-examples/i2c_mpu6050.c ,as follows to test I2C0. To test I2C1 and I2C3, change #define I2C_BUS 0 to #define I2C_BUS 1 or#define I2C_BUS 3 .

  /* mraa header */
  #include "mraa/i2c.h"
  #define I2C_BUS 0
  

Save and compile pwm.c

rock@rockpis:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa
rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050
accel: x:0 y:0 z:0
gyro: x:-10 y:1 z:7
  
accel: x:0 y:0 z:0
gyro: x:107 y:-12 z:69
   
accel: x:0 y:0 z:0
gyro: x:6 y:136 z:-50
   
accel: x:0 y:0 z:0
gyro: x:-5 y:48 z:-103
     
accel: x:0 y:0 z:0
gyro: x:3 y:3 z:5
UART test

ROCK Pi S V1.2 provides 3 UART,There are uart0 ,uart1, uart2. If you need the uatr function, you can turn on one or more of them.

Firstly, Disable console and enable uart0 for uart test.modify the /boot/uEnv.txt file to add the following

root@rockpis:~# cat /boot/uEnv.txt 
verbosity=7
overlay_prefix=rockchip
rootfstype=ext4
fdtfile=rockchip/rk3308-rock-pi-s.dtb
overlays=rk3308-uart0 rk3308-uart1 rk3308-uart2
console=
rootuuid=c3800af9-fa58-4fb3-bb56-e52fd04837ba
initrdsize=0x5c96c3
kernelversion=4.4.143-47-rockchip-g495ff574976c
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c

Here set console to NULL value.

then reboot . use ssh connect to rockpis,we must have 2 windows,one is for send data,anothor is for receive.

send command follow:

rock@rockpis:~$ sudo mraa-uart dev 0 baud 1500000 send  radxa

Another window sets the baud 1500000 and receives the data

radxa

receive command follow:

rock@rockpis:~$ sudo mraa-uart dev 0 baud 1500000 recv  1000
radxa
SPI test

Firstly, modify the /boot/uEnv.txt file.

root@rockpis:~# cat /boot/uEnv.txt
verbosity=7
overlay_prefix=rockchip
rootfstype=ext4
fdtfile=rockchip/rk3308-rock-pi-s.dtb
overlays=rk3308-console-on-uart0 rk3308-spi-spidev
param_spidev_spi_bus=2
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848
initrdsize=0x64d1d4
kernelversion=4.4.143-47-rockchip-g495ff574976c
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c

then execute command, sync, followed by reboot.

Create file test-spi.c and add the following contents.

rock@rockpis:~/mraa-examples$ cat test-spi.c 
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>

/* mraa header */
#include "mraa/spi.h"

/* SPI declaration */
#define SPI_BUS 2

/* SPI frequency in Hz */
#define SPI_FREQ 10000000
int
main(int argc, char** argv)
{
    mraa_result_t status = MRAA_SUCCESS;
    mraa_spi_context spi;
    int i, j;

    /* initialize mraa for the platform (not needed most of the times) */
    mraa_init();

    //! [Interesting]
    /* initialize SPI bus */
    spi = mraa_spi_init(SPI_BUS);
    if (spi == NULL) {
        fprintf(stderr, "Failed to initialize SPI\n");
        mraa_deinit();
        return EXIT_FAILURE;
    }

    /* set SPI frequency */
    status = mraa_spi_frequency(spi, SPI_FREQ);
    if (status != MRAA_SUCCESS)
        goto err_exit;

    /* set big endian mode */
    status = mraa_spi_lsbmode(spi, 0);
    if (status != MRAA_SUCCESS) {
        goto err_exit;
    }
   
    j = 10;
    while(j) {
  	j--;
        printf("0x%x\n",mraa_spi_write(spi, 0xaa));
    }
err_exit:
    mraa_result_print(status);

    /* stop spi */
    mraa_spi_stop(spi);

    /* deinitialize mraa for the platform (not needed most of the times) */
    mraa_deinit();

     return EXIT_FAILURE;
}
rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa

Then short pin19 and pin21 and run test-spi

rock@rockpis:~/mraa-examples$ sudo ./test-spi 
0xaa
0xaa
0xaa
0xaa
0xaa
0xaa
0xaa
0xaa
0xaa
0xaa
MRAA: SUCCESS
ADC test

connect signal you want to measure, and then compile mraa example c file, aio.c, to test.

rock@rockpis:~/mraa-examples$ gcc -o aio aio.c -lmraa
rock@rockpis:~/mraa-examples$ sudo ./aio
ADC A0 read 1A5 - 421
ADC A0 read float - 0.41153
ADC A0 read 1A5 - 421
ADC A0 read float - 0.41153
ADC A0 read 1A5 - 421
ADC A0 read float - 0.41153
ADC A0 read 1A5 - 421
ADC A0 read float - 0.41153

Development

More introduction of libmraa can look at libmraa official website.

Troubleshooting