RockpiS/dev/libmraa
ROCK Pi S > Development > Install Libmraa
Contents
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-testing and buster-testing repositories.
Execute the following commands to add Radxa APT
rock@rockpis:~$ export DISTRO=bionic-testing # for Bionic
or
rock@rockpis:~$ export DISTRO=buster-testing # 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
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, to enable pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c3 and so overlays=, need to follow 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.
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
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.
test gpio
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
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 .
Run the compiled file
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
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 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
- Refer Troubleshooting page
- Post your issue on the forum: https://forum.radxa.com/c/rockpiS