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

Difference between revisions of "Zero/dev/libmraa"

< Zero‎ | dev
(Created page with "{{Zero_header}} {{Languages|zero/dev/libmraa}} Radxa Zero > Development Guide > Install Libmraa === Libmraa on Radxa Zero...")
 
Line 8: Line 8:
  
 
This guide describes how to use libmraa on Radxa Zero.
 
This guide describes how to use libmraa on Radxa Zero.
 +
==== Requirement ====
 +
* Radxa Zero board
 +
* The newest image in https://github.com/radxa/radxa-zero-images-released/releases
 +
 +
==== Install essential packages ====
 +
 +
Package libmraa is in the Radxa APT focal-stable and buster-stable repositories.
 +
 +
Execute the following commands to add Radxa APT
 +
 +
rock@zero:~$ export DISTRO=focal-stable      # for Focal
 +
 +
or
 +
 +
rock@zero:~$ export DISTRO=buster-stable      # for Buster
 +
rock@zero:~$ 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@zero:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -
 +
 +
Install essential packages:
 +
 +
rock@zero:~$ sudo apt-get update
 +
rock@zero:~$ sudo apt-get install -y rockchip-overlay libmraa
 +
 +
Install compiler:
 +
rock@zero:~$ sudo apt install -y build-essential
 +
 +
==== Enable interface ====
 +
 +
See Radxa Zero [[Zero/hardware/gpio | GPIO pintout]]. Radxa Zero has a 40-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below: 
 +
23 GPIO:
 +
    PIN03      GPIOA_14
 +
    PIN05      GPIOA_15
 +
    PIN07      GPIOAO_3
 +
    PIN08      GPIOAO_0
 +
    PIN10      GPIOAO_1
 +
    PIN11      GPIOAO_2
 +
    PIN12      GPIOX_9
 +
    PIN13      GPIOX_11
 +
    PIN16      GPIOX_10
 +
    PIN18      GPIOX_8
 +
    PIN19      GPIOH_4
 +
    PIN21      GPIOH_5
 +
    PIN22      GPIOC_7      //Not supported gpio funtion now
 +
    PIN23      GPIOH_7
 +
    PIN24      GPIOH_6
 +
    PIN27      GPIOAO_3
 +
    PIN28      GPIOAO_2
 +
    PIN32      GPIOAO_4
 +
    PIN35      GPIOAO_8
 +
    PIN36      GPIOH_8
 +
    PIN37      GPIOAO_9
 +
    PIN38      GPIOAO_10
 +
    PIN40      GPIOAO_11
 +
 +
3 I2C:
 +
    PIN23      I2C'''1'''_SCL
 +
    PIN24      I2C'''1'''_SDA
 +
    PIN13      I2C'''1'''_SCL
 +
    PIN16      I2C'''1'''_SDA    //these are two i2c-1, only one can be opened when using
 +
    PIN3      I2C'''3'''_SDA
 +
    PIN5      I2C'''3'''_SCL
 +
    PIN7      I2C'''4'''_SDA
 +
    PIN11      I2C'''4'''_SCL
 +
    PIN27      I2C'''4'''_SDA
 +
    PIN28      I2C'''4'''_SCL  ///these are two i2c-4, only one can be opened when using
 +
 
 +
2 SPI: pwm_c
 +
    PIN12      SPI'''0'''RX        //must disable i2c1 uart1 pwm_c
 +
    PIN13      SPI'''0'''CLK
 +
    PIN16      SPI'''0'''CSN
 +
    PIN18      SPI'''0'''TX
 +
    PIN19      SPI'''1'''TX        //must disable i2c1 uart4
 +
    PIN21      SPI'''1'''RX       
 +
    PIN23      SPI'''1'''CLK
 +
    PIN24      SPI'''1'''CSN
 +
 +
3 UART:
 +
    PIN8      UART'''0'''_TX   
 +
    PIN10      UART'''0'''_RX
 +
    PIN7      UART'''1'''_RX    //must disable i2c4
 +
    PIN11      UART'''1'''_TX
 +
    PIN27      UART'''1'''_RX
 +
    PIN28      UART'''1'''_TX   
 +
    PIN23      UART'''4'''_TX    //must disable i2c1 spi1
 +
    PIN24      UART'''4'''_RX
 +
 +
2 PWM:
 +
    PIN18      PWM'''18'''
 +
    PIN40      PWM'''40'''
 +
 +
For those Radxa Zero system images released, the configuration file is /boot/uEnv.txt. For more details, follow this guide, [https://wiki.radxa.com/Device-tree-overlays Device tree overlays].
 +
 +
==== 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@zero:~$ 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_EE_M3_S: GPIO I2C 
 +
04          5V:
 +
05 I2C_EE_M3_S: GPIO I2C 
 +
06        GND:
 +
07 I2C_AO_M0_S: GPIO I2C  UART
 +
08 UART_AO_A_T: GPIO UART
 +
09        GND:
 +
10 UART_AO_A_R: GPIO UART
 +
11 I2C_AO_M0_S: GPIO I2C  UART
 +
12  SPI_A_MISO: GPIO SPI 
 +
13 I2C_EE_M1_S: GPIO I2C  SPI 
 +
14        GND:
 +
15  SARADC_CH1:
 +
16 I2C_EE_M1_S: GPIO I2C  SPI 
 +
17        3V3:
 +
18 SPI_A_MOSI,: GPIO SPI  PWM 
 +
19  SPI_B_MOSI: GPIO SPI 
 +
20        GND:
 +
21  SPI_B_MISO: GPIO SPI 
 +
22    GPIOC_7: GPIO
 +
23 I2C_EE_M1_S: GPIO I2C  SPI  UART
 +
24 UART_EE_C_R: GPIO I2C  SPI  UART
 +
25        GND:
 +
26  SARADC_CH2:
 +
27 I2C_AO_M0_S: GPIO I2C  UART
 +
28 I2C_AO_M0_S: GPIO I2C  UART
 +
29          NC:
 +
30        GND:
 +
31          NC:
 +
32    GPIOAO_4: GPIO
 +
33          NC:
 +
34        GND:
 +
35 UART_AO_B_T: GPIO UART
 +
36    GPIOH_8: GPIO
 +
37 UART_AO_B_R: GPIO UART
 +
38  GPIOAO_10: GPIO
 +
39        GND:
 +
40    PWMAO_A: GPIO PWM 
 +
 +
root@rockpis:~# mraa-gpio set 40 1          #pin40 pull high
 +
root@rockpis:~# mraa-gpio set 40 0          #pin40 pull low
 +
 +
===== PWM test =====
 +
 +
Radxa Zero provides 2 PWM, PWM_C and PWMAO_A. It is necessary to enable then at the same time if you need PWM function.
 +
 +
Firstly, modify the /boot/uEnv.txt file to add the following.
 +
rock@zero:~$ cat /boot/uEnv.txt
 +
verbosity=7
 +
console=ttyAML0,115200
 +
overlay_prefix=meson
 +
rootfstype=ext4
 +
fdtfile=amlogic/meson-g12a-radxa-zero.dtb
 +
overlays=meson-g12a-uart-ao-a-on-gpioao-0-gpioao-1 meson-g12a-pwm-c-on-gpiox-8 meson-g12a-pwmao-a-on-gpioao-11
 +
rootuuid=bbe0631f-bbed-4033-8f75-fa5930deceed
 +
initrdsize=0xf1ee3e
 +
kernelversion=5.10.69-5-amlogic-gfeede6ac474e
 +
initrdimg=initrd.img-5.10.69-5-amlogic-gfeede6ac474e
 +
kernelimg=vmlinuz-5.10.69-5-amlogic-gfeede6ac474e
 +
 +
Modify the macro PWM in /home/rock/mraa-examples/pwm.c as follows to test PWM_C. To test PWMAO_A, change '''#define PWM 18''' to '''#define PWM 40'''.
 +
 +
'''/* PWM declaration */'''
 +
'''#define PWM 18'''
 +
 +
Save and compile pwm.c
 +
rock@zero:~/mraa-examples$ gcc -o pwm pwm.c -lmraa
 +
rock@zero:~/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 =====
 +
Radxa Zero provides 3 I2C,There are  I2C1 ,I2C3, I2C4.
 +
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
 +
rock@zero:~$ cat /boot/uEnv.txt
 +
verbosity=7
 +
console=ttyAML0,115200
 +
overlay_prefix=meson
 +
rootfstype=ext4
 +
fdtfile=amlogic/meson-g12a-radxa-zero.dtb
 +
overlays=meson-g12a-uart-ao-a-on-gpioao-0-gpioao-1 meson-g12a-i2c-ee-m1-gpioh-6-gpioh-7
 +
rootuuid=bbe0631f-bbed-4033-8f75-fa5930deceed
 +
initrdsize=0xf1ee3e
 +
kernelversion=5.10.69-5-amlogic-gfeede6ac474e
 +
initrdimg=initrd.img-5.10.69-5-amlogic-gfeede6ac474e
 +
kernelimg=vmlinuz-5.10.69-5-amlogic-gfeede6ac474e
 +
 +
We use  MPU6050 test i2c.
 +
Modify the macro  MPU6050 in '''/home/rock/mraa-examples/i2c_mpu6050.c''' ,as follows to test I2C1.
 +
 +
  /* mraa header */
 +
  #include "mraa/i2c.h"
 +
  '''#define I2C_BUS 0'''
 +
 
 +
rock@zero:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa
 +
rock@zero:~/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 =====
 +
Radxa Zero provides 3 UART,There are  '''uart0''' ,'''uart1''', '''uart4'''.
 +
If you need the uart 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
 +
rock@zero:~$ cat /boot/uEnv.txt
 +
verbosity=7
 +
console=ttyAML0,115200
 +
overlay_prefix=meson
 +
rootfstype=ext4
 +
fdtfile=amlogic/meson-g12a-radxa-zero.dtb
 +
overlays=meson-g12a-uart-ao-a-on-gpioao-0-gpioao-1 meson-g12a-uart-ao-b-on-gpioao-2-gpioao-3
 +
console=
 +
rootuuid=bbe0631f-bbed-4033-8f75-fa5930deceed
 +
initrdsize=0xf1ee3e
 +
kernelversion=5.10.69-5-amlogic-gfeede6ac474e
 +
initrdimg=initrd.img-5.10.69-5-amlogic-gfeede6ac474e
 +
kernelimg=vmlinuz-5.10.69-5-amlogic-gfeede6ac474e
 +
 +
Here set console to NULL value.
 +
then reboot . use '''ssh''' connect to zero,we must have '''2 windows''',one is for send data,anothor is receiver by serial com.
 +
 +
send command follow:
 +
rock@zero:~$ sudo mraa-uart '''dev 0''' baud 1500000 send  radxa
 +
 +
Another window sets the baud  1500000 and receives the data
 +
 +
radxa
 +
 +
receive command follow:
 +
rock@zero:~$ sudo mraa-uart '''dev 0''' baud 1500000 recv  1000
 +
radxa
 +
 +
===== SPI test =====
 +
 +
Firstly, modify the '''/boot/uEnv.txt''' file.
 +
rock@zero:~$ cat /boot/uEnv.txt
 +
verbosity=7
 +
console=ttyAML0,115200
 +
overlay_prefix=meson
 +
rootfstype=ext4
 +
fdtfile=amlogic/meson-g12a-radxa-zero.dtb
 +
overlays=meson-g12a-uart-ao-a-on-gpioao-0-gpioao-1 meson-g12a-spi-spidev
 +
param_spidev_spi_bus=0
 +
param_spidev_max_freq=10000000
 +
rootuuid=bbe0631f-bbed-4033-8f75-fa5930deceed
 +
initrdsize=0xf1ee3e
 +
kernelversion=5.10.69-5-amlogic-gfeede6ac474e
 +
initrdimg=initrd.img-5.10.69-5-amlogic-gfeede6ac474e
 +
kernelimg=vmlinuz-5.10.69-5-amlogic-gfeede6ac474e
 +
 +
then execute command, sync, followed by '''reboot'''.
 +
 +
Create file test-spi.c and add the following contents.
 +
 +
rock@zero:~/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 0'''
 +
 +
/* 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@zero:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa
 +
 +
Then short pin12 and pin18 and run  test-spi
 +
 +
rock@zero:~/mraa-examples$ sudo ./test-spi
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
MRAA: SUCCESS
 +
 +
==== Development ====
 +
 +
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].
 +
 +
==== Troubleshooting ====
 +
 +
Post your issue on the forum: https://forum.radxa.com/c/zero

Revision as of 11:56, 28 October 2021

 Radxa Zero >  Development Guide >  Install Libmraa

Libmraa on Radxa Zero

This guide describes how to use libmraa on Radxa Zero.

Requirement

Install essential packages

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

Execute the following commands to add Radxa APT

rock@zero:~$ export DISTRO=focal-stable      # for Focal

or

rock@zero:~$ export DISTRO=buster-stable      # for Buster
rock@zero:~$ 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@zero:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -

Install essential packages:

rock@zero:~$ sudo apt-get update
rock@zero:~$ sudo apt-get install -y rockchip-overlay libmraa 

Install compiler:

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

Enable interface

See Radxa Zero GPIO pintout. Radxa Zero has a 40-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below: 23 GPIO:

   PIN03      GPIOA_14
   PIN05      GPIOA_15
   PIN07      GPIOAO_3
   PIN08      GPIOAO_0
   PIN10      GPIOAO_1
   PIN11      GPIOAO_2
   PIN12      GPIOX_9
   PIN13      GPIOX_11
   PIN16      GPIOX_10
   PIN18      GPIOX_8
   PIN19      GPIOH_4
   PIN21      GPIOH_5
   PIN22      GPIOC_7      //Not supported gpio funtion now
   PIN23      GPIOH_7
   PIN24      GPIOH_6
   PIN27      GPIOAO_3
   PIN28      GPIOAO_2
   PIN32      GPIOAO_4
   PIN35      GPIOAO_8
   PIN36      GPIOH_8
   PIN37      GPIOAO_9
   PIN38      GPIOAO_10
   PIN40      GPIOAO_11

3 I2C:

   PIN23      I2C1_SCL
   PIN24      I2C1_SDA
   PIN13      I2C1_SCL
   PIN16      I2C1_SDA    //these are two i2c-1, only one can be opened when using
   PIN3       I2C3_SDA
   PIN5       I2C3_SCL
   PIN7       I2C4_SDA
   PIN11      I2C4_SCL
   PIN27      I2C4_SDA
   PIN28      I2C4_SCL   ///these are two i2c-4, only one can be opened when using
  

2 SPI: pwm_c

   PIN12      SPI0RX        //must disable i2c1 uart1 pwm_c
   PIN13      SPI0CLK
   PIN16      SPI0CSN
   PIN18      SPI0TX
   PIN19      SPI1TX        //must disable i2c1 uart4
   PIN21      SPI1RX        
   PIN23      SPI1CLK
   PIN24      SPI1CSN

3 UART:

   PIN8       UART0_TX    
   PIN10      UART0_RX
   PIN7       UART1_RX    //must disable i2c4
   PIN11      UART1_TX
   PIN27      UART1_RX
   PIN28      UART1_TX    
   PIN23      UART4_TX    //must disable i2c1 spi1
   PIN24      UART4_RX

2 PWM:

   PIN18      PWM18
   PIN40      PWM40

For those Radxa Zero system images released, the configuration file is /boot/uEnv.txt. For more details, follow this guide, Device tree overlays.

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@zero:~$ 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_EE_M3_S: GPIO I2C  
04          5V: 
05 I2C_EE_M3_S: GPIO I2C  
06         GND: 
07 I2C_AO_M0_S: GPIO I2C  UART 
08 UART_AO_A_T: GPIO UART 
09         GND: 
10 UART_AO_A_R: GPIO UART 
11 I2C_AO_M0_S: GPIO I2C  UART 
12  SPI_A_MISO: GPIO SPI  
13 I2C_EE_M1_S: GPIO I2C  SPI  
14         GND: 
15  SARADC_CH1: 
16 I2C_EE_M1_S: GPIO I2C  SPI  
17         3V3: 
18 SPI_A_MOSI,: GPIO SPI  PWM  
19  SPI_B_MOSI: GPIO SPI  
20         GND: 
21  SPI_B_MISO: GPIO SPI  
22     GPIOC_7: GPIO 
23 I2C_EE_M1_S: GPIO I2C  SPI  UART 
24 UART_EE_C_R: GPIO I2C  SPI  UART 
25         GND: 
26  SARADC_CH2: 
27 I2C_AO_M0_S: GPIO I2C  UART 
28 I2C_AO_M0_S: GPIO I2C  UART 
29          NC: 
30         GND: 
31          NC: 
32    GPIOAO_4: GPIO 
33          NC: 
34         GND: 
35 UART_AO_B_T: GPIO UART 
36     GPIOH_8: GPIO 
37 UART_AO_B_R: GPIO UART 
38   GPIOAO_10: GPIO 
39         GND: 
40     PWMAO_A: GPIO PWM  
root@rockpis:~# mraa-gpio set 40 1           #pin40 pull high
root@rockpis:~# mraa-gpio set 40 0           #pin40 pull low
PWM test

Radxa Zero provides 2 PWM, PWM_C and PWMAO_A. It is necessary to enable then at the same time if you need PWM function.

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

rock@zero:~$ cat /boot/uEnv.txt 
verbosity=7
console=ttyAML0,115200
overlay_prefix=meson
rootfstype=ext4
fdtfile=amlogic/meson-g12a-radxa-zero.dtb
overlays=meson-g12a-uart-ao-a-on-gpioao-0-gpioao-1 meson-g12a-pwm-c-on-gpiox-8 meson-g12a-pwmao-a-on-gpioao-11
rootuuid=bbe0631f-bbed-4033-8f75-fa5930deceed
initrdsize=0xf1ee3e
kernelversion=5.10.69-5-amlogic-gfeede6ac474e
initrdimg=initrd.img-5.10.69-5-amlogic-gfeede6ac474e
kernelimg=vmlinuz-5.10.69-5-amlogic-gfeede6ac474e

Modify the macro PWM in /home/rock/mraa-examples/pwm.c as follows to test PWM_C. To test PWMAO_A, change #define PWM 18 to #define PWM 40.

/* PWM declaration */
#define PWM 18

Save and compile pwm.c

rock@zero:~/mraa-examples$ gcc -o pwm pwm.c -lmraa
rock@zero:~/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

Radxa Zero provides 3 I2C,There are I2C1 ,I2C3, I2C4. 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

rock@zero:~$ cat /boot/uEnv.txt 
verbosity=7
console=ttyAML0,115200
overlay_prefix=meson
rootfstype=ext4
fdtfile=amlogic/meson-g12a-radxa-zero.dtb
overlays=meson-g12a-uart-ao-a-on-gpioao-0-gpioao-1 meson-g12a-i2c-ee-m1-gpioh-6-gpioh-7
rootuuid=bbe0631f-bbed-4033-8f75-fa5930deceed
initrdsize=0xf1ee3e
kernelversion=5.10.69-5-amlogic-gfeede6ac474e
initrdimg=initrd.img-5.10.69-5-amlogic-gfeede6ac474e
kernelimg=vmlinuz-5.10.69-5-amlogic-gfeede6ac474e

We use MPU6050 test i2c. Modify the macro MPU6050 in /home/rock/mraa-examples/i2c_mpu6050.c ,as follows to test I2C1.

  /* mraa header */
  #include "mraa/i2c.h"
  #define I2C_BUS 0
  
rock@zero:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa
rock@zero:~/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

Radxa Zero provides 3 UART,There are uart0 ,uart1, uart4. If you need the uart 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

rock@zero:~$ cat /boot/uEnv.txt 
verbosity=7
console=ttyAML0,115200
overlay_prefix=meson
rootfstype=ext4
fdtfile=amlogic/meson-g12a-radxa-zero.dtb
overlays=meson-g12a-uart-ao-a-on-gpioao-0-gpioao-1 meson-g12a-uart-ao-b-on-gpioao-2-gpioao-3
console=
rootuuid=bbe0631f-bbed-4033-8f75-fa5930deceed
initrdsize=0xf1ee3e
kernelversion=5.10.69-5-amlogic-gfeede6ac474e
initrdimg=initrd.img-5.10.69-5-amlogic-gfeede6ac474e
kernelimg=vmlinuz-5.10.69-5-amlogic-gfeede6ac474e

Here set console to NULL value. then reboot . use ssh connect to zero,we must have 2 windows,one is for send data,anothor is receiver by serial com.

send command follow:

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

Another window sets the baud 1500000 and receives the data

radxa

receive command follow:

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

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

rock@zero:~$ cat /boot/uEnv.txt 
verbosity=7
console=ttyAML0,115200
overlay_prefix=meson
rootfstype=ext4
fdtfile=amlogic/meson-g12a-radxa-zero.dtb
overlays=meson-g12a-uart-ao-a-on-gpioao-0-gpioao-1 meson-g12a-spi-spidev 
param_spidev_spi_bus=0 
param_spidev_max_freq=10000000
rootuuid=bbe0631f-bbed-4033-8f75-fa5930deceed
initrdsize=0xf1ee3e
kernelversion=5.10.69-5-amlogic-gfeede6ac474e
initrdimg=initrd.img-5.10.69-5-amlogic-gfeede6ac474e
kernelimg=vmlinuz-5.10.69-5-amlogic-gfeede6ac474e

then execute command, sync, followed by reboot.

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

rock@zero:~/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 0

/* 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@zero:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa

Then short pin12 and pin18 and run test-spi

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

Development

More introduction of libmraa can look at libmraa official website.

Troubleshooting

Post your issue on the forum: https://forum.radxa.com/c/zero