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

Difference between revisions of "Rock3/dev/libmraa"

< Rock3‎ | dev
(Created page with "{{rock3_header}} {{Languages|rock3/dev/libmraa}} ROCK 3 > Development > Install Libmraa === Libmraa on ROCK 3 ===...")
 
Line 8: Line 8:
  
 
This guide describes how to use libmraa on ROCK 3.
 
This guide describes how to use libmraa on ROCK 3.
 +
 +
=== Install essential packages ===
 +
Edit your /etc/apt/sources.list.d/apt-radxa-com.list as following:
 +
 +
* '''For Debian Buster'''
 +
    deb http://apt.radxa.com/buster-stable/ buster main
 +
    deb http://apt.radxa.com/buster-testing/ buster main
 +
* '''For Ubuntu Focal'''
 +
    deb http://apt.radxa.com/focal-stable/ focal main
 +
    deb http://apt.radxa.com/focal-testing/ focal main
 +
 +
Get the pub key
 +
 +
* '''For Debian Buster'''
 +
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -
 +
* '''For Ubuntu Focal'''
 +
    wget -O -  apt.radxa.com/focal-testing/public.key | sudo apt-key add -
 +
 +
Update 
 +
    sudo apt-get update
 +
 +
Install essential packages:
 +
    sudo apt-get install -y rockchip-overlay && sudo apt-get install -y linux-4.19-rock-3-latest
 +
 +
==== Enable interface ====
 +
 +
See ROCK 3A [[rock3/hardware/gpio | GPIO pintout]]. ROCK 3A has a 40 pins colorful expansion header. Each pin is distinguished by color. mraa define is shown below: 
 +
 +
===== Hardware V1.3 =====
 +
 +
25 GPIO:
 +
    PIN03      GPIO1_A0
 +
    PIN05      GPIO1_A1
 +
    PIN07      GPIO0_B5
 +
    PIN11      GPIO3_C4
 +
    PIN12      GPIO3_A3
 +
    PIN13      GPIO3_C5
 +
    PIN15      GPIO0_C0
 +
    PIN16      GPIO0_B6
 +
    PIN18      GPIO3_B2
 +
    PIN19      GPIO4_C3
 +
    PIN21      GPIO4_C5
 +
    PIN22      GPIO0_C1
 +
    PIN23      GPIO4_C2
 +
    PIN24      GPIO4_C6
 +
    PIN26      GPIO4_D1
 +
    PIN27      GPIO0_B4
 +
    PIN28      GPIO0_B3
 +
    PIN29      GPIO2_D7
 +
    PIN31      GPIO3_A0
 +
    PIN32      GPIO3_C2
 +
    PIN33      GPIO3_C3
 +
    PIN35      GPIO3_A4
 +
    PIN36      GPIO3_A2
 +
    PIN38      GPIO3_A6
 +
    PIN40      GPIO3_A5
 +
 +
3 I2C:
 +
    PIN27      I2C'''1'''_SDA
 +
    PIN28      I2C'''1'''_SCL
 +
    PIN7      I2C'''2'''_SCL_M0
 +
    PIN16      I2C'''2'''_SDA_M0
 +
    PIN3      I2C'''3'''_SDA_M0
 +
    PIN5      I2C'''3'''_SCL_M0
 +
 
 +
1 SPI:
 +
    PIN19      SPI'''3'''_MOSI_M1
 +
    PIN21      SPI'''3'''_MISO_M1
 +
    PIN23      SPI'''3'''_CLK_M1
 +
    PIN24      SPI'''3'''_CS0_M1
 +
 +
6 UART:
 +
    PIN22      UART'''0'''_TX
 +
    PIN15      UART'''0'''_RX
 +
    PIN5      UART'''3'''_TX_M0
 +
    PIN3      UART'''3'''_RX_M0
 +
    PIN32      UART'''5'''_TX_M1
 +
    PIN33      UART'''5'''_RX_M1
 +
    PIN11      UART'''7'''_TX_M1
 +
    PIN13      UART'''7'''_RX_M1
 +
    PIN29      UART'''8'''_TX_M1
 +
    PIN31      UART'''8'''_RX_M1
 +
    PIN21      UART'''9'''_TX_M1
 +
    PIN24      UART'''9'''_RX_M1
 +
 +
7 PWM:      (Currently only one PWM function can be used at a time)
 +
    PIN15      PWM'''1'''_M0
 +
    PIN7      PWM'''1'''_M1
 +
    PIN22      PWM'''2'''_M0
 +
    PIN16      PWM'''2'''_M1
 +
    PIN18      PWM'''9'''_M0
 +
    PIN21      PWM'''12'''_M1
 +
    PIN24      PWM'''13'''_M1
 +
    PIN11      PWM'''14'''_M0
 +
    PIN23      PWM'''14'''_M1
 +
    PIN13      PWM'''15'''_M0
 +
    PIN19      PWM'''15'''_M1
 +
 +
1 ADC:
 +
    PIN37      ADC_IN5          //the measure voltage must lower than 1.8v
 +
 +
When using, you need to pay attention to the pin's multiplexing function to see if there is a conflict.
 +
==== 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@rock3a:~/mraa-examples$ sudo 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
 +
 +
rock@rock3a:~$ mraa-gpio list
 +
01        3V3:
 +
02          5V:
 +
03 I2C3_SDA_M0: GPIO I2C  UART
 +
04          5V:
 +
05 I2C3_SCL_M0: GPIO I2C  UART
 +
06        GND:
 +
07 I2C2_SCL_M0: GPIO I2C  PWM 
 +
08  UART2_TXD: GPIO UART
 +
09        GND:
 +
10  UART2_RXD: GPIO UART
 +
11 PWM14_M0,UA: GPIO PWM  UART
 +
12    GPIO3_A3: GPIO
 +
13 PWM15_IR_M0: GPIO PWM  UART
 +
14        GND:
 +
15 PWM1_M0,UAR: GPIO PWM  UART
 +
16 I2C2_SDA_M0: GPIO I2C  PWM 
 +
17        3V3:
 +
18    PWM9_M0: GPIO PWM 
 +
19 PWM15_IR_M1: GPIO SPI  PWM 
 +
20        GND:
 +
21 PWM12_M1,SP: GPIO SPI  PWM  UART
 +
22 PWM2_M0,UAR: GPIO PWM  UART
 +
23 PWM14_M1,SP: GPIO SPI  PWM 
 +
24 PWM13_M1,SP: GPIO SPI  PWM  UART
 +
25        GND:
 +
26 SPI3_CS1_M1: GPIO SPI 
 +
27    I2C1_SDA: GPIO I2C 
 +
28    I2C1_SCL: GPIO I2C 
 +
29 UART8_TX_M1: GPIO UART
 +
30        GND:
 +
31 UART8_RX_M1: GPIO UART
 +
32 UART5_TX_M1: GPIO UART
 +
33 UART5_RX_M1: GPIO UART
 +
34        GND:
 +
35    GPIO3_A4: GPIO
 +
36    GPIO3_A2: GPIO
 +
37 SARADC_VIN5: AIO 
 +
38    GPIO3_A6: GPIO
 +
39        GND:
 +
40    GPIO3_A5: GPIO
 +
 +
root@rock3a:~$ mraa-gpio set 40 1          #pin40 pull high
 +
root@rock3a:~# mraa-gpio set 40 0          #pin40 pull low
 +
 +
===== I2C test =====
 +
ROCK 3A V1.3 provides 3 I2C,There are  I2C1 , I2C2m0, I2C3m0.
 +
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@rock3a:~# cat /boot/uEnv.txt
 +
verbosity=7
 +
overlay_prefix=rockchip
 +
rootfstype=ext4
 +
fdtfile=rockchip/rk3568-rock-3-a.dtb
 +
overlays=rk3568-pwm8-m0-fan '''rk3568-i2c3-m0'''
 +
rootuuid=ee2ce23a-e0b1-4625-a54b-6ce12c167e97
 +
initrdsize=0x81bfa9
 +
kernelversion=4.19.193-16-rockchip-g0cca7bdf9cdb
 +
initrdimg=initrd.img-4.19.193-16-rockchip-g0cca7bdf9cdb
 +
kernelimg=vmlinuz-4.19.193-16-rockchip-g0cca7bdf9cdb
 +
 +
Then, use mraa-i2c tool to test,we must have a i2c slave device,for example:
 +
root@rock3a:~# mraa-i2c list
 +
Bus  0: id=01 type=linux  default
 +
Bus  1: id=02 type=linux
 +
Bus  2: id=03 type=linux
 +
 +
root@rock3a:~# mraa-i2c detect 2
 +
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 +
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
 +
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
 +
 +
We use  MPU6050 tets i2c.
 +
Modify the macro  MPU6050 in '''/home/rock/mraa-examples/i2c_mpu6050.c''' ,as follows to test I2C3m0.
 +
 +
  /* mraa header */
 +
  #include "mraa/i2c.h"
 +
  '''#define I2C_BUS 2'''
 +
 
 +
rock@rock3a:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa
 +
rock@rock3a:~/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
 +
 +
===== UART test =====
 +
ROCK 3A V1.3 provides 6 UART,There are  '''uart0''' ,'''uart3''', '''uart5''', '''uart7''', '''uart8''', '''uart9''' .
 +
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
 +
 +
root@rock3a:~# cat /boot/uEnv.txt
 +
verbosity=7
 +
overlay_prefix=rockchip
 +
rootfstype=ext4
 +
fdtfile=rockchip/rk3568-rock-3-a.dtb
 +
overlays=rk3568-pwm8-m0-fan '''rk3568-uart0'''
 +
rootuuid=ee2ce23a-e0b1-4625-a54b-6ce12c167e97
 +
initrdsize=0x81bfa9
 +
kernelversion=4.19.193-16-rockchip-g0cca7bdf9cdb
 +
initrdimg=initrd.img-4.19.193-16-rockchip-g0cca7bdf9cdb
 +
kernelimg=vmlinuz-4.19.193-16-rockchip-g0cca7bdf9cdb
 +
 +
Here set console to NULL value.
 +
 +
then reboot . use '''ssh''' connect to rock3a in a new window, to send data.
 +
 +
send command follow:
 +
rock@rock3a:~$ sudo mraa-uart '''dev 0''' baud 1500000 send radxa
 +
rock@rock3a:~$ sudo mraa-uart '''dev 0''' baud 1500000 send radxa
 +
 +
Another window sets the baud 1500000 and receives the data by serial console
 +
radxaradxa
 +
 +
===== SPI test =====
 +
 +
Firstly, modify the '''/boot/uEnv.txt''' file.
 +
 +
root@rock3a:~# cat /boot/uEnv.txt
 +
verbosity=7
 +
overlay_prefix=rockchip
 +
rootfstype=ext4
 +
fdtfile=rockchip/rk3568-rock-3-a.dtb
 +
overlays=rk3568-pwm8-m0-fan rk3568-spi3-m1-cs0-spidev
 +
rootuuid=ee2ce23a-e0b1-4625-a54b-6ce12c167e97
 +
initrdsize=0x81bfa9
 +
kernelversion=4.19.193-16-rockchip-g0cca7bdf9cdb
 +
initrdimg=initrd.img-4.19.193-16-rockchip-g0cca7bdf9cdb
 +
kernelimg=vmlinuz-4.19.193-16-rockchip-g0cca7bdf9cdb
 +
 +
then execute command, sync, followed by '''reboot'''.
 +
 +
Create file test-spi.c and add the following contents.
 +
 +
rock@rock3a:~/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 3'''
 +
 +
/* 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@rock3a:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa
 +
 +
Then short pin19 and pin21 and run  test-spi
 +
 +
rock@rock3a:~/mraa-examples$ sudo ./test-spi
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
0xaa
 +
MRAA: SUCCESS
 +
 +
===== PWM test =====
 +
 +
ROCK 3A V1.3 provides 7 PWM, '''but only one PWM function can be used at a time currently'''.
 +
 +
Firstly, modify the /boot/uEnv.txt file to add the following
 +
 +
root@rock3a:~# cat /boot/uEnv.txt
 +
verbosity=7
 +
overlay_prefix=rockchip
 +
rootfstype=ext4
 +
fdtfile=rockchip/rk3568-rock-3-a.dtb
 +
overlays=rk3568-pwm8-m0-fan '''rk3568-pwm1-m0'''
 +
rootuuid=ee2ce23a-e0b1-4625-a54b-6ce12c167e97
 +
initrdsize=0x81bfa9
 +
kernelversion=4.19.193-16-rockchip-g0cca7bdf9cdb
 +
initrdimg=initrd.img-4.19.193-16-rockchip-g0cca7bdf9cdb
 +
kernelimg=vmlinuz-4.19.193-16-rockchip-g0cca7bdf9cdb
 +
 +
Modify the macro PWM in /home/rock/mraa-examples/pwm.c as follows to test PWM1_M0.
 +
 +
'''/* PWM declaration */'''
 +
'''#define PWM 15'''        //15 means its pin number
 +
 +
Save and compile pwm.c
 +
rock@rock3a:~/mraa-examples$ gcc -o pwm pwm.c -lmraa
 +
rock@rock3a:~/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
 +
 +
===== ADC test =====
 +
 +
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.
 +
 +
rock@rock3a:~/mraa-examples$ gcc -o aio aio.c -lmraa
 +
rock@rock3a:~/mraa-examples$ sudo ./aio
 +
ADC A0 read 20F - 527
 +
ADC A0 read float - 0.51808
 +
ADC A0 read 212 - 530
 +
ADC A0 read float - 0.51906
 +
ADC A0 read 213 - 531
 +
ADC A0 read float - 0.51711
 +
 +
=== 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/rock3

Revision as of 06:51, 9 December 2021

    ROCK 3 >  Development >  Install Libmraa 

Libmraa on ROCK 3

This guide describes how to use libmraa on ROCK 3.

Install essential packages

Edit your /etc/apt/sources.list.d/apt-radxa-com.list as following:

  • For Debian Buster
   deb http://apt.radxa.com/buster-stable/ buster main
   deb http://apt.radxa.com/buster-testing/ buster main
  • For Ubuntu Focal
   deb http://apt.radxa.com/focal-stable/ focal main
   deb http://apt.radxa.com/focal-testing/ focal main

Get the pub key

  • For Debian Buster
   wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -
  • For Ubuntu Focal
   wget -O -  apt.radxa.com/focal-testing/public.key | sudo apt-key add -

Update

   sudo apt-get update

Install essential packages:

   sudo apt-get install -y rockchip-overlay && sudo apt-get install -y linux-4.19-rock-3-latest

Enable interface

See ROCK 3A GPIO pintout. ROCK 3A has a 40 pins colorful expansion header. Each pin is distinguished by color. mraa define is shown below:

Hardware V1.3

25 GPIO:

   PIN03      GPIO1_A0
   PIN05      GPIO1_A1
   PIN07      GPIO0_B5
   PIN11      GPIO3_C4
   PIN12      GPIO3_A3
   PIN13      GPIO3_C5
   PIN15      GPIO0_C0
   PIN16      GPIO0_B6
   PIN18      GPIO3_B2
   PIN19      GPIO4_C3
   PIN21      GPIO4_C5
   PIN22      GPIO0_C1
   PIN23      GPIO4_C2
   PIN24      GPIO4_C6
   PIN26      GPIO4_D1
   PIN27      GPIO0_B4
   PIN28      GPIO0_B3
   PIN29      GPIO2_D7
   PIN31      GPIO3_A0
   PIN32      GPIO3_C2
   PIN33      GPIO3_C3
   PIN35      GPIO3_A4
   PIN36      GPIO3_A2
   PIN38      GPIO3_A6
   PIN40      GPIO3_A5

3 I2C:

   PIN27      I2C1_SDA
   PIN28      I2C1_SCL
   PIN7       I2C2_SCL_M0
   PIN16      I2C2_SDA_M0
   PIN3       I2C3_SDA_M0
   PIN5       I2C3_SCL_M0
  

1 SPI:

   PIN19      SPI3_MOSI_M1
   PIN21      SPI3_MISO_M1
   PIN23      SPI3_CLK_M1
   PIN24      SPI3_CS0_M1

6 UART:

   PIN22      UART0_TX
   PIN15      UART0_RX
   PIN5       UART3_TX_M0
   PIN3       UART3_RX_M0
   PIN32      UART5_TX_M1
   PIN33      UART5_RX_M1
   PIN11      UART7_TX_M1
   PIN13      UART7_RX_M1
   PIN29      UART8_TX_M1
   PIN31      UART8_RX_M1
   PIN21      UART9_TX_M1
   PIN24      UART9_RX_M1

7 PWM: (Currently only one PWM function can be used at a time)

   PIN15      PWM1_M0
   PIN7       PWM1_M1
   PIN22      PWM2_M0
   PIN16      PWM2_M1
   PIN18      PWM9_M0
   PIN21      PWM12_M1
   PIN24      PWM13_M1
   PIN11      PWM14_M0
   PIN23      PWM14_M1
   PIN13      PWM15_M0
   PIN19      PWM15_M1

1 ADC:

   PIN37      ADC_IN5          //the measure voltage must lower than 1.8v

When using, you need to pay attention to the pin's multiplexing function to see if there is a conflict.

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@rock3a:~/mraa-examples$ sudo 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

rock@rock3a:~$ mraa-gpio list
01         3V3: 
02          5V: 
03 I2C3_SDA_M0: GPIO I2C  UART 
04          5V: 
05 I2C3_SCL_M0: GPIO I2C  UART 
06         GND: 
07 I2C2_SCL_M0: GPIO I2C  PWM  
08   UART2_TXD: GPIO UART 
09         GND: 
10   UART2_RXD: GPIO UART 
11 PWM14_M0,UA: GPIO PWM  UART 
12    GPIO3_A3: GPIO 
13 PWM15_IR_M0: GPIO PWM  UART 
14         GND: 
15 PWM1_M0,UAR: GPIO PWM  UART 
16 I2C2_SDA_M0: GPIO I2C  PWM  
17         3V3: 
18     PWM9_M0: GPIO PWM  
19 PWM15_IR_M1: GPIO SPI  PWM  
20         GND: 
21 PWM12_M1,SP: GPIO SPI  PWM  UART 
22 PWM2_M0,UAR: GPIO PWM  UART 
23 PWM14_M1,SP: GPIO SPI  PWM  
24 PWM13_M1,SP: GPIO SPI  PWM  UART 
25         GND: 
26 SPI3_CS1_M1: GPIO SPI  
27    I2C1_SDA: GPIO I2C  
28    I2C1_SCL: GPIO I2C  
29 UART8_TX_M1: GPIO UART 
30         GND: 
31 UART8_RX_M1: GPIO UART 
32 UART5_TX_M1: GPIO UART 
33 UART5_RX_M1: GPIO UART 
34         GND: 
35    GPIO3_A4: GPIO 
36    GPIO3_A2: GPIO 
37 SARADC_VIN5: AIO  
38    GPIO3_A6: GPIO 
39         GND: 
40    GPIO3_A5: GPIO 

root@rock3a:~$ mraa-gpio set 40 1           #pin40 pull high
root@rock3a:~# mraa-gpio set 40 0           #pin40 pull low
I2C test

ROCK 3A V1.3 provides 3 I2C,There are I2C1 , I2C2m0, I2C3m0. 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@rock3a:~# cat /boot/uEnv.txt 
verbosity=7
overlay_prefix=rockchip
rootfstype=ext4
fdtfile=rockchip/rk3568-rock-3-a.dtb
overlays=rk3568-pwm8-m0-fan rk3568-i2c3-m0
rootuuid=ee2ce23a-e0b1-4625-a54b-6ce12c167e97
initrdsize=0x81bfa9
kernelversion=4.19.193-16-rockchip-g0cca7bdf9cdb
initrdimg=initrd.img-4.19.193-16-rockchip-g0cca7bdf9cdb
kernelimg=vmlinuz-4.19.193-16-rockchip-g0cca7bdf9cdb

Then, use mraa-i2c tool to test,we must have a i2c slave device,for example:

root@rock3a:~# mraa-i2c list
Bus   0: id=01 type=linux  default
Bus   1: id=02 type=linux 
Bus   2: id=03 type=linux 

root@rock3a:~# mraa-i2c detect 2
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  

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

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

ROCK 3A V1.3 provides 6 UART,There are uart0 ,uart3, uart5, uart7, uart8, uart9 . 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

root@rock3a:~# cat /boot/uEnv.txt 
verbosity=7
overlay_prefix=rockchip
rootfstype=ext4
fdtfile=rockchip/rk3568-rock-3-a.dtb
overlays=rk3568-pwm8-m0-fan rk3568-uart0
rootuuid=ee2ce23a-e0b1-4625-a54b-6ce12c167e97
initrdsize=0x81bfa9
kernelversion=4.19.193-16-rockchip-g0cca7bdf9cdb
initrdimg=initrd.img-4.19.193-16-rockchip-g0cca7bdf9cdb
kernelimg=vmlinuz-4.19.193-16-rockchip-g0cca7bdf9cdb

Here set console to NULL value.

then reboot . use ssh connect to rock3a in a new window, to send data.

send command follow:

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

Another window sets the baud 1500000 and receives the data by serial console

radxaradxa
SPI test

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

root@rock3a:~# cat /boot/uEnv.txt 
verbosity=7
overlay_prefix=rockchip
rootfstype=ext4
fdtfile=rockchip/rk3568-rock-3-a.dtb
overlays=rk3568-pwm8-m0-fan rk3568-spi3-m1-cs0-spidev
rootuuid=ee2ce23a-e0b1-4625-a54b-6ce12c167e97
initrdsize=0x81bfa9
kernelversion=4.19.193-16-rockchip-g0cca7bdf9cdb
initrdimg=initrd.img-4.19.193-16-rockchip-g0cca7bdf9cdb
kernelimg=vmlinuz-4.19.193-16-rockchip-g0cca7bdf9cdb

then execute command, sync, followed by reboot.

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

rock@rock3a:~/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 3

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

Then short pin19 and pin21 and run test-spi

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

ROCK 3A V1.3 provides 7 PWM, but only one PWM function can be used at a time currently.

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

root@rock3a:~# cat /boot/uEnv.txt 
verbosity=7
overlay_prefix=rockchip
rootfstype=ext4
fdtfile=rockchip/rk3568-rock-3-a.dtb
overlays=rk3568-pwm8-m0-fan rk3568-pwm1-m0
rootuuid=ee2ce23a-e0b1-4625-a54b-6ce12c167e97
initrdsize=0x81bfa9
kernelversion=4.19.193-16-rockchip-g0cca7bdf9cdb
initrdimg=initrd.img-4.19.193-16-rockchip-g0cca7bdf9cdb
kernelimg=vmlinuz-4.19.193-16-rockchip-g0cca7bdf9cdb

Modify the macro PWM in /home/rock/mraa-examples/pwm.c as follows to test PWM1_M0.

/* PWM declaration */
#define PWM 15        //15 means its pin number

Save and compile pwm.c

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

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

rock@rock3a:~/mraa-examples$ gcc -o aio aio.c -lmraa
rock@rock3a:~/mraa-examples$ sudo ./aio 
ADC A0 read 20F - 527
ADC A0 read float - 0.51808
ADC A0 read 212 - 530
ADC A0 read float - 0.51906
ADC A0 read 213 - 531
ADC A0 read float - 0.51711

Development

More introduction of libmraa can look at libmraa official website.

Troubleshooting

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