Difference between revisions of "Zero/dev/libmraa"
(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
Contents
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 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