<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.radxa.com/mw/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.radxa.com/mw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zzl</id>
		<title>Radxa Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.radxa.com/mw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zzl"/>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/Special:Contributions/Zzl"/>
		<updated>2026-06-17T10:07:51Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.23.3</generator>

	<entry>
		<id>https://wiki.radxa.com/RockpiN10/dev/libmraa</id>
		<title>RockpiN10/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiN10/dev/libmraa"/>
				<updated>2020-10-12T06:51:07Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* Troubleshooting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiN10_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiN10/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiN10 | ROCK Pi N10]] &amp;gt; [[rockpiN10/dev | Development]] &amp;gt; [[rockpiN10/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi N10 ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi N10.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-stable and buster-stable repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ export DISTRO= buster-testing      # for Buster&lt;br /&gt;
 rock@rockpin10:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get install -y rockchip-overlay rockpin10-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get install -y linux-4.4-rockpin10-latest # ROCK Pi N10 kernel version: &amp;gt;= 4.4.167-14&lt;br /&gt;
&lt;br /&gt;
Install compiler:&lt;br /&gt;
 rock@rockpin10:~$ sudo apt install -y build-essential&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi N10 [[rockpiN10/hardware/gpio | GPIO pintout]]. ROCK Pi N10 has a 40-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V11 =====&lt;br /&gt;
&lt;br /&gt;
25 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A7&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B5&lt;br /&gt;
    PIN08      GPIO4_C4&lt;br /&gt;
    PIN10      GPIO4_C3&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO0_B1&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO0_B0&lt;br /&gt;
    PIN18      GPIO2_A6&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO3_D4&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN29      GPIO2_B2&lt;br /&gt;
    PIN31      GPIO2_B1&lt;br /&gt;
    PIN32      GPIO3_D5&lt;br /&gt;
    PIN33      GPIO2_D5&lt;br /&gt;
    PIN35      GPIO2_A4&lt;br /&gt;
    PIN36      GPIO2_A2&lt;br /&gt;
    PIN37      GPIO3_D6&lt;br /&gt;
    PIN38      GPIO2_A3&lt;br /&gt;
    PIN40      GPIO1_A2 &lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN27      I2C'''2'''_SDA&lt;br /&gt;
    PIN28      I2C'''2'''_SCL&lt;br /&gt;
    PIN29      I2C'''6'''_SCL&lt;br /&gt;
    PIN31      I2C'''6'''_SDA&lt;br /&gt;
    PIN3        I2C'''7'''_SDA&lt;br /&gt;
    PIN5        I2C'''7'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''1'''TX        //must disable UART4&lt;br /&gt;
    PIN21      SPI'''1'''RX        //must disable UART4&lt;br /&gt;
    PIN23      SPI'''1'''CLK&lt;br /&gt;
    PIN24      SPI'''1'''CSN&lt;br /&gt;
&lt;br /&gt;
2 UART:&lt;br /&gt;
    PIN8       UART'''2'''_TX&lt;br /&gt;
    PIN10      UART'''2'''_RX&lt;br /&gt;
    PIN19      UART'''4'''_TX  //must disable SPI1&lt;br /&gt;
    PIN21      UART'''4'''_RX  //must disable SPI1&lt;br /&gt;
   &lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''0'''&lt;br /&gt;
    PIN13      PWM'''1'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN1          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
For those ROCK Pi N10 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].&lt;br /&gt;
&lt;br /&gt;
For those ROCK Pi N10 system images released before March 1st, 2020, the configuration file is /boot/hw_intfc.conf.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== GPIO test =====&lt;br /&gt;
&lt;br /&gt;
  rock@rockpin10:~$ mraa-gpio list&lt;br /&gt;
  01         3V3: &lt;br /&gt;
  02          5V: &lt;br /&gt;
  03        SDA7: GPIO I2C  &lt;br /&gt;
  04          5V: &lt;br /&gt;
  05        SCL7: GPIO I2C  &lt;br /&gt;
  06         GND: &lt;br /&gt;
  07    GPIO0_B5: GPIO &lt;br /&gt;
  08        TXD2: GPIO UART &lt;br /&gt;
  09         GND: &lt;br /&gt;
  10        RXD2: GPIO UART &lt;br /&gt;
  11        PWM0: GPIO PWM  &lt;br /&gt;
  12    GPIO0_B1: GPIO &lt;br /&gt;
  13        PWM1: GPIO PWM  &lt;br /&gt;
  14         GND: &lt;br /&gt;
  15    GPIO4_C5: GPIO &lt;br /&gt;
  16    GPIO0_B0: GPIO &lt;br /&gt;
  17         3V3: &lt;br /&gt;
  18    GPIO2_A6: GPIO &lt;br /&gt;
  19 SPI1TX,TXD4: GPIO SPI  UART &lt;br /&gt;
  20         GND: &lt;br /&gt;
  21 SPI1RX,RXD4: GPIO SPI  UART &lt;br /&gt;
  22    GPIO3_D4: GPIO &lt;br /&gt;
  23     SPI1CLK: GPIO SPI  &lt;br /&gt;
  24      SPI1CS: GPIO SPI  &lt;br /&gt;
  25         GND: &lt;br /&gt;
  26     ADC_IN0: AIO  &lt;br /&gt;
  27        SDA2: GPIO I2C  &lt;br /&gt;
  28        SCL2: GPIO I2C  &lt;br /&gt;
  29 SCL6,SPI2RX: GPIO I2C  SPI  &lt;br /&gt;
  30         GND: &lt;br /&gt;
  31 SDA6,SPI2TX: GPIO I2C  SPI  &lt;br /&gt;
  32    GPIO3_D5: GPIO &lt;br /&gt;
  33    GPIO4_D5: GPIO &lt;br /&gt;
  34         GND: &lt;br /&gt;
  35    GPIO2_A4: GPIO &lt;br /&gt;
  36    GPIO2_A2: GPIO &lt;br /&gt;
  37    GPIO3_D6: GPIO &lt;br /&gt;
  38    GPIO2_A3: GPIO &lt;br /&gt;
  39         GND: &lt;br /&gt;
  40    GPIO1_A2: GPIO&lt;br /&gt;
  root@rockpin10:~# mraa-gpio set 40 1           #pin40 pull high&lt;br /&gt;
  root@rockpin10:~# mraa-gpio set 40 0           #pin40 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
ROCK Pi N10 V1.1 provides 2 PWM, PWM0 and PWM1. It is necessary to enable PWM0 and PWM1 at the same time if you need PWM function.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
  root@rockpin10:~# cat /boot/uEnv.txt&lt;br /&gt;
  verbosity=7&lt;br /&gt;
  overlay_prefix=rockchip&lt;br /&gt;
  rootfstype=ext4&lt;br /&gt;
  fdtfile=rockchip/rk3399pro-rockpi-n10-linux.dtb '''rk3399pro-pwm0''' '''rk3399pro-pwm1'''&lt;br /&gt;
  overlays=rk3399pro-console-on-uart2&lt;br /&gt;
  rootuuid=11958cc2-af5a-4e6f-9ad4-2b3baef3eebe&lt;br /&gt;
  initrdsize=0x5649ac&lt;br /&gt;
  kernelversion=4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  initrdimg=initrd.img-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  kernelimg=vmlinuz-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modify the macro PWM in /home/rock/mraa-examples/pwm.c as follows to test PWM0. To test PWM2, change '''#define PWM 11''' to '''#define PWM 13'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
ROCK Pi N10 V1.1 provides 3 I2C,There are  I2C2 ,I2C6, I2C7. If you need the I2C function, you can turn on one or more of them.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
  root@rockpin10:~# cat /boot/uEnv.txt&lt;br /&gt;
  verbosity=7&lt;br /&gt;
  overlay_prefix=rockchip&lt;br /&gt;
  rootfstype=ext4&lt;br /&gt;
  fdtfile=rockchip/rk3399pro-rockpi-n10-linux.dtb '''rk3399pro-i2c2''' '''rk3399pro-i2c6''' '''rk3399pro-i2c7'''&lt;br /&gt;
  overlays=rk3399pro-console-on-uart2&lt;br /&gt;
  rootuuid=11958cc2-af5a-4e6f-9ad4-2b3baef3eebe&lt;br /&gt;
  initrdsize=0x5649ac&lt;br /&gt;
  kernelversion=4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  initrdimg=initrd.img-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  kernelimg=vmlinuz-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
Modify the macro  MPU6050 in '''/home/rock/mraa-examples/i2c_mpu6050.c''' ,as follows to test I2C2. To test I2C6 and I2C7, change '''#define I2C_BUS 0''' to '''#define I2C_BUS 1'''  or'''#define I2C_BUS 2''' .&lt;br /&gt;
&lt;br /&gt;
  /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
   '''#define I2C_BUS 0'''&lt;br /&gt;
   &lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
   accel: x:0 y:0 z:0&lt;br /&gt;
   gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
   accel: x:0 y:0 z:0&lt;br /&gt;
   gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
   accel: x:0 y:0 z:0&lt;br /&gt;
   gyro: x:6 y:136 z:-50&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
ROCK Pi n10 V1.1 provides 2 UART,There are  '''uart2''' ,'''uart4'''. If you need the uatr function, you can turn on one or more of them.&lt;br /&gt;
&lt;br /&gt;
Firstly, Disable console and enable '''uart2''' for uart test.modify the '''/boot/uEnv.txt''' file to add the following&lt;br /&gt;
&lt;br /&gt;
  root@rockpin10:~# cat /boot/uEnv.txt&lt;br /&gt;
  verbosity=7&lt;br /&gt;
  overlay_prefix=rockchip&lt;br /&gt;
  rootfstype=ext4&lt;br /&gt;
  fdtfile=rockchip/rk3399pro-rockpi-n10-linux.dtb '''rk3399pro-uart2''' '''rk3399pro-uart4''' &lt;br /&gt;
  '''console='''&lt;br /&gt;
  overlays=rk3399pro-console-on-uart2&lt;br /&gt;
  rootuuid=11958cc2-af5a-4e6f-9ad4-2b3baef3eebe&lt;br /&gt;
  initrdsize=0x5649ac&lt;br /&gt;
  kernelversion=4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  initrdimg=initrd.img-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  kernelimg=vmlinuz-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
&lt;br /&gt;
Here set console to NULL value.&lt;br /&gt;
&lt;br /&gt;
then reboot . use ssh connect to rockpin10,we must have 2 windows,one is for send data,anothor is for receive.&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
 rock@rockpin10:~$ sudo mraa-uart dev 0 baud 1500000 send  radxa&lt;br /&gt;
&lt;br /&gt;
Another window sets the baud  1500000 and receives the data &lt;br /&gt;
&lt;br /&gt;
 radxa&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
 rock@rockpin10:~$ sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
 radxa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
  root@rockpin10:~# cat /boot/uEnv.txt&lt;br /&gt;
  verbosity=7&lt;br /&gt;
  overlay_prefix=rockchip&lt;br /&gt;
  rootfstype=ext4&lt;br /&gt;
  fdtfile=rockchip/rk3399pro-rockpi-n10-linux.dtb '''rk3399pro-spi-spidev''' &lt;br /&gt;
  overlays=rk3399pro-console-on-uart2&lt;br /&gt;
  rootuuid=11958cc2-af5a-4e6f-9ad4-2b3baef3eebe&lt;br /&gt;
  initrdsize=0x5649ac&lt;br /&gt;
  kernelversion=4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  initrdimg=initrd.img-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  kernelimg=vmlinuz-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
 #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 /* mraa header */&lt;br /&gt;
 #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 /* SPI declaration */&lt;br /&gt;
 '''#define SPI_BUS 2'''&lt;br /&gt;
 &lt;br /&gt;
 /* SPI frequency in Hz */&lt;br /&gt;
 #define SPI_FREQ 10000000&lt;br /&gt;
 int&lt;br /&gt;
 main(int argc, char** argv)&lt;br /&gt;
 {&lt;br /&gt;
     mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
     mraa_spi_context spi;&lt;br /&gt;
     int i, j;&lt;br /&gt;
 &lt;br /&gt;
     /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
     mraa_init();&lt;br /&gt;
 &lt;br /&gt;
     //! [Interesting]&lt;br /&gt;
     /* initialize SPI bus */&lt;br /&gt;
     spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
     if (spi == NULL) {&lt;br /&gt;
         fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
         mraa_deinit();&lt;br /&gt;
         return EXIT_FAILURE;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     /* set SPI frequency */&lt;br /&gt;
     status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
     if (status != MRAA_SUCCESS)&lt;br /&gt;
         goto err_exit;&lt;br /&gt;
 &lt;br /&gt;
     /* set big endian mode */&lt;br /&gt;
     status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
     if (status != MRAA_SUCCESS) {&lt;br /&gt;
         goto err_exit;&lt;br /&gt;
     }&lt;br /&gt;
    &lt;br /&gt;
     j = 10;&lt;br /&gt;
     while(j) {&lt;br /&gt;
   	j--;&lt;br /&gt;
         printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
     }&lt;br /&gt;
 err_exit:&lt;br /&gt;
     mraa_result_print(status);&lt;br /&gt;
 &lt;br /&gt;
     /* stop spi */&lt;br /&gt;
     mraa_spi_stop(spi);&lt;br /&gt;
 &lt;br /&gt;
     /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
     mraa_deinit();&lt;br /&gt;
 &lt;br /&gt;
      return EXIT_FAILURE;&lt;br /&gt;
 }&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpin10:~/mraa-examples$ gcc -o aio aio.c -lmraa&lt;br /&gt;
rock@rockpin10:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiN10&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiN10/dev/libmraa</id>
		<title>RockpiN10/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiN10/dev/libmraa"/>
				<updated>2020-10-12T06:50:54Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* Troubleshooting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiN10_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiN10/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiN10 | ROCK Pi N10]] &amp;gt; [[rockpiN10/dev | Development]] &amp;gt; [[rockpiN10/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi N10 ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi N10.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-stable and buster-stable repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ export DISTRO= buster-testing      # for Buster&lt;br /&gt;
 rock@rockpin10:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get install -y rockchip-overlay rockpin10-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get install -y linux-4.4-rockpin10-latest # ROCK Pi N10 kernel version: &amp;gt;= 4.4.167-14&lt;br /&gt;
&lt;br /&gt;
Install compiler:&lt;br /&gt;
 rock@rockpin10:~$ sudo apt install -y build-essential&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi N10 [[rockpiN10/hardware/gpio | GPIO pintout]]. ROCK Pi N10 has a 40-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V11 =====&lt;br /&gt;
&lt;br /&gt;
25 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A7&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B5&lt;br /&gt;
    PIN08      GPIO4_C4&lt;br /&gt;
    PIN10      GPIO4_C3&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO0_B1&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO0_B0&lt;br /&gt;
    PIN18      GPIO2_A6&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO3_D4&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN29      GPIO2_B2&lt;br /&gt;
    PIN31      GPIO2_B1&lt;br /&gt;
    PIN32      GPIO3_D5&lt;br /&gt;
    PIN33      GPIO2_D5&lt;br /&gt;
    PIN35      GPIO2_A4&lt;br /&gt;
    PIN36      GPIO2_A2&lt;br /&gt;
    PIN37      GPIO3_D6&lt;br /&gt;
    PIN38      GPIO2_A3&lt;br /&gt;
    PIN40      GPIO1_A2 &lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN27      I2C'''2'''_SDA&lt;br /&gt;
    PIN28      I2C'''2'''_SCL&lt;br /&gt;
    PIN29      I2C'''6'''_SCL&lt;br /&gt;
    PIN31      I2C'''6'''_SDA&lt;br /&gt;
    PIN3        I2C'''7'''_SDA&lt;br /&gt;
    PIN5        I2C'''7'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''1'''TX        //must disable UART4&lt;br /&gt;
    PIN21      SPI'''1'''RX        //must disable UART4&lt;br /&gt;
    PIN23      SPI'''1'''CLK&lt;br /&gt;
    PIN24      SPI'''1'''CSN&lt;br /&gt;
&lt;br /&gt;
2 UART:&lt;br /&gt;
    PIN8       UART'''2'''_TX&lt;br /&gt;
    PIN10      UART'''2'''_RX&lt;br /&gt;
    PIN19      UART'''4'''_TX  //must disable SPI1&lt;br /&gt;
    PIN21      UART'''4'''_RX  //must disable SPI1&lt;br /&gt;
   &lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''0'''&lt;br /&gt;
    PIN13      PWM'''1'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN1          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
For those ROCK Pi N10 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].&lt;br /&gt;
&lt;br /&gt;
For those ROCK Pi N10 system images released before March 1st, 2020, the configuration file is /boot/hw_intfc.conf.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== GPIO test =====&lt;br /&gt;
&lt;br /&gt;
  rock@rockpin10:~$ mraa-gpio list&lt;br /&gt;
  01         3V3: &lt;br /&gt;
  02          5V: &lt;br /&gt;
  03        SDA7: GPIO I2C  &lt;br /&gt;
  04          5V: &lt;br /&gt;
  05        SCL7: GPIO I2C  &lt;br /&gt;
  06         GND: &lt;br /&gt;
  07    GPIO0_B5: GPIO &lt;br /&gt;
  08        TXD2: GPIO UART &lt;br /&gt;
  09         GND: &lt;br /&gt;
  10        RXD2: GPIO UART &lt;br /&gt;
  11        PWM0: GPIO PWM  &lt;br /&gt;
  12    GPIO0_B1: GPIO &lt;br /&gt;
  13        PWM1: GPIO PWM  &lt;br /&gt;
  14         GND: &lt;br /&gt;
  15    GPIO4_C5: GPIO &lt;br /&gt;
  16    GPIO0_B0: GPIO &lt;br /&gt;
  17         3V3: &lt;br /&gt;
  18    GPIO2_A6: GPIO &lt;br /&gt;
  19 SPI1TX,TXD4: GPIO SPI  UART &lt;br /&gt;
  20         GND: &lt;br /&gt;
  21 SPI1RX,RXD4: GPIO SPI  UART &lt;br /&gt;
  22    GPIO3_D4: GPIO &lt;br /&gt;
  23     SPI1CLK: GPIO SPI  &lt;br /&gt;
  24      SPI1CS: GPIO SPI  &lt;br /&gt;
  25         GND: &lt;br /&gt;
  26     ADC_IN0: AIO  &lt;br /&gt;
  27        SDA2: GPIO I2C  &lt;br /&gt;
  28        SCL2: GPIO I2C  &lt;br /&gt;
  29 SCL6,SPI2RX: GPIO I2C  SPI  &lt;br /&gt;
  30         GND: &lt;br /&gt;
  31 SDA6,SPI2TX: GPIO I2C  SPI  &lt;br /&gt;
  32    GPIO3_D5: GPIO &lt;br /&gt;
  33    GPIO4_D5: GPIO &lt;br /&gt;
  34         GND: &lt;br /&gt;
  35    GPIO2_A4: GPIO &lt;br /&gt;
  36    GPIO2_A2: GPIO &lt;br /&gt;
  37    GPIO3_D6: GPIO &lt;br /&gt;
  38    GPIO2_A3: GPIO &lt;br /&gt;
  39         GND: &lt;br /&gt;
  40    GPIO1_A2: GPIO&lt;br /&gt;
  root@rockpin10:~# mraa-gpio set 40 1           #pin40 pull high&lt;br /&gt;
  root@rockpin10:~# mraa-gpio set 40 0           #pin40 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
ROCK Pi N10 V1.1 provides 2 PWM, PWM0 and PWM1. It is necessary to enable PWM0 and PWM1 at the same time if you need PWM function.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
  root@rockpin10:~# cat /boot/uEnv.txt&lt;br /&gt;
  verbosity=7&lt;br /&gt;
  overlay_prefix=rockchip&lt;br /&gt;
  rootfstype=ext4&lt;br /&gt;
  fdtfile=rockchip/rk3399pro-rockpi-n10-linux.dtb '''rk3399pro-pwm0''' '''rk3399pro-pwm1'''&lt;br /&gt;
  overlays=rk3399pro-console-on-uart2&lt;br /&gt;
  rootuuid=11958cc2-af5a-4e6f-9ad4-2b3baef3eebe&lt;br /&gt;
  initrdsize=0x5649ac&lt;br /&gt;
  kernelversion=4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  initrdimg=initrd.img-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  kernelimg=vmlinuz-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modify the macro PWM in /home/rock/mraa-examples/pwm.c as follows to test PWM0. To test PWM2, change '''#define PWM 11''' to '''#define PWM 13'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
ROCK Pi N10 V1.1 provides 3 I2C,There are  I2C2 ,I2C6, I2C7. If you need the I2C function, you can turn on one or more of them.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
  root@rockpin10:~# cat /boot/uEnv.txt&lt;br /&gt;
  verbosity=7&lt;br /&gt;
  overlay_prefix=rockchip&lt;br /&gt;
  rootfstype=ext4&lt;br /&gt;
  fdtfile=rockchip/rk3399pro-rockpi-n10-linux.dtb '''rk3399pro-i2c2''' '''rk3399pro-i2c6''' '''rk3399pro-i2c7'''&lt;br /&gt;
  overlays=rk3399pro-console-on-uart2&lt;br /&gt;
  rootuuid=11958cc2-af5a-4e6f-9ad4-2b3baef3eebe&lt;br /&gt;
  initrdsize=0x5649ac&lt;br /&gt;
  kernelversion=4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  initrdimg=initrd.img-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  kernelimg=vmlinuz-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
Modify the macro  MPU6050 in '''/home/rock/mraa-examples/i2c_mpu6050.c''' ,as follows to test I2C2. To test I2C6 and I2C7, change '''#define I2C_BUS 0''' to '''#define I2C_BUS 1'''  or'''#define I2C_BUS 2''' .&lt;br /&gt;
&lt;br /&gt;
  /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
   '''#define I2C_BUS 0'''&lt;br /&gt;
   &lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
   accel: x:0 y:0 z:0&lt;br /&gt;
   gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
   accel: x:0 y:0 z:0&lt;br /&gt;
   gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
   accel: x:0 y:0 z:0&lt;br /&gt;
   gyro: x:6 y:136 z:-50&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
ROCK Pi n10 V1.1 provides 2 UART,There are  '''uart2''' ,'''uart4'''. If you need the uatr function, you can turn on one or more of them.&lt;br /&gt;
&lt;br /&gt;
Firstly, Disable console and enable '''uart2''' for uart test.modify the '''/boot/uEnv.txt''' file to add the following&lt;br /&gt;
&lt;br /&gt;
  root@rockpin10:~# cat /boot/uEnv.txt&lt;br /&gt;
  verbosity=7&lt;br /&gt;
  overlay_prefix=rockchip&lt;br /&gt;
  rootfstype=ext4&lt;br /&gt;
  fdtfile=rockchip/rk3399pro-rockpi-n10-linux.dtb '''rk3399pro-uart2''' '''rk3399pro-uart4''' &lt;br /&gt;
  '''console='''&lt;br /&gt;
  overlays=rk3399pro-console-on-uart2&lt;br /&gt;
  rootuuid=11958cc2-af5a-4e6f-9ad4-2b3baef3eebe&lt;br /&gt;
  initrdsize=0x5649ac&lt;br /&gt;
  kernelversion=4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  initrdimg=initrd.img-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  kernelimg=vmlinuz-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
&lt;br /&gt;
Here set console to NULL value.&lt;br /&gt;
&lt;br /&gt;
then reboot . use ssh connect to rockpin10,we must have 2 windows,one is for send data,anothor is for receive.&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
 rock@rockpin10:~$ sudo mraa-uart dev 0 baud 1500000 send  radxa&lt;br /&gt;
&lt;br /&gt;
Another window sets the baud  1500000 and receives the data &lt;br /&gt;
&lt;br /&gt;
 radxa&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
 rock@rockpin10:~$ sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
 radxa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
  root@rockpin10:~# cat /boot/uEnv.txt&lt;br /&gt;
  verbosity=7&lt;br /&gt;
  overlay_prefix=rockchip&lt;br /&gt;
  rootfstype=ext4&lt;br /&gt;
  fdtfile=rockchip/rk3399pro-rockpi-n10-linux.dtb '''rk3399pro-spi-spidev''' &lt;br /&gt;
  overlays=rk3399pro-console-on-uart2&lt;br /&gt;
  rootuuid=11958cc2-af5a-4e6f-9ad4-2b3baef3eebe&lt;br /&gt;
  initrdsize=0x5649ac&lt;br /&gt;
  kernelversion=4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  initrdimg=initrd.img-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  kernelimg=vmlinuz-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
 #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 /* mraa header */&lt;br /&gt;
 #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 /* SPI declaration */&lt;br /&gt;
 '''#define SPI_BUS 2'''&lt;br /&gt;
 &lt;br /&gt;
 /* SPI frequency in Hz */&lt;br /&gt;
 #define SPI_FREQ 10000000&lt;br /&gt;
 int&lt;br /&gt;
 main(int argc, char** argv)&lt;br /&gt;
 {&lt;br /&gt;
     mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
     mraa_spi_context spi;&lt;br /&gt;
     int i, j;&lt;br /&gt;
 &lt;br /&gt;
     /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
     mraa_init();&lt;br /&gt;
 &lt;br /&gt;
     //! [Interesting]&lt;br /&gt;
     /* initialize SPI bus */&lt;br /&gt;
     spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
     if (spi == NULL) {&lt;br /&gt;
         fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
         mraa_deinit();&lt;br /&gt;
         return EXIT_FAILURE;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     /* set SPI frequency */&lt;br /&gt;
     status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
     if (status != MRAA_SUCCESS)&lt;br /&gt;
         goto err_exit;&lt;br /&gt;
 &lt;br /&gt;
     /* set big endian mode */&lt;br /&gt;
     status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
     if (status != MRAA_SUCCESS) {&lt;br /&gt;
         goto err_exit;&lt;br /&gt;
     }&lt;br /&gt;
    &lt;br /&gt;
     j = 10;&lt;br /&gt;
     while(j) {&lt;br /&gt;
   	j--;&lt;br /&gt;
         printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
     }&lt;br /&gt;
 err_exit:&lt;br /&gt;
     mraa_result_print(status);&lt;br /&gt;
 &lt;br /&gt;
     /* stop spi */&lt;br /&gt;
     mraa_spi_stop(spi);&lt;br /&gt;
 &lt;br /&gt;
     /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
     mraa_deinit();&lt;br /&gt;
 &lt;br /&gt;
      return EXIT_FAILURE;&lt;br /&gt;
 }&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpin10:~/mraa-examples$ gcc -o aio aio.c -lmraa&lt;br /&gt;
rock@rockpin10:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiN10/getting_started/ ]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiN10&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiN10/dev/libmraa</id>
		<title>RockpiN10/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiN10/dev/libmraa"/>
				<updated>2020-10-12T06:48:32Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiN10_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiN10/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiN10 | ROCK Pi N10]] &amp;gt; [[rockpiN10/dev | Development]] &amp;gt; [[rockpiN10/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi N10 ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi N10.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-stable and buster-stable repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ export DISTRO= buster-testing      # for Buster&lt;br /&gt;
 rock@rockpin10:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get install -y rockchip-overlay rockpin10-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get install -y linux-4.4-rockpin10-latest # ROCK Pi N10 kernel version: &amp;gt;= 4.4.167-14&lt;br /&gt;
&lt;br /&gt;
Install compiler:&lt;br /&gt;
 rock@rockpin10:~$ sudo apt install -y build-essential&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi N10 [[rockpiN10/hardware/gpio | GPIO pintout]]. ROCK Pi N10 has a 40-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V11 =====&lt;br /&gt;
&lt;br /&gt;
25 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A7&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B5&lt;br /&gt;
    PIN08      GPIO4_C4&lt;br /&gt;
    PIN10      GPIO4_C3&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO0_B1&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO0_B0&lt;br /&gt;
    PIN18      GPIO2_A6&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO3_D4&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN29      GPIO2_B2&lt;br /&gt;
    PIN31      GPIO2_B1&lt;br /&gt;
    PIN32      GPIO3_D5&lt;br /&gt;
    PIN33      GPIO2_D5&lt;br /&gt;
    PIN35      GPIO2_A4&lt;br /&gt;
    PIN36      GPIO2_A2&lt;br /&gt;
    PIN37      GPIO3_D6&lt;br /&gt;
    PIN38      GPIO2_A3&lt;br /&gt;
    PIN40      GPIO1_A2 &lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN27      I2C'''2'''_SDA&lt;br /&gt;
    PIN28      I2C'''2'''_SCL&lt;br /&gt;
    PIN29      I2C'''6'''_SCL&lt;br /&gt;
    PIN31      I2C'''6'''_SDA&lt;br /&gt;
    PIN3        I2C'''7'''_SDA&lt;br /&gt;
    PIN5        I2C'''7'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''1'''TX        //must disable UART4&lt;br /&gt;
    PIN21      SPI'''1'''RX        //must disable UART4&lt;br /&gt;
    PIN23      SPI'''1'''CLK&lt;br /&gt;
    PIN24      SPI'''1'''CSN&lt;br /&gt;
&lt;br /&gt;
2 UART:&lt;br /&gt;
    PIN8       UART'''2'''_TX&lt;br /&gt;
    PIN10      UART'''2'''_RX&lt;br /&gt;
    PIN19      UART'''4'''_TX  //must disable SPI1&lt;br /&gt;
    PIN21      UART'''4'''_RX  //must disable SPI1&lt;br /&gt;
   &lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''0'''&lt;br /&gt;
    PIN13      PWM'''1'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN1          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
For those ROCK Pi N10 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].&lt;br /&gt;
&lt;br /&gt;
For those ROCK Pi N10 system images released before March 1st, 2020, the configuration file is /boot/hw_intfc.conf.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== GPIO test =====&lt;br /&gt;
&lt;br /&gt;
  rock@rockpin10:~$ mraa-gpio list&lt;br /&gt;
  01         3V3: &lt;br /&gt;
  02          5V: &lt;br /&gt;
  03        SDA7: GPIO I2C  &lt;br /&gt;
  04          5V: &lt;br /&gt;
  05        SCL7: GPIO I2C  &lt;br /&gt;
  06         GND: &lt;br /&gt;
  07    GPIO0_B5: GPIO &lt;br /&gt;
  08        TXD2: GPIO UART &lt;br /&gt;
  09         GND: &lt;br /&gt;
  10        RXD2: GPIO UART &lt;br /&gt;
  11        PWM0: GPIO PWM  &lt;br /&gt;
  12    GPIO0_B1: GPIO &lt;br /&gt;
  13        PWM1: GPIO PWM  &lt;br /&gt;
  14         GND: &lt;br /&gt;
  15    GPIO4_C5: GPIO &lt;br /&gt;
  16    GPIO0_B0: GPIO &lt;br /&gt;
  17         3V3: &lt;br /&gt;
  18    GPIO2_A6: GPIO &lt;br /&gt;
  19 SPI1TX,TXD4: GPIO SPI  UART &lt;br /&gt;
  20         GND: &lt;br /&gt;
  21 SPI1RX,RXD4: GPIO SPI  UART &lt;br /&gt;
  22    GPIO3_D4: GPIO &lt;br /&gt;
  23     SPI1CLK: GPIO SPI  &lt;br /&gt;
  24      SPI1CS: GPIO SPI  &lt;br /&gt;
  25         GND: &lt;br /&gt;
  26     ADC_IN0: AIO  &lt;br /&gt;
  27        SDA2: GPIO I2C  &lt;br /&gt;
  28        SCL2: GPIO I2C  &lt;br /&gt;
  29 SCL6,SPI2RX: GPIO I2C  SPI  &lt;br /&gt;
  30         GND: &lt;br /&gt;
  31 SDA6,SPI2TX: GPIO I2C  SPI  &lt;br /&gt;
  32    GPIO3_D5: GPIO &lt;br /&gt;
  33    GPIO4_D5: GPIO &lt;br /&gt;
  34         GND: &lt;br /&gt;
  35    GPIO2_A4: GPIO &lt;br /&gt;
  36    GPIO2_A2: GPIO &lt;br /&gt;
  37    GPIO3_D6: GPIO &lt;br /&gt;
  38    GPIO2_A3: GPIO &lt;br /&gt;
  39         GND: &lt;br /&gt;
  40    GPIO1_A2: GPIO&lt;br /&gt;
  root@rockpin10:~# mraa-gpio set 40 1           #pin40 pull high&lt;br /&gt;
  root@rockpin10:~# mraa-gpio set 40 0           #pin40 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
ROCK Pi N10 V1.1 provides 2 PWM, PWM0 and PWM1. It is necessary to enable PWM0 and PWM1 at the same time if you need PWM function.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
  root@rockpin10:~# cat /boot/uEnv.txt&lt;br /&gt;
  verbosity=7&lt;br /&gt;
  overlay_prefix=rockchip&lt;br /&gt;
  rootfstype=ext4&lt;br /&gt;
  fdtfile=rockchip/rk3399pro-rockpi-n10-linux.dtb '''rk3399pro-pwm0''' '''rk3399pro-pwm1'''&lt;br /&gt;
  overlays=rk3399pro-console-on-uart2&lt;br /&gt;
  rootuuid=11958cc2-af5a-4e6f-9ad4-2b3baef3eebe&lt;br /&gt;
  initrdsize=0x5649ac&lt;br /&gt;
  kernelversion=4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  initrdimg=initrd.img-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  kernelimg=vmlinuz-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modify the macro PWM in /home/rock/mraa-examples/pwm.c as follows to test PWM0. To test PWM2, change '''#define PWM 11''' to '''#define PWM 13'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
ROCK Pi N10 V1.1 provides 3 I2C,There are  I2C2 ,I2C6, I2C7. If you need the I2C function, you can turn on one or more of them.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
  root@rockpin10:~# cat /boot/uEnv.txt&lt;br /&gt;
  verbosity=7&lt;br /&gt;
  overlay_prefix=rockchip&lt;br /&gt;
  rootfstype=ext4&lt;br /&gt;
  fdtfile=rockchip/rk3399pro-rockpi-n10-linux.dtb '''rk3399pro-i2c2''' '''rk3399pro-i2c6''' '''rk3399pro-i2c7'''&lt;br /&gt;
  overlays=rk3399pro-console-on-uart2&lt;br /&gt;
  rootuuid=11958cc2-af5a-4e6f-9ad4-2b3baef3eebe&lt;br /&gt;
  initrdsize=0x5649ac&lt;br /&gt;
  kernelversion=4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  initrdimg=initrd.img-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  kernelimg=vmlinuz-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
Modify the macro  MPU6050 in '''/home/rock/mraa-examples/i2c_mpu6050.c''' ,as follows to test I2C2. To test I2C6 and I2C7, change '''#define I2C_BUS 0''' to '''#define I2C_BUS 1'''  or'''#define I2C_BUS 2''' .&lt;br /&gt;
&lt;br /&gt;
  /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
   '''#define I2C_BUS 0'''&lt;br /&gt;
   &lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
   accel: x:0 y:0 z:0&lt;br /&gt;
   gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
   accel: x:0 y:0 z:0&lt;br /&gt;
   gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
   accel: x:0 y:0 z:0&lt;br /&gt;
   gyro: x:6 y:136 z:-50&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
ROCK Pi n10 V1.1 provides 2 UART,There are  '''uart2''' ,'''uart4'''. If you need the uatr function, you can turn on one or more of them.&lt;br /&gt;
&lt;br /&gt;
Firstly, Disable console and enable '''uart2''' for uart test.modify the '''/boot/uEnv.txt''' file to add the following&lt;br /&gt;
&lt;br /&gt;
  root@rockpin10:~# cat /boot/uEnv.txt&lt;br /&gt;
  verbosity=7&lt;br /&gt;
  overlay_prefix=rockchip&lt;br /&gt;
  rootfstype=ext4&lt;br /&gt;
  fdtfile=rockchip/rk3399pro-rockpi-n10-linux.dtb '''rk3399pro-uart2''' '''rk3399pro-uart4''' &lt;br /&gt;
  '''console='''&lt;br /&gt;
  overlays=rk3399pro-console-on-uart2&lt;br /&gt;
  rootuuid=11958cc2-af5a-4e6f-9ad4-2b3baef3eebe&lt;br /&gt;
  initrdsize=0x5649ac&lt;br /&gt;
  kernelversion=4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  initrdimg=initrd.img-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  kernelimg=vmlinuz-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
&lt;br /&gt;
Here set console to NULL value.&lt;br /&gt;
&lt;br /&gt;
then reboot . use ssh connect to rockpin10,we must have 2 windows,one is for send data,anothor is for receive.&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
 rock@rockpin10:~$ sudo mraa-uart dev 0 baud 1500000 send  radxa&lt;br /&gt;
&lt;br /&gt;
Another window sets the baud  1500000 and receives the data &lt;br /&gt;
&lt;br /&gt;
 radxa&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
 rock@rockpin10:~$ sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
 radxa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
  root@rockpin10:~# cat /boot/uEnv.txt&lt;br /&gt;
  verbosity=7&lt;br /&gt;
  overlay_prefix=rockchip&lt;br /&gt;
  rootfstype=ext4&lt;br /&gt;
  fdtfile=rockchip/rk3399pro-rockpi-n10-linux.dtb '''rk3399pro-spi-spidev''' &lt;br /&gt;
  overlays=rk3399pro-console-on-uart2&lt;br /&gt;
  rootuuid=11958cc2-af5a-4e6f-9ad4-2b3baef3eebe&lt;br /&gt;
  initrdsize=0x5649ac&lt;br /&gt;
  kernelversion=4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  initrdimg=initrd.img-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
  kernelimg=vmlinuz-4.4.167-14-rockchip-g53bdb2fa44e8&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
 #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 /* mraa header */&lt;br /&gt;
 #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 /* SPI declaration */&lt;br /&gt;
 '''#define SPI_BUS 2'''&lt;br /&gt;
 &lt;br /&gt;
 /* SPI frequency in Hz */&lt;br /&gt;
 #define SPI_FREQ 10000000&lt;br /&gt;
 int&lt;br /&gt;
 main(int argc, char** argv)&lt;br /&gt;
 {&lt;br /&gt;
     mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
     mraa_spi_context spi;&lt;br /&gt;
     int i, j;&lt;br /&gt;
 &lt;br /&gt;
     /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
     mraa_init();&lt;br /&gt;
 &lt;br /&gt;
     //! [Interesting]&lt;br /&gt;
     /* initialize SPI bus */&lt;br /&gt;
     spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
     if (spi == NULL) {&lt;br /&gt;
         fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
         mraa_deinit();&lt;br /&gt;
         return EXIT_FAILURE;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     /* set SPI frequency */&lt;br /&gt;
     status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
     if (status != MRAA_SUCCESS)&lt;br /&gt;
         goto err_exit;&lt;br /&gt;
 &lt;br /&gt;
     /* set big endian mode */&lt;br /&gt;
     status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
     if (status != MRAA_SUCCESS) {&lt;br /&gt;
         goto err_exit;&lt;br /&gt;
     }&lt;br /&gt;
    &lt;br /&gt;
     j = 10;&lt;br /&gt;
     while(j) {&lt;br /&gt;
   	j--;&lt;br /&gt;
         printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
     }&lt;br /&gt;
 err_exit:&lt;br /&gt;
     mraa_result_print(status);&lt;br /&gt;
 &lt;br /&gt;
     /* stop spi */&lt;br /&gt;
     mraa_spi_stop(spi);&lt;br /&gt;
 &lt;br /&gt;
     /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
     mraa_deinit();&lt;br /&gt;
 &lt;br /&gt;
      return EXIT_FAILURE;&lt;br /&gt;
 }&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpin10:~/mraa-examples$ gcc -o aio aio.c -lmraa&lt;br /&gt;
rock@rockpin10:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiN10/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiN10&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiN10/dev/libmraa</id>
		<title>RockpiN10/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiN10/dev/libmraa"/>
				<updated>2020-10-12T06:20:10Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiN10_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiN10/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiN10 | ROCK Pi N10]] &amp;gt; [[rockpiN10/dev | Development]] &amp;gt; [[rockpiN10/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi N10 ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi N10.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-stable and buster-stable repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ export DISTRO= buster-testing      # for Buster&lt;br /&gt;
 rock@rockpin10:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get install -y rockchip-overlay rockpin10-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get install -y linux-4.4-rockpin10-latest # ROCK Pi N10 kernel version: &amp;gt;= 4.4.167-14&lt;br /&gt;
&lt;br /&gt;
Install compiler:&lt;br /&gt;
 rock@rockpin10:~$ sudo apt install -y build-essential&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi N10 [[rockpiN10/hardware/gpio | GPIO pintout]]. ROCK Pi N10 has a 40-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V11 =====&lt;br /&gt;
&lt;br /&gt;
25 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A7&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B5&lt;br /&gt;
    PIN08      GPIO4_C4&lt;br /&gt;
    PIN10      GPIO4_C3&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO0_B1&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO0_B0&lt;br /&gt;
    PIN18      GPIO2_A6&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO3_D4&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN29      GPIO2_B2&lt;br /&gt;
    PIN31      GPIO2_B1&lt;br /&gt;
    PIN32      GPIO3_D5&lt;br /&gt;
    PIN33      GPIO2_D5&lt;br /&gt;
    PIN35      GPIO2_A4&lt;br /&gt;
    PIN36      GPIO2_A2&lt;br /&gt;
    PIN37      GPIO3_D6&lt;br /&gt;
    PIN38      GPIO2_A3&lt;br /&gt;
    PIN40      GPIO1_A2 &lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN27      I2C'''2'''_SDA&lt;br /&gt;
    PIN28      I2C'''2'''_SCL&lt;br /&gt;
    PIN29      I2C'''6'''_SCL&lt;br /&gt;
    PIN31      I2C'''6'''_SDA&lt;br /&gt;
    PIN3        I2C'''7'''_SDA&lt;br /&gt;
    PIN5        I2C'''7'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''1'''TX        //must disable UART4&lt;br /&gt;
    PIN21      SPI'''1'''RX        //must disable UART4&lt;br /&gt;
    PIN23      SPI'''1'''CLK&lt;br /&gt;
    PIN24      SPI'''1'''CSN&lt;br /&gt;
&lt;br /&gt;
2 UART:&lt;br /&gt;
    PIN8       UART'''2'''_TX&lt;br /&gt;
    PIN10      UART'''2'''_RX&lt;br /&gt;
    PIN19      UART'''4'''_TX  //must disable SPI1&lt;br /&gt;
    PIN21      UART'''4'''_RX  //must disable SPI1&lt;br /&gt;
   &lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''0'''&lt;br /&gt;
    PIN13      PWM'''1'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN1          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
For those ROCK Pi N10 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].&lt;br /&gt;
&lt;br /&gt;
For those ROCK Pi N10 system images released before March 1st, 2020, the configuration file is /boot/hw_intfc.conf.&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiN10/dev/libmraa</id>
		<title>RockpiN10/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiN10/dev/libmraa"/>
				<updated>2020-10-12T04:04:14Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: Created page with &amp;quot;{{rockpiN10_header}}  {{Languages|rockpiN10/dev/libmraa}}       ROCK Pi N10 &amp;gt;  Development &amp;gt;  Install Libmraa   =...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiN10_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiN10/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiN10 | ROCK Pi N10]] &amp;gt; [[rockpiN10/dev | Development]] &amp;gt; [[rockpiN10/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi N10 ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi N10.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-stable and buster-stable repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ export DISTRO= buster-testing      # for Buster&lt;br /&gt;
 rock@rockpin10:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get install -y rockchip-overlay rockpin10-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpin10:~$ sudo apt-get install -y linux-4.4-rockpin10-latest # ROCK Pi N10 kernel version: &amp;gt;= 4.4.167-14&lt;br /&gt;
&lt;br /&gt;
Install compiler:&lt;br /&gt;
 rock@rockpin10:~$ sudo apt install -y build-essential&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi N10 [[rockpiN10/hardware/gpio | GPIO pintout]]. ROCK Pi N10 has a 40-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V11 =====&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiN10/dev</id>
		<title>RockpiN10/dev</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiN10/dev"/>
				<updated>2020-10-12T03:50:16Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiN10_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiN10/dev}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiN10 | ROCK Pi N10]] &amp;gt; [[rockpiN10/dev | Development]]&lt;br /&gt;
&lt;br /&gt;
This page describe development tips for ROCK Pi N10.&lt;br /&gt;
&lt;br /&gt;
* [[rockpiN10/dev/Debian | Build Debian]]&lt;br /&gt;
* [[rockpiN10/dev/kernel-4.4 | Build vendor kernel(Rockchip 4.4)]]&lt;br /&gt;
* [[rockpiN10/dev/usb-install | Install from USB]]&lt;br /&gt;
* [[rockpiN10/dev/usb-install-for-android-image | Install Android image from USB]]&lt;br /&gt;
* [[RockpiN10/dev/serial-console | Serial Console]](NPU&amp;amp;CPU)&lt;br /&gt;
* [[rockpiN10/dev/NPU-booting | NPU Booting]]&lt;br /&gt;
* [[rockpiN10/dev/libmraa | Install Libmraa ]]&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiE/dev/usbnet</id>
		<title>RockpiE/dev/usbnet</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiE/dev/usbnet"/>
				<updated>2020-10-12T03:45:55Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: Created page with &amp;quot;{{rockpiE_header}} {{Languages|rockpiE/dev/adb}}      ROCK Pi E &amp;gt;  Development &amp;gt;  USB Device Network]  === Requirement ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiE_header}}&lt;br /&gt;
{{Languages|rockpiE/dev/adb}}&lt;br /&gt;
    [[rockpiE | ROCK Pi E]] &amp;gt; [[rockpiE/dev | Development]] &amp;gt; [[rockpiE/dev/usbnet | USB Device Network]]]&lt;br /&gt;
&lt;br /&gt;
=== Requirement ===&lt;br /&gt;
* ROCK Pi E mainboard&lt;br /&gt;
* eMMC module&lt;br /&gt;
* Power adapter&lt;br /&gt;
* USB Male A to Dupont cable.&lt;br /&gt;
** One port is Male A type and the other includes three Dupont lines.&lt;br /&gt;
** Hardware connection&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ROCK Pi E 40-pin Header ||  USB Interface || USB Male A to Dupont Cable&lt;br /&gt;
|-&lt;br /&gt;
| PIN#18 || Data+ || Green wire&lt;br /&gt;
|-&lt;br /&gt;
| PIN#16 || Data- || White wire&lt;br /&gt;
|-&lt;br /&gt;
| PIN#14 || GND || Black wire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:rock-pi-e-usb-mala-a-to-dupont-cable.jpg | 500px ]]&lt;br /&gt;
&lt;br /&gt;
=== Software preparation ===&lt;br /&gt;
&lt;br /&gt;
* Kernel version&lt;br /&gt;
&lt;br /&gt;
USB gadget driver must be enabled to configure usb net. You need to update the kernel to at least version 4.4.194-16 rockchip.&lt;br /&gt;
&lt;br /&gt;
* Stop conflicting services&lt;br /&gt;
&lt;br /&gt;
So far, Dupont cable OTG port only supports one Gadget function. To use use USB net, here need to stop rockchip-adbd service.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@rockpie:~# systemctl stop rockchip-adbd&lt;br /&gt;
root@rockpie:~# systemctl disable rockchip-adbd&lt;br /&gt;
root@rockpie:~# reboot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Load kernel module===&lt;br /&gt;
&lt;br /&gt;
* Connect the ROCK Pi E to PC with a Male A type and the other includes three Dupont lines cable.&lt;br /&gt;
* Install kernel module on ROCK Pi S&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@rockpis:~# modprobe g_ether&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dmesg shoule output the folowing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@rockpis:~# dmesg -c&lt;br /&gt;
[   25.792177] using random self ethernet address&lt;br /&gt;
[   25.792239] using random host ethernet address&lt;br /&gt;
[   25.794179] usb0: HOST MAC fe:fc:51:10:b2:fa&lt;br /&gt;
[   25.794444] usb0: MAC 82:21:a8:1b:f3:4a&lt;br /&gt;
[   25.794539] using random self ethernet address&lt;br /&gt;
[   25.794589] using random host ethernet address&lt;br /&gt;
[   25.794787] g_ether gadget: Ethernet Gadget, version: Memorial Day 2008&lt;br /&gt;
[   25.794819] g_ether gadget: g_ether ready&lt;br /&gt;
[   25.797133] dwc2 ff400000.usb: bound driver g_ether&lt;br /&gt;
[   25.988410] dwc2 ff400000.usb: new device is high-speed&lt;br /&gt;
[   26.068210] dwc2 ff400000.usb: new device is high-speed&lt;br /&gt;
[   26.132742] dwc2 ff400000.usb: new address 39&lt;br /&gt;
[   26.154634] g_ether gadget: high-speed config #1: CDC Ethernet (ECM)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bring up the usb0 device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@rockpie:~# ifconfig usb0 up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you should have usb0 on ROCK Pi E enabled.&lt;br /&gt;
&lt;br /&gt;
On the host PC Ubuntu 16.04, the '''dmesg''' gives something like below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
radxa@x86_64_pc:~$ sudo dmesg -c&lt;br /&gt;
[974637.533636] usb 1-4.1: new high-speed USB device number 121 using xhci_hcd&lt;br /&gt;
[974637.635515] usb 1-4.1: New USB device found, idVendor=0525, idProduct=a4a2&lt;br /&gt;
[974637.635520] usb 1-4.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0&lt;br /&gt;
[974637.635523] usb 1-4.1: Product: RNDIS/Ethernet Gadget&lt;br /&gt;
[974637.635525] usb 1-4.1: Manufacturer: Linux 4.4.143-46-rockchip-gef70dd2c725e with ff400000.usb&lt;br /&gt;
[974637.636655] cdc_subset: probe of 1-4.1:1.0 failed with error -22&lt;br /&gt;
[974637.637971] cdc_ether 1-4.1:1.0 usb0: register 'cdc_ether' at usb-0000:00:14.0-4.1, CDC Ethernet Device, 8a:11:bc:e7:60:26&lt;br /&gt;
[974637.650141] cdc_ether 1-4.1:1.0 enp0s20f0u4u1: renamed from usb0&lt;br /&gt;
[974637.678705] IPv6: ADDRCONF(NETDEV_UP): enp0s20f0u4u1: link is not ready&lt;br /&gt;
[974637.694633] IPv6: ADDRCONF(NETDEV_UP): enp0s20f0u4u1: link is not ready&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''enp0s20f0u4u1''' is the &amp;quot;USB network card&amp;quot; for ROCK Pi E. '''ifconfig enp0s20f0u4u1''' gives us the info about it.&lt;br /&gt;
&lt;br /&gt;
=== Setup USB Network ===&lt;br /&gt;
&lt;br /&gt;
On ROCK Pi E.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@rockpie:~# IP=10.0.1.1&lt;br /&gt;
root@rockpie:~# HOST_IP=10.0.1.2&lt;br /&gt;
root@rockpie:~# ifconfig usb0 $IP netmask 255.255.255.0&lt;br /&gt;
root@rockpie:~# route&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On host PC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
radxa@x86_64_pc:~$ HOST_IP=10.0.1.2&lt;br /&gt;
radxa@x86_64_pc:~$ sudo ifconfig enp0s20f0u4u1 $HOST_IP netmask 255.255.255.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test the network, on ROCK Pi E&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@rockpie:~# ping $HOST_IP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test network traffic, on host PC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
radxa@x86_64_pc:~$ iperf -s&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
Server listening on TCP port 5001&lt;br /&gt;
TCP window size:  128 KByte (default)&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
[  4] local 10.0.1.2 port 5001 connected with 10.0.1.1 port 48264&lt;br /&gt;
[ ID] Interval       Transfer     Bandwidth&lt;br /&gt;
[  4]  0.0-10.0 sec   113 MBytes  94.6 Mbits/sec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test network traffic, on ROCK Pi E:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@rockpie:~# iperf -c $HOST_IP&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
Client connecting to 10.0.1.2, TCP port 5001&lt;br /&gt;
TCP window size: 85.0 KByte (default)&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
[  3] local 10.0.1.1 port 48264 connected with 10.0.1.2 port 5001&lt;br /&gt;
[ ID] Interval       Transfer     Bandwidth&lt;br /&gt;
[  3]  0.0-10.0 sec   113 MBytes  94.8 Mbits/sec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiE/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiE&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiE/dev/adb</id>
		<title>RockpiE/dev/adb</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiE/dev/adb"/>
				<updated>2020-10-10T01:51:52Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiE_header}}&lt;br /&gt;
{{Languages|rockpiE/dev/adb}}&lt;br /&gt;
    [[rockpiE | ROCK Pi E]] &amp;gt; [[rockpiE/dev | Development]] &amp;gt; [[rockpiE/dev/adb | Using adb]]&lt;br /&gt;
&lt;br /&gt;
=== Requirement ===&lt;br /&gt;
* ROCK Pi E mainboard&lt;br /&gt;
* eMMC module&lt;br /&gt;
* Power adapter&lt;br /&gt;
* USB Male A to Dupont cable.&lt;br /&gt;
** One port is Male A type and the other includes three Dupont lines.&lt;br /&gt;
** Hardware connection&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ROCK Pi E 40-pin Header ||  USB Interface || USB Male A to Dupont Cable&lt;br /&gt;
|-&lt;br /&gt;
| PIN#18 || Data+ || Green wire&lt;br /&gt;
|-&lt;br /&gt;
| PIN#16 || Data- || White wire&lt;br /&gt;
|-&lt;br /&gt;
| PIN#14 || GND || Black wire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:rock-pi-e-usb-mala-a-to-dupont-cable.jpg | 500px ]]&lt;br /&gt;
&lt;br /&gt;
===Hardware support===&lt;br /&gt;
&lt;br /&gt;
Support hardware platform:&lt;br /&gt;
* ROCK Pi S V1.1&lt;br /&gt;
* ROCK Pi S V1.2&lt;br /&gt;
&lt;br /&gt;
You'd better follow the installation steps.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Refer [[Rock/windows_adb | Windows ADB]]&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Refer [[Rock/linux_adb | Linux ADB]]&lt;br /&gt;
&lt;br /&gt;
===ADB Usage===&lt;br /&gt;
&lt;br /&gt;
When you have adb driver installed on PC, below are some common used adb commands: &lt;br /&gt;
&lt;br /&gt;
====Check adb devices====&lt;br /&gt;
&lt;br /&gt;
  $ adb devices&lt;br /&gt;
  List of devices attached &lt;br /&gt;
  0123456789ABCDEF	device&lt;br /&gt;
&lt;br /&gt;
====Login/Shell====&lt;br /&gt;
&lt;br /&gt;
  $ adb shell&lt;br /&gt;
  # &lt;br /&gt;
&lt;br /&gt;
And type /bin/bash followed by Enter key to switch to bash shell.&lt;br /&gt;
&lt;br /&gt;
  $ adb shell&lt;br /&gt;
  # /bin/bash&lt;br /&gt;
  root@rockpie:/# &lt;br /&gt;
  root@rockpie:/# &lt;br /&gt;
&lt;br /&gt;
====Transmit files from PC to ROCK Pi E====&lt;br /&gt;
&lt;br /&gt;
  $ adb push &amp;lt;local path&amp;gt; &amp;lt;remote path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
On PC, input the following in Terminal&lt;br /&gt;
&lt;br /&gt;
  $ adb push /tmp/meet-rockpie.md /home/rock&lt;br /&gt;
  0 KB/s (26 bytes in 0.045s)&lt;br /&gt;
&lt;br /&gt;
Check on ROCK Pi E&lt;br /&gt;
&lt;br /&gt;
  root@rockpis:/home/rock# cat meet-rockpie.md &lt;br /&gt;
  How do you do! ROCK Pi E!&lt;br /&gt;
&lt;br /&gt;
====Transmit files from ROCK Pi E to PC====&lt;br /&gt;
&lt;br /&gt;
  $ adb pull &amp;lt;remote path&amp;gt; &amp;lt;local path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  $ adb pull /home/rock/meet-pc.md /tmp/&lt;br /&gt;
  0 KB/s (19 bytes in 0.086s)&lt;br /&gt;
  &lt;br /&gt;
  $ cat /tmp/meet-pc.md &lt;br /&gt;
  How do you do! PC!&lt;br /&gt;
&lt;br /&gt;
=== FAQs ===&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
If adb device is not detected on host PC, try to [[RockpiS/ssh | ssh]] or use [[rockpiE/dev/serial-console  | serial console]] first and try the following:&lt;br /&gt;
&lt;br /&gt;
Firstly, update rockchip-overlay and  kernel packages.&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install -y rockchip-overlay &lt;br /&gt;
  $ sudo apt-get install -y linux-4.4-rockpie&lt;br /&gt;
&lt;br /&gt;
Secondly, install rockchip-adb package.&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install -y rockchip-adbd&lt;br /&gt;
&lt;br /&gt;
Finally, start rockchip service&lt;br /&gt;
&lt;br /&gt;
  $ sudo systemctl start rockchip-adbd&lt;br /&gt;
&lt;br /&gt;
=== Usage of rockchi-adb service ===&lt;br /&gt;
&lt;br /&gt;
Start rockchip-adb service&lt;br /&gt;
&lt;br /&gt;
  $ sudo systemctl start rockchip-adbd&lt;br /&gt;
&lt;br /&gt;
Stop rockchip-adb service&lt;br /&gt;
&lt;br /&gt;
  $ sudo systemctl stop rockchip-adbd&lt;br /&gt;
&lt;br /&gt;
Reload rockchip-adb service&lt;br /&gt;
&lt;br /&gt;
  $ sudo systemctl reload rockchip-adbd&lt;br /&gt;
  or&lt;br /&gt;
  $ sudo systemctl restart rockchip-adbd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you still have issue with adb, start a new post on the forum. https://forum.radxa.com/c/dev&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiE/dev/adb</id>
		<title>RockpiE/dev/adb</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiE/dev/adb"/>
				<updated>2020-10-10T01:47:59Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiE_header}}&lt;br /&gt;
{{Languages|rockpiE/dev/adb}}&lt;br /&gt;
    [[rockpiE | ROCK Pi E]] &amp;gt; [[rockpiE/dev | Development]] &amp;gt; [[rockpiE/dev/adb | Using adb]]&lt;br /&gt;
&lt;br /&gt;
=== Requirement ===&lt;br /&gt;
* ROCK Pi E mainboard&lt;br /&gt;
* eMMC module&lt;br /&gt;
* Power adapter&lt;br /&gt;
* USB Male A to Dupont cable.&lt;br /&gt;
** One port is Male A type and the other includes three Dupont lines.&lt;br /&gt;
** Hardware connection&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ROCK Pi E 40-pin Header ||  USB Interface || USB Male A to Dupont Cable&lt;br /&gt;
|-&lt;br /&gt;
| PIN#18 || Data+ || Green wire&lt;br /&gt;
|-&lt;br /&gt;
| PIN#16 || Data- || White wire&lt;br /&gt;
|-&lt;br /&gt;
| PIN#14 || GND || Black wire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:rock-pi-e-usb-mala-a-to-dupont-cable.jpg | 500px ]]&lt;br /&gt;
&lt;br /&gt;
===Hardware support===&lt;br /&gt;
&lt;br /&gt;
Support hardware platform:&lt;br /&gt;
* ROCK Pi S V1.1&lt;br /&gt;
* ROCK Pi S V1.2&lt;br /&gt;
&lt;br /&gt;
You'd better follow the installation steps.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Refer [[Rock/windows_adb | Windows ADB]]&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Refer [[Rock/linux_adb | Linux ADB]]&lt;br /&gt;
&lt;br /&gt;
===ADB Usage===&lt;br /&gt;
&lt;br /&gt;
When you have adb driver installed on PC, below are some common used adb commands: &lt;br /&gt;
&lt;br /&gt;
====Check adb devices====&lt;br /&gt;
&lt;br /&gt;
  $ adb devices&lt;br /&gt;
  List of devices attached &lt;br /&gt;
  0123456789ABCDEF	device&lt;br /&gt;
&lt;br /&gt;
====Login/Shell====&lt;br /&gt;
&lt;br /&gt;
  $ adb shell&lt;br /&gt;
  # &lt;br /&gt;
&lt;br /&gt;
And type /bin/bash followed by Enter key to switch to bash shell.&lt;br /&gt;
&lt;br /&gt;
  $ adb shell&lt;br /&gt;
  # /bin/bash&lt;br /&gt;
  root@rockpie:/# &lt;br /&gt;
  root@rockpie:/# &lt;br /&gt;
&lt;br /&gt;
====Transmit files from PC to ROCK Pi E====&lt;br /&gt;
&lt;br /&gt;
  $ adb push &amp;lt;local path&amp;gt; &amp;lt;remote path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
On PC, input the following in Terminal&lt;br /&gt;
&lt;br /&gt;
  $ adb push /tmp/meet-rockpie.md /home/rock&lt;br /&gt;
  0 KB/s (26 bytes in 0.045s)&lt;br /&gt;
&lt;br /&gt;
Check on ROCK Pi E&lt;br /&gt;
&lt;br /&gt;
  root@rockpis:/home/rock# cat meet-rockpie.md &lt;br /&gt;
  How do you do! ROCK Pi E!&lt;br /&gt;
&lt;br /&gt;
====Transmit files from ROCK Pi E to PC====&lt;br /&gt;
&lt;br /&gt;
  $ adb pull &amp;lt;remote path&amp;gt; &amp;lt;local path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  $ adb pull /home/rock/meet-pc.md /tmp/&lt;br /&gt;
  0 KB/s (19 bytes in 0.086s)&lt;br /&gt;
  &lt;br /&gt;
  $ cat /tmp/meet-pc.md &lt;br /&gt;
  How do you do! PC!&lt;br /&gt;
&lt;br /&gt;
=== FAQs ===&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
If adb device is not detected on host PC, try to [[RockpiS/ssh | ssh]] or use [[rockpiE/dev/serial-console  | serial console]] first and try the following:&lt;br /&gt;
&lt;br /&gt;
Firstly, update rockchip-overlay and  kernel packages.&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install -y rockchip-overlay # &amp;gt;= 2.2&lt;br /&gt;
  $ sudo apt-get install -y linux-4.4-rockpis # &amp;gt;= 4.4.143-34-rockchip&lt;br /&gt;
&lt;br /&gt;
Secondly, install rockchip-adb package.&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install -y rockchip-adb # &amp;gt;= 0.3&lt;br /&gt;
&lt;br /&gt;
Finally, start rockchip service&lt;br /&gt;
&lt;br /&gt;
  $ sudo systemctl start rockchip-adb&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiE/dev/adb</id>
		<title>RockpiE/dev/adb</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiE/dev/adb"/>
				<updated>2020-10-10T01:44:57Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiE_header}}&lt;br /&gt;
{{Languages|rockpiE/dev/adb}}&lt;br /&gt;
    [[rockpiE | ROCK Pi E]] &amp;gt; [[rockpiE/dev | Development]] &amp;gt; [[rockpiE/dev/adb | Using adb]]&lt;br /&gt;
&lt;br /&gt;
=== Requirement ===&lt;br /&gt;
* ROCK Pi E mainboard&lt;br /&gt;
* eMMC module&lt;br /&gt;
* Power adapter&lt;br /&gt;
* USB Male A to Dupont cable.&lt;br /&gt;
** One port is Male A type and the other includes three Dupont lines.&lt;br /&gt;
** Hardware connection&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ROCK Pi E 40-pin Header ||  USB Interface || USB Male A to Dupont Cable&lt;br /&gt;
|-&lt;br /&gt;
| PIN#18 || Data+ || Green wire&lt;br /&gt;
|-&lt;br /&gt;
| PIN#16 || Data- || White wire&lt;br /&gt;
|-&lt;br /&gt;
| PIN#14 || GND || Black wire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:rock-pi-e-usb-mala-a-to-dupont-cable.jpg | 500px ]]&lt;br /&gt;
&lt;br /&gt;
===Hardware support===&lt;br /&gt;
&lt;br /&gt;
Support hardware platform:&lt;br /&gt;
* ROCK Pi S V1.1&lt;br /&gt;
* ROCK Pi S V1.2&lt;br /&gt;
&lt;br /&gt;
You'd better follow the installation steps.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Refer [[Rock/windows_adb | Windows ADB]]&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
Refer [[Rock/linux_adb | Linux ADB]]&lt;br /&gt;
&lt;br /&gt;
===ADB Usage===&lt;br /&gt;
&lt;br /&gt;
When you have adb driver installed on PC, below are some common used adb commands: &lt;br /&gt;
&lt;br /&gt;
====Check adb devices====&lt;br /&gt;
&lt;br /&gt;
  $ adb devices&lt;br /&gt;
  List of devices attached &lt;br /&gt;
  0123456789ABCDEF	device&lt;br /&gt;
&lt;br /&gt;
====Login/Shell====&lt;br /&gt;
&lt;br /&gt;
  $ adb shell&lt;br /&gt;
  # &lt;br /&gt;
&lt;br /&gt;
And type /bin/bash followed by Enter key to switch to bash shell.&lt;br /&gt;
&lt;br /&gt;
  $ adb shell&lt;br /&gt;
  # /bin/bash&lt;br /&gt;
  root@rockpie:/# &lt;br /&gt;
  root@rockpie:/# &lt;br /&gt;
&lt;br /&gt;
====Transmit files from PC to ROCK Pi E====&lt;br /&gt;
&lt;br /&gt;
  $ adb push &amp;lt;local path&amp;gt; &amp;lt;remote path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
On PC, input the following in Terminal&lt;br /&gt;
&lt;br /&gt;
  $ adb push /tmp/meet-rockpie.md /home/rock&lt;br /&gt;
  0 KB/s (26 bytes in 0.045s)&lt;br /&gt;
&lt;br /&gt;
Check on ROCK Pi E&lt;br /&gt;
&lt;br /&gt;
  root@rockpis:/home/rock# cat meet-rockpie.md &lt;br /&gt;
  How do you do! ROCK Pi E!&lt;br /&gt;
&lt;br /&gt;
====Transmit files from ROCK Pi E to PC====&lt;br /&gt;
&lt;br /&gt;
  $ adb pull &amp;lt;remote path&amp;gt; &amp;lt;local path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  $ adb pull /home/rock/meet-pc.md /tmp/&lt;br /&gt;
  0 KB/s (19 bytes in 0.086s)&lt;br /&gt;
  &lt;br /&gt;
  $ cat /tmp/meet-pc.md &lt;br /&gt;
  How do you do! PC!&lt;br /&gt;
&lt;br /&gt;
=== FAQs ===&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
If adb device is not detected on host PC, try to [[RockpiS/ssh | ssh]] or use [[RockpiS/dev/serial-console | serial console]] first and try the following:&lt;br /&gt;
&lt;br /&gt;
Firstly, update rockchip-overlay and  kernel packages.&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install -y rockchip-overlay # &amp;gt;= 2.2&lt;br /&gt;
  $ sudo apt-get install -y linux-4.4-rockpis # &amp;gt;= 4.4.143-34-rockchip&lt;br /&gt;
&lt;br /&gt;
Secondly, install rockchip-adb package.&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install -y rockchip-adb # &amp;gt;= 0.3&lt;br /&gt;
&lt;br /&gt;
Finally, start rockchip service&lt;br /&gt;
&lt;br /&gt;
  $ sudo systemctl start rockchip-adb&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiE/dev/adb</id>
		<title>RockpiE/dev/adb</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiE/dev/adb"/>
				<updated>2020-10-10T01:32:57Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: Created page with &amp;quot;{{rockpiE_header}} {{Languages|rockpiE/dev/adb}}      ROCK Pi E &amp;gt;  Development &amp;gt;  Using adb  === Requirement === * ROCK Pi E...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiE_header}}&lt;br /&gt;
{{Languages|rockpiE/dev/adb}}&lt;br /&gt;
    [[rockpiE | ROCK Pi E]] &amp;gt; [[rockpiE/dev | Development]] &amp;gt; [[rockpiE/dev/adb | Using adb]]&lt;br /&gt;
&lt;br /&gt;
=== Requirement ===&lt;br /&gt;
* ROCK Pi E mainboard&lt;br /&gt;
* eMMC module&lt;br /&gt;
* Power adapter&lt;br /&gt;
* USB Male A to Dupont cable.&lt;br /&gt;
** One port is Male A type and the other includes three Dupont lines.&lt;br /&gt;
** Hardware connection&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ROCK Pi E 40-pin Header ||  USB Interface || USB Male A to Dupont Cable&lt;br /&gt;
|-&lt;br /&gt;
| PIN#18 || Data+ || Green wire&lt;br /&gt;
|-&lt;br /&gt;
| PIN#16 || Data- || White wire&lt;br /&gt;
|-&lt;br /&gt;
| PIN#14 || GND || Black wire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:rock-pi-e-usb-mala-a-to-dupont-cable.jpg | 500px ]]&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiE/dev</id>
		<title>RockpiE/dev</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiE/dev"/>
				<updated>2020-10-09T11:24:49Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiE_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiE/dev}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiE | ROCK Pi E]] &amp;gt; [[rockpiE/dev | Development]]&lt;br /&gt;
&lt;br /&gt;
This page describe development tips for ROCK Pi E.&lt;br /&gt;
&lt;br /&gt;
* [[rockpiE/dev/usb-install | USB Intallation]]-How to use PC tools to install image on ROCK Pi E&lt;br /&gt;
* [[rockpiE/dev/Debian | Build Debian]]&lt;br /&gt;
* [[Yocto-layer-for-radxa-boards | Build Yocto ]]&lt;br /&gt;
* [[rockpiE/dev/kernel-4.4 | Build vendor kernel(Rockchip 4.4)]]&lt;br /&gt;
* [[rockpiE/dev/serial-console | Serial Console]]&lt;br /&gt;
* [[rockpiE/dev/device-serial-number | Device Serial Number]]&lt;br /&gt;
* [[rockpiE/dev/libmraa | Using Libmraa ]]&lt;br /&gt;
* [[rockpiE/dev/adb | Using adb]]&lt;br /&gt;
* [[rockpiE/dev/usbnet | USB Device Network]]&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiE/dev</id>
		<title>RockpiE/dev</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiE/dev"/>
				<updated>2020-10-09T08:06:15Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiE_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiE/dev}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiE | ROCK Pi E]] &amp;gt; [[rockpiE/dev | Development]]&lt;br /&gt;
&lt;br /&gt;
This page describe development tips for ROCK Pi E.&lt;br /&gt;
&lt;br /&gt;
* [[rockpiE/dev/usb-install | USB Intallation]]-How to use PC tools to install image on ROCK Pi E&lt;br /&gt;
* [[rockpiE/dev/Debian | Build Debian]]&lt;br /&gt;
* [[Yocto-layer-for-radxa-boards | Build Yocto ]]&lt;br /&gt;
* [[rockpiE/dev/kernel-4.4 | Build vendor kernel(Rockchip 4.4)]]&lt;br /&gt;
* [[rockpiE/dev/serial-console | Serial Console]]&lt;br /&gt;
* [[rockpiE/dev/device-serial-number | Device Serial Number]]&lt;br /&gt;
* [[rockpiE/dev/libmraa | Using Libmraa ]]&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiE/dev</id>
		<title>RockpiE/dev</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiE/dev"/>
				<updated>2020-10-09T08:05:26Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiE_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiE/dev}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiE | ROCK Pi E]] &amp;gt; [[rockpiE/dev | Development]]&lt;br /&gt;
&lt;br /&gt;
This page describe development tips for ROCK Pi E.&lt;br /&gt;
&lt;br /&gt;
* [[rockpiE/dev/usb-install | USB Intallation]]-How to use PC tools to install image on ROCK Pi E&lt;br /&gt;
* [[rockpiE/dev/Debian | Build Debian]]&lt;br /&gt;
* [[Yocto-layer-for-radxa-boards | Build Yocto ]]&lt;br /&gt;
* [[rockpiE/dev/kernel-4.4 | Build vendor kernel(Rockchip 4.4)]]&lt;br /&gt;
* [[rockpiE/dev/serial-console | Serial Console]]&lt;br /&gt;
* [[rockpiE/dev/device-serial-number | Device Serial Number]]&lt;br /&gt;
* [[rockpiE/dev/libmraa | Using Libmraa ]]&lt;br /&gt;
* [[rockpiE/dev/usb-otg | Using OTG for ROCK PI E ]]&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/network-management</id>
		<title>RockpiS/network-management</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/network-management"/>
				<updated>2020-05-07T07:54:24Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/usbnet}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[RockpiS/network-management | ROCK Pi S Network Management]]&lt;br /&gt;
&lt;br /&gt;
This guide describes how to manage the network on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
Rockpis static address settings.First, install some dependency packages&lt;br /&gt;
    sudo apt-get install netplan.io&lt;br /&gt;
Create the '''01-netcfg.yaml'''  file in the folder /etc/netplan. If there is no netplan folder, you need to create.&lt;br /&gt;
    sudo mkdir /etc/netplan&lt;br /&gt;
    sudo touch /etc/netplan/01-netcfg.yaml&lt;br /&gt;
Add the following to the file '''01-netcfg.yaml'''&lt;br /&gt;
   rock@rockpis:/etc/netplan$ cat 01-netcfg.yaml  &lt;br /&gt;
    network:&lt;br /&gt;
  version: 2&lt;br /&gt;
  renderer: networkd&lt;br /&gt;
  ethernets:&lt;br /&gt;
    eth0:&lt;br /&gt;
      addresses:&lt;br /&gt;
        - 192.168.2.135/24&lt;br /&gt;
      gateway4: 192.168.2.1&lt;br /&gt;
      nameservers:&lt;br /&gt;
          search: [mydomain, otherdomain]&lt;br /&gt;
          addresses: [192.168.2.1, 255.255.255.0]&lt;br /&gt;
&lt;br /&gt;
Execute the following command for the configuration to take effect&lt;br /&gt;
    sudo netplan apply&lt;br /&gt;
then reboot,IP address is what you set.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/network-management</id>
		<title>RockpiS/network-management</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/network-management"/>
				<updated>2020-05-07T07:53:48Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/usbnet}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[RockpiS/network-management | ROCK Pi S Network Management]]&lt;br /&gt;
&lt;br /&gt;
This guide describes how to manage the network on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
Rockpis static address settings.First, install some dependency packages&lt;br /&gt;
    sudo apt-get install netplan.io&lt;br /&gt;
Create the'''01-netcfg.yaml''' file in the folder /etc/netplan.If there is no netplan folder, you need to create.&lt;br /&gt;
    sudo mkdir /etc/netplan&lt;br /&gt;
    sudo touch /etc/netplan/01-netcfg.yaml&lt;br /&gt;
Add the following to the file '''01-netcfg.yaml'''&lt;br /&gt;
   rock@rockpis:/etc/netplan$ cat 01-netcfg.yaml  &lt;br /&gt;
    network:&lt;br /&gt;
  version: 2&lt;br /&gt;
  renderer: networkd&lt;br /&gt;
  ethernets:&lt;br /&gt;
    eth0:&lt;br /&gt;
      addresses:&lt;br /&gt;
        - 192.168.2.135/24&lt;br /&gt;
      gateway4: 192.168.2.1&lt;br /&gt;
      nameservers:&lt;br /&gt;
          search: [mydomain, otherdomain]&lt;br /&gt;
          addresses: [192.168.2.1, 255.255.255.0]&lt;br /&gt;
&lt;br /&gt;
Execute the following command for the configuration to take effect&lt;br /&gt;
    sudo netplan apply&lt;br /&gt;
then reboot,IP address is what you set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-23T08:23:41Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* UART test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-pwm1 rk3308-pwm2 rk3308-pwm3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0  '''rk3308-i2c0 rk3308-i2c1 rk3308-i2c3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
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''' .&lt;br /&gt;
 &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
   '''#define I2C_BUS 0'''&lt;br /&gt;
   &lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, Disable console and enable '''uart0''' for uart test.modify the '''/boot/uEnv.txt''' file to add the following&lt;br /&gt;
   root@rockpis:~# cat /boot/uEnv.txt &lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-uart0 rk3308-uart1 rk3308-uart2&lt;br /&gt;
   rootuuid=c3800af9-fa58-4fb3-bb56-e52fd04837ba&lt;br /&gt;
   initrdsize=0x5c96c3&lt;br /&gt;
   kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then reboot . use ssh connect to rockpis,we must have 2 windows,one is for send data,anothor is for receive.&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
     rock@rockpis:~$ sudo mraa-uart dev 0 baud 1500000 send  radxa&lt;br /&gt;
&lt;br /&gt;
Another window sets the baud  1500000 and receives the data &lt;br /&gt;
    radxa&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
    rock@rockpis:~$  sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
    radxa&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-23T08:13:25Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* UART test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-pwm1 rk3308-pwm2 rk3308-pwm3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0  '''rk3308-i2c0 rk3308-i2c1 rk3308-i2c3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
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''' .&lt;br /&gt;
 &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
   '''#define I2C_BUS 0'''&lt;br /&gt;
   &lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, Disable console and enable uart0 for uart test.modify the '''/boot/uEnv.txt''' file to add the following&lt;br /&gt;
   root@rockpis:~# cat /boot/uEnv.txt &lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-uart0 rk3308-uart1 rk3308-uart2&lt;br /&gt;
   rootuuid=c3800af9-fa58-4fb3-bb56-e52fd04837ba&lt;br /&gt;
   initrdsize=0x5c96c3&lt;br /&gt;
   kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-23T08:12:53Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* UART test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-pwm1 rk3308-pwm2 rk3308-pwm3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0  '''rk3308-i2c0 rk3308-i2c1 rk3308-i2c3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
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''' .&lt;br /&gt;
 &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
   '''#define I2C_BUS 0'''&lt;br /&gt;
   &lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, Disable console and enable uart2 for uart test.modify the '''/boot/uEnv.txt''' file to add the following&lt;br /&gt;
   root@rockpis:~# cat /boot/uEnv.txt &lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-uart0 rk3308-uart1 rk3308-uart2&lt;br /&gt;
   rootuuid=c3800af9-fa58-4fb3-bb56-e52fd04837ba&lt;br /&gt;
   initrdsize=0x5c96c3&lt;br /&gt;
   kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-23T08:10:43Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* UART test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-pwm1 rk3308-pwm2 rk3308-pwm3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0  '''rk3308-i2c0 rk3308-i2c1 rk3308-i2c3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
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''' .&lt;br /&gt;
 &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
   '''#define I2C_BUS 0'''&lt;br /&gt;
   &lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
   root@rockpis:~# cat /boot/uEnv.txt &lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-uart0 rk3308-uart1 rk3308-uart2&lt;br /&gt;
   rootuuid=c3800af9-fa58-4fb3-bb56-e52fd04837ba&lt;br /&gt;
   initrdsize=0x5c96c3&lt;br /&gt;
   kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-23T08:06:01Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* I2C test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-pwm1 rk3308-pwm2 rk3308-pwm3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0  '''rk3308-i2c0 rk3308-i2c1 rk3308-i2c3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
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''' .&lt;br /&gt;
 &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
   '''#define I2C_BUS 0'''&lt;br /&gt;
   &lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
Disable console and enable uart2 for uart test&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-23T08:05:05Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* UART test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-pwm1 rk3308-pwm2 rk3308-pwm3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
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。&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0  '''rk3308-i2c0 rk3308-i2c1 rk3308-i2c3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
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''' .&lt;br /&gt;
 &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
   '''#define I2C_BUS 0'''&lt;br /&gt;
   &lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
Disable console and enable uart2 for uart test&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-23T07:21:19Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* I2C test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-pwm1 rk3308-pwm2 rk3308-pwm3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
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。&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0  '''rk3308-i2c0 rk3308-i2c1 rk3308-i2c3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
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''' .&lt;br /&gt;
 &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
   '''#define I2C_BUS 0'''&lt;br /&gt;
   &lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o i2c_mpu6050 i2c_mpu6050.c  -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-23T07:19:00Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* I2C test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-pwm1 rk3308-pwm2 rk3308-pwm3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
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。&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0  '''rk3308-i2c0 rk3308-i2c1 rk3308-i2c3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
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''' .&lt;br /&gt;
 &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
   '''#define I2C_BUS 0'''&lt;br /&gt;
   &lt;br /&gt;
Run the compiled file&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-23T07:16:45Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-pwm1 rk3308-pwm2 rk3308-pwm3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
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。&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0  '''rk3308-i2c0 rk3308-i2c1 rk3308-i2c3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
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''' .&lt;br /&gt;
    &lt;br /&gt;
Run the compiled file&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-23T07:06:02Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* I2C test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-pwm1 rk3308-pwm2 rk3308-pwm3'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
&lt;br /&gt;
We use  MPU6050 tets i2c.&lt;br /&gt;
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''' .&lt;br /&gt;
    &lt;br /&gt;
Run the compiled file&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-22T01:32:25Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* PWM test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0  '''rk3308-pwm1 rk3308-pwm2 rk3308-pwm3''' &lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
&lt;br /&gt;
Use mraa-i2c tool to test. Here we use I2C MPU6050&lt;br /&gt;
    rock@rockpis:~/mraa-examples$ cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    '''#define I2C_BUS 1'''&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    rock@rockpis:~/mraa-examples$ gcc i2c_mpu6050 i2c_mpu6050.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-22T01:10:46Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* PWM test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0  rk3308-pwm1 rk3308-pwm2 rk3308-pwm3 &lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
&lt;br /&gt;
Use mraa-i2c tool to test. Here we use I2C MPU6050&lt;br /&gt;
    rock@rockpis:~/mraa-examples$ cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    '''#define I2C_BUS 1'''&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    rock@rockpis:~/mraa-examples$ gcc i2c_mpu6050 i2c_mpu6050.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-22T01:09:45Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* PWM test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
    [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ export DISTRO=buster-testing      # for Buster&lt;br /&gt;
 rock@rockpis:~$ echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$  wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get update&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa # libmraa version: &amp;gt;=0.4&lt;br /&gt;
 rock@rockpis:~$ sudo apt-get install -y linux-4.4-rockpis-latest # ROCK Pi S kernel version: &amp;gt;= 4.4.143-47&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define is shown below:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~$ cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
And we copy them to home directory.&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ cp -av /usr/local/share/mraa/examples/c /home/rock/mraa-examples&lt;br /&gt;
&lt;br /&gt;
You should pay more attention to the Black Bold words when modifying configuration file /boot/uEnv.txt.&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:~# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:~# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
&lt;br /&gt;
===== PWM test =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the /boot/uEnv.txt file to add the following&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
verbosity=7&lt;br /&gt;
overlay_prefix=rockchip&lt;br /&gt;
rootfstype=ext4&lt;br /&gt;
fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
overlays=rk3308-console-on-uart0 '''rk3308-pwm1 rk3308-pwm2 rk3308-pwm3'''&lt;br /&gt;
rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
initrdsize=0x64d1d4&lt;br /&gt;
kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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'''.&lt;br /&gt;
&lt;br /&gt;
 '''/* PWM declaration */'''&lt;br /&gt;
 '''#define PWM 11'''&lt;br /&gt;
&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./pwm &lt;br /&gt;
 PWM value is 0.010015&lt;br /&gt;
 PWM value is 0.019985&lt;br /&gt;
 PWM value is 0.030000&lt;br /&gt;
 PWM value is 0.040014&lt;br /&gt;
 PWM value is 0.049984&lt;br /&gt;
 PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== I2C test =====&lt;br /&gt;
&lt;br /&gt;
Use mraa-i2c tool to test. Here we use I2C MPU6050&lt;br /&gt;
    rock@rockpis:~/mraa-examples$ cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    '''#define I2C_BUS 1'''&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    rock@rockpis:~/mraa-examples$ gcc i2c_mpu6050 i2c_mpu6050.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./i2c_mpu6050&lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-10 y:1 z:7&lt;br /&gt;
   &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
 accel: x:0 y:0 z:0&lt;br /&gt;
 gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== UART test =====&lt;br /&gt;
&lt;br /&gt;
===== SPI test =====&lt;br /&gt;
&lt;br /&gt;
Firstly, modify the '''/boot/uEnv.txt''' file.&lt;br /&gt;
&lt;br /&gt;
 root@rockpis:~# cat /boot/uEnv.txt&lt;br /&gt;
 verbosity=7&lt;br /&gt;
 overlay_prefix=rockchip&lt;br /&gt;
 rootfstype=ext4&lt;br /&gt;
 fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
 overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
 '''param_spidev_spi_bus=2'''&lt;br /&gt;
 rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
 initrdsize=0x64d1d4&lt;br /&gt;
 kernelversion=4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 initrdimg=initrd.img-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
 kernelimg=vmlinuz-4.4.143-47-rockchip-g495ff574976c&lt;br /&gt;
&lt;br /&gt;
then execute command, sync, followed by '''reboot'''.&lt;br /&gt;
&lt;br /&gt;
Create file test-spi.c and add the following contents.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   '''#define SPI_BUS 2'''&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~/mraa-examples$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
Then short pin19 and pin21 and run  test-spi&lt;br /&gt;
&lt;br /&gt;
 rock@rockpis:~/mraa-examples$ sudo ./test-spi &lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 0xaa&lt;br /&gt;
 MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
===== ADC test =====&lt;br /&gt;
&lt;br /&gt;
connect signal you want to measure, and then compile mraa example c file, aio.c, to test.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rock@rockpis:~/mraa-examples$ gcc aio aio.c -lmraa&lt;br /&gt;
rock@rockpis:~/mraa-examples$ sudo ./aio&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
ADC A0 read 1A5 - 421&lt;br /&gt;
ADC A0 read float - 0.41153&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Development ====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
* Refer [[RockpiS/getting_started/troubleshooting | Troubleshooting page]]&lt;br /&gt;
* Post your issue on the forum: https://forum.radxa.com/c/rockpiS&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-21T08:18:18Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test pwm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
    export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
    # or&lt;br /&gt;
    export DISTRO=buster-testing      # for Buster&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf24&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
First, modify the / boot/uEnv.txt file to add the following&lt;br /&gt;
   rock@rockpis:~/mraa/src/arm$ cat /boot/uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-pwm1''' &lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
Folder '''/mraa/examples/c/pwm.c'''  has examples of testing PWM,Modify the PWM pin in pwm.c as follows&lt;br /&gt;
   '''/* PWM declaration */'''&lt;br /&gt;
   '''#define PWM 11'''&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ sudo ./pwm &lt;br /&gt;
   PWM value is 0.010015&lt;br /&gt;
   PWM value is 0.019985&lt;br /&gt;
   PWM value is 0.030000&lt;br /&gt;
   PWM value is 0.040014&lt;br /&gt;
   PWM value is 0.049984&lt;br /&gt;
   PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
    root@rockpis:/home/rock/c# cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    #define I2C_BUS 1&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc i2c_mpu6050.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
     root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-10 y:1 z:7&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
enable uart1 for uart test&lt;br /&gt;
    root@rockpis:/home/rock# cat /boot/hw_intfc.conf&lt;br /&gt;
    &lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    &lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=off&lt;br /&gt;
    intfc:i2c1=off&lt;br /&gt;
    intfc:i2c2=off&lt;br /&gt;
    intfc:i2c3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=off&lt;br /&gt;
    intfc:pwm2=off&lt;br /&gt;
    intfc:pwm3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=off&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
    # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
    &lt;br /&gt;
    # Serial console on UART0&lt;br /&gt;
    intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI0 for test. Need set: intfc:spi0=on&lt;br /&gt;
    #intfc:dtoverlay=devspi0&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI2 for test. Need set: intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=devspi2&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS0. Need set: intfc:uart0=on&lt;br /&gt;
    #intfc:dtoverlay=rk3308-uart0&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS1. Need set: intfc:uart1=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart1&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS2. Need set: intfc:uart2=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart2&lt;br /&gt;
&lt;br /&gt;
then reboot and use serial port PIN23 and PIN24&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 send  data&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
&lt;br /&gt;
the receive window will show&lt;br /&gt;
    date&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
First, modify the '''/ boot/uEnv.txt''' file to add the following&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
   '''param_spidev_spi_bus=2'''&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
use c to test spi,compile spi.c,if use spi1,must disable&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   #define SPI_BUS 2&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
then short pin19 and pin21 and run a.out&lt;br /&gt;
   rock@rockpis:~$ sudo ./test-spi &lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
connect signal you want to measure,and then compile mraa examplec file to test.&lt;br /&gt;
&lt;br /&gt;
Folder '''/mraa/examples/c/aio.c''' has examples of testing ADC，compiling it and executing&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc aio.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ ./a.out&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-21T08:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test adc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
    export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
    # or&lt;br /&gt;
    export DISTRO=buster-testing      # for Buster&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf24&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
First, modify the / boot/uEnv.txt file to add the following&lt;br /&gt;
   rock@rockpis:~/mraa/src/arm$ cat /boot/uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-pwm1''' &lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
Folder /mraa/examples/c/pwm.c  has examples of testing PWM,Modify the PWM pin in pwm.c as follows&lt;br /&gt;
   '''/* PWM declaration */'''&lt;br /&gt;
   '''#define PWM 11'''&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ sudo ./pwm &lt;br /&gt;
   PWM value is 0.010015&lt;br /&gt;
   PWM value is 0.019985&lt;br /&gt;
   PWM value is 0.030000&lt;br /&gt;
   PWM value is 0.040014&lt;br /&gt;
   PWM value is 0.049984&lt;br /&gt;
   PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
    root@rockpis:/home/rock/c# cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    #define I2C_BUS 1&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc i2c_mpu6050.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
     root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-10 y:1 z:7&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
enable uart1 for uart test&lt;br /&gt;
    root@rockpis:/home/rock# cat /boot/hw_intfc.conf&lt;br /&gt;
    &lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    &lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=off&lt;br /&gt;
    intfc:i2c1=off&lt;br /&gt;
    intfc:i2c2=off&lt;br /&gt;
    intfc:i2c3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=off&lt;br /&gt;
    intfc:pwm2=off&lt;br /&gt;
    intfc:pwm3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=off&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
    # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
    &lt;br /&gt;
    # Serial console on UART0&lt;br /&gt;
    intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI0 for test. Need set: intfc:spi0=on&lt;br /&gt;
    #intfc:dtoverlay=devspi0&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI2 for test. Need set: intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=devspi2&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS0. Need set: intfc:uart0=on&lt;br /&gt;
    #intfc:dtoverlay=rk3308-uart0&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS1. Need set: intfc:uart1=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart1&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS2. Need set: intfc:uart2=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart2&lt;br /&gt;
&lt;br /&gt;
then reboot and use serial port PIN23 and PIN24&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 send  data&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
&lt;br /&gt;
the receive window will show&lt;br /&gt;
    date&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
First, modify the '''/ boot/uEnv.txt''' file to add the following&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
   '''param_spidev_spi_bus=2'''&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
use c to test spi,compile spi.c,if use spi1,must disable&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   #define SPI_BUS 2&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
then short pin19 and pin21 and run a.out&lt;br /&gt;
   rock@rockpis:~$ sudo ./test-spi &lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
connect signal you want to measure,and then compile mraa examplec file to test.&lt;br /&gt;
&lt;br /&gt;
Folder '''/mraa/examples/c/aio.c''' has examples of testing ADC，compiling it and executing&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc aio.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ ./a.out&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-21T08:17:17Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test adc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
    export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
    # or&lt;br /&gt;
    export DISTRO=buster-testing      # for Buster&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf24&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
First, modify the / boot/uEnv.txt file to add the following&lt;br /&gt;
   rock@rockpis:~/mraa/src/arm$ cat /boot/uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-pwm1''' &lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
Folder /mraa/examples/c/pwm.c  has examples of testing PWM,Modify the PWM pin in pwm.c as follows&lt;br /&gt;
   '''/* PWM declaration */'''&lt;br /&gt;
   '''#define PWM 11'''&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ sudo ./pwm &lt;br /&gt;
   PWM value is 0.010015&lt;br /&gt;
   PWM value is 0.019985&lt;br /&gt;
   PWM value is 0.030000&lt;br /&gt;
   PWM value is 0.040014&lt;br /&gt;
   PWM value is 0.049984&lt;br /&gt;
   PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
    root@rockpis:/home/rock/c# cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    #define I2C_BUS 1&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc i2c_mpu6050.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
     root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-10 y:1 z:7&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
enable uart1 for uart test&lt;br /&gt;
    root@rockpis:/home/rock# cat /boot/hw_intfc.conf&lt;br /&gt;
    &lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    &lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=off&lt;br /&gt;
    intfc:i2c1=off&lt;br /&gt;
    intfc:i2c2=off&lt;br /&gt;
    intfc:i2c3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=off&lt;br /&gt;
    intfc:pwm2=off&lt;br /&gt;
    intfc:pwm3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=off&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
    # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
    &lt;br /&gt;
    # Serial console on UART0&lt;br /&gt;
    intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI0 for test. Need set: intfc:spi0=on&lt;br /&gt;
    #intfc:dtoverlay=devspi0&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI2 for test. Need set: intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=devspi2&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS0. Need set: intfc:uart0=on&lt;br /&gt;
    #intfc:dtoverlay=rk3308-uart0&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS1. Need set: intfc:uart1=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart1&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS2. Need set: intfc:uart2=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart2&lt;br /&gt;
&lt;br /&gt;
then reboot and use serial port PIN23 and PIN24&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 send  data&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
&lt;br /&gt;
the receive window will show&lt;br /&gt;
    date&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
First, modify the '''/ boot/uEnv.txt''' file to add the following&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
   '''param_spidev_spi_bus=2'''&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
use c to test spi,compile spi.c,if use spi1,must disable&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   #define SPI_BUS 2&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
then short pin19 and pin21 and run a.out&lt;br /&gt;
   rock@rockpis:~$ sudo ./test-spi &lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
connect signal you want to measure,and then compile mraa examplec file to test.&lt;br /&gt;
&lt;br /&gt;
Folder ''/mraa/examples/c/aio.c'' has examples of testing ADC，compiling it and executing&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc aio.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ ./a.out&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-21T08:16:57Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test adc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
    export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
    # or&lt;br /&gt;
    export DISTRO=buster-testing      # for Buster&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf24&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
First, modify the / boot/uEnv.txt file to add the following&lt;br /&gt;
   rock@rockpis:~/mraa/src/arm$ cat /boot/uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-pwm1''' &lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
Folder /mraa/examples/c/pwm.c  has examples of testing PWM,Modify the PWM pin in pwm.c as follows&lt;br /&gt;
   '''/* PWM declaration */'''&lt;br /&gt;
   '''#define PWM 11'''&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ sudo ./pwm &lt;br /&gt;
   PWM value is 0.010015&lt;br /&gt;
   PWM value is 0.019985&lt;br /&gt;
   PWM value is 0.030000&lt;br /&gt;
   PWM value is 0.040014&lt;br /&gt;
   PWM value is 0.049984&lt;br /&gt;
   PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
    root@rockpis:/home/rock/c# cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    #define I2C_BUS 1&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc i2c_mpu6050.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
     root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-10 y:1 z:7&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
enable uart1 for uart test&lt;br /&gt;
    root@rockpis:/home/rock# cat /boot/hw_intfc.conf&lt;br /&gt;
    &lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    &lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=off&lt;br /&gt;
    intfc:i2c1=off&lt;br /&gt;
    intfc:i2c2=off&lt;br /&gt;
    intfc:i2c3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=off&lt;br /&gt;
    intfc:pwm2=off&lt;br /&gt;
    intfc:pwm3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=off&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
    # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
    &lt;br /&gt;
    # Serial console on UART0&lt;br /&gt;
    intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI0 for test. Need set: intfc:spi0=on&lt;br /&gt;
    #intfc:dtoverlay=devspi0&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI2 for test. Need set: intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=devspi2&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS0. Need set: intfc:uart0=on&lt;br /&gt;
    #intfc:dtoverlay=rk3308-uart0&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS1. Need set: intfc:uart1=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart1&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS2. Need set: intfc:uart2=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart2&lt;br /&gt;
&lt;br /&gt;
then reboot and use serial port PIN23 and PIN24&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 send  data&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
&lt;br /&gt;
the receive window will show&lt;br /&gt;
    date&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
First, modify the '''/ boot/uEnv.txt''' file to add the following&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
   '''param_spidev_spi_bus=2'''&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
use c to test spi,compile spi.c,if use spi1,must disable&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   #define SPI_BUS 2&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
then short pin19 and pin21 and run a.out&lt;br /&gt;
   rock@rockpis:~$ sudo ./test-spi &lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
connect signal you want to measure,and then compile mraa examplec file to test.&lt;br /&gt;
&lt;br /&gt;
Folder /mraa/examples/c/aio.c has examples of testing ADC，compiling it and executing&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc aio.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ ./a.out&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-21T08:10:38Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test pwm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
    export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
    # or&lt;br /&gt;
    export DISTRO=buster-testing      # for Buster&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf24&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
First, modify the / boot/uEnv.txt file to add the following&lt;br /&gt;
   rock@rockpis:~/mraa/src/arm$ cat /boot/uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-pwm1''' &lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
Folder /mraa/examples/c/pwm.c  has examples of testing PWM,Modify the PWM pin in pwm.c as follows&lt;br /&gt;
   '''/* PWM declaration */'''&lt;br /&gt;
   '''#define PWM 11'''&lt;br /&gt;
Save and compile pwm.c&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc -o pwm pwm.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ sudo ./pwm &lt;br /&gt;
   PWM value is 0.010015&lt;br /&gt;
   PWM value is 0.019985&lt;br /&gt;
   PWM value is 0.030000&lt;br /&gt;
   PWM value is 0.040014&lt;br /&gt;
   PWM value is 0.049984&lt;br /&gt;
   PWM value is 0.059999&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
    root@rockpis:/home/rock/c# cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    #define I2C_BUS 1&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc i2c_mpu6050.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
     root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-10 y:1 z:7&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
enable uart1 for uart test&lt;br /&gt;
    root@rockpis:/home/rock# cat /boot/hw_intfc.conf&lt;br /&gt;
    &lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    &lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=off&lt;br /&gt;
    intfc:i2c1=off&lt;br /&gt;
    intfc:i2c2=off&lt;br /&gt;
    intfc:i2c3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=off&lt;br /&gt;
    intfc:pwm2=off&lt;br /&gt;
    intfc:pwm3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=off&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
    # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
    &lt;br /&gt;
    # Serial console on UART0&lt;br /&gt;
    intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI0 for test. Need set: intfc:spi0=on&lt;br /&gt;
    #intfc:dtoverlay=devspi0&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI2 for test. Need set: intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=devspi2&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS0. Need set: intfc:uart0=on&lt;br /&gt;
    #intfc:dtoverlay=rk3308-uart0&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS1. Need set: intfc:uart1=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart1&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS2. Need set: intfc:uart2=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart2&lt;br /&gt;
&lt;br /&gt;
then reboot and use serial port PIN23 and PIN24&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 send  data&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
&lt;br /&gt;
the receive window will show&lt;br /&gt;
    date&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
First, modify the '''/ boot/uEnv.txt''' file to add the following&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
   '''param_spidev_spi_bus=2'''&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
use c to test spi,compile spi.c,if use spi1,must disable&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   #define SPI_BUS 2&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
then short pin19 and pin21 and run a.out&lt;br /&gt;
   rock@rockpis:~$ sudo ./test-spi &lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
connect signal you want to measure,and then compile mraa examplec file to test.&lt;br /&gt;
&lt;br /&gt;
Folder / mraa / examples / C has examples of testing ADC，compiling it and executing&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc aio.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ ./a.out&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-21T08:02:54Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test pwm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
    export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
    # or&lt;br /&gt;
    export DISTRO=buster-testing      # for Buster&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf24&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
First, modify the / boot/uEnv.txt file to add the following&lt;br /&gt;
   rock@rockpis:~/mraa/src/arm$ cat /boot/uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-pwm1''' &lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
    root@rockpis:/home/rock/c# cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    #define I2C_BUS 1&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc i2c_mpu6050.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
     root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-10 y:1 z:7&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
enable uart1 for uart test&lt;br /&gt;
    root@rockpis:/home/rock# cat /boot/hw_intfc.conf&lt;br /&gt;
    &lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    &lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=off&lt;br /&gt;
    intfc:i2c1=off&lt;br /&gt;
    intfc:i2c2=off&lt;br /&gt;
    intfc:i2c3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=off&lt;br /&gt;
    intfc:pwm2=off&lt;br /&gt;
    intfc:pwm3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=off&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
    # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
    &lt;br /&gt;
    # Serial console on UART0&lt;br /&gt;
    intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI0 for test. Need set: intfc:spi0=on&lt;br /&gt;
    #intfc:dtoverlay=devspi0&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI2 for test. Need set: intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=devspi2&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS0. Need set: intfc:uart0=on&lt;br /&gt;
    #intfc:dtoverlay=rk3308-uart0&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS1. Need set: intfc:uart1=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart1&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS2. Need set: intfc:uart2=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart2&lt;br /&gt;
&lt;br /&gt;
then reboot and use serial port PIN23 and PIN24&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 send  data&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
&lt;br /&gt;
the receive window will show&lt;br /&gt;
    date&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
First, modify the '''/ boot/uEnv.txt''' file to add the following&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
   '''param_spidev_spi_bus=2'''&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
use c to test spi,compile spi.c,if use spi1,must disable&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   #define SPI_BUS 2&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
then short pin19 and pin21 and run a.out&lt;br /&gt;
   rock@rockpis:~$ sudo ./test-spi &lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
connect signal you want to measure,and then compile mraa examplec file to test.&lt;br /&gt;
&lt;br /&gt;
Folder / mraa / examples / C has examples of testing ADC，compiling it and executing&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc aio.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ ./a.out&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-21T07:53:03Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* Hardware V12 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
    export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
    # or&lt;br /&gt;
    export DISTRO=buster-testing      # for Buster&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf24&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
    root@rockpis:/home/rock/c# cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    #define I2C_BUS 1&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc i2c_mpu6050.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
     root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-10 y:1 z:7&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
enable uart1 for uart test&lt;br /&gt;
    root@rockpis:/home/rock# cat /boot/hw_intfc.conf&lt;br /&gt;
    &lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    &lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=off&lt;br /&gt;
    intfc:i2c1=off&lt;br /&gt;
    intfc:i2c2=off&lt;br /&gt;
    intfc:i2c3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=off&lt;br /&gt;
    intfc:pwm2=off&lt;br /&gt;
    intfc:pwm3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=off&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
    # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
    &lt;br /&gt;
    # Serial console on UART0&lt;br /&gt;
    intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI0 for test. Need set: intfc:spi0=on&lt;br /&gt;
    #intfc:dtoverlay=devspi0&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI2 for test. Need set: intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=devspi2&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS0. Need set: intfc:uart0=on&lt;br /&gt;
    #intfc:dtoverlay=rk3308-uart0&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS1. Need set: intfc:uart1=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart1&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS2. Need set: intfc:uart2=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart2&lt;br /&gt;
&lt;br /&gt;
then reboot and use serial port PIN23 and PIN24&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 send  data&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
&lt;br /&gt;
the receive window will show&lt;br /&gt;
    date&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
First, modify the '''/ boot/uEnv.txt''' file to add the following&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
   '''param_spidev_spi_bus=2'''&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
use c to test spi,compile spi.c,if use spi1,must disable&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   #define SPI_BUS 2&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
then short pin19 and pin21 and run a.out&lt;br /&gt;
   rock@rockpis:~$ sudo ./test-spi &lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
connect signal you want to measure,and then compile mraa examplec file to test.&lt;br /&gt;
&lt;br /&gt;
Folder / mraa / examples / C has examples of testing ADC，compiling it and executing&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc aio.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ ./a.out&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-04-21T07:50:02Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* Libmraa on ROCK Pi S */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT bionic-testing and buster-testing repositories.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands to add Radxa APT&lt;br /&gt;
&lt;br /&gt;
    export DISTRO=bionic-testing      # for Bionic&lt;br /&gt;
    # or&lt;br /&gt;
    export DISTRO=buster-testing      # for Buster&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;deb http://apt.radxa.com/$DISTRO/ ${DISTRO%-*} main&amp;quot; | sudo tee -a /etc/apt/sources.list.d/apt-radxa-com.list&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''3'''_SDA&lt;br /&gt;
    PIN15      I2C'''3'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
For those ROCK Pi S system images released before March 1st, 2020, modify '''/boot/hw_intfc.conf''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c3''' for test.&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 rk3308-i2c0 rk3308-i2c1 rk3308-i2c3&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf24&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
    root@rockpis:/home/rock/c# cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    #define I2C_BUS 1&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc i2c_mpu6050.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
     root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-10 y:1 z:7&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
enable uart1 for uart test&lt;br /&gt;
    root@rockpis:/home/rock# cat /boot/hw_intfc.conf&lt;br /&gt;
    &lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    &lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=off&lt;br /&gt;
    intfc:i2c1=off&lt;br /&gt;
    intfc:i2c2=off&lt;br /&gt;
    intfc:i2c3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=off&lt;br /&gt;
    intfc:pwm2=off&lt;br /&gt;
    intfc:pwm3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=off&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
    # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
    &lt;br /&gt;
    # Serial console on UART0&lt;br /&gt;
    intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI0 for test. Need set: intfc:spi0=on&lt;br /&gt;
    #intfc:dtoverlay=devspi0&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI2 for test. Need set: intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=devspi2&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS0. Need set: intfc:uart0=on&lt;br /&gt;
    #intfc:dtoverlay=rk3308-uart0&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS1. Need set: intfc:uart1=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart1&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS2. Need set: intfc:uart2=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart2&lt;br /&gt;
&lt;br /&gt;
then reboot and use serial port PIN23 and PIN24&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 send  data&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
&lt;br /&gt;
the receive window will show&lt;br /&gt;
    date&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
First, modify the '''/ boot/uEnv.txt''' file to add the following&lt;br /&gt;
   rock@rockpis:/boot$ cat uEnv.txt&lt;br /&gt;
   verbosity=7&lt;br /&gt;
   overlay_prefix=rockchip&lt;br /&gt;
   rootfstype=ext4&lt;br /&gt;
   fdtfile=rockchip/rk3308-rock-pi-s.dtb&lt;br /&gt;
   overlays=rk3308-console-on-uart0 '''rk3308-spi-spidev'''&lt;br /&gt;
   '''param_spidev_spi_bus=2'''&lt;br /&gt;
   initrdsize=0x62c6be&lt;br /&gt;
   kernelversion=4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   initrdimg=initrd.img-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   kernelimg=vmlinuz-4.4.143-39-rockchip-gdaf243b9655a&lt;br /&gt;
   rootuuid=37055840-4ec4-444f-979b-9e47ee4bd848&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
use c to test spi,compile spi.c,if use spi1,must disable&lt;br /&gt;
&lt;br /&gt;
   rock@rockpis:~$ cat test-spi.c &lt;br /&gt;
   #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
   /* mraa header */&lt;br /&gt;
   #include &amp;quot;mraa/spi.h&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
   /* SPI declaration */&lt;br /&gt;
   #define SPI_BUS 2&lt;br /&gt;
   &lt;br /&gt;
   /* SPI frequency in Hz */&lt;br /&gt;
   #define SPI_FREQ 10000000&lt;br /&gt;
   int&lt;br /&gt;
   main(int argc, char** argv)&lt;br /&gt;
   {&lt;br /&gt;
       mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
       mraa_spi_context spi;&lt;br /&gt;
       int i, j;&lt;br /&gt;
   &lt;br /&gt;
       /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_init();&lt;br /&gt;
   &lt;br /&gt;
       //! [Interesting]&lt;br /&gt;
       /* initialize SPI bus */&lt;br /&gt;
       spi = mraa_spi_init(SPI_BUS);&lt;br /&gt;
       if (spi == NULL) {&lt;br /&gt;
           fprintf(stderr, &amp;quot;Failed to initialize SPI\n&amp;quot;);&lt;br /&gt;
           mraa_deinit();&lt;br /&gt;
           return EXIT_FAILURE;&lt;br /&gt;
       }&lt;br /&gt;
   &lt;br /&gt;
       /* set SPI frequency */&lt;br /&gt;
       status = mraa_spi_frequency(spi, SPI_FREQ);&lt;br /&gt;
       if (status != MRAA_SUCCESS)&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
   &lt;br /&gt;
       /* set big endian mode */&lt;br /&gt;
       status = mraa_spi_lsbmode(spi, 0);&lt;br /&gt;
       if (status != MRAA_SUCCESS) {&lt;br /&gt;
           goto err_exit;&lt;br /&gt;
       }&lt;br /&gt;
      &lt;br /&gt;
       j = 10;&lt;br /&gt;
       while(j) {&lt;br /&gt;
     	j--;&lt;br /&gt;
           printf(&amp;quot;0x%x\n&amp;quot;,mraa_spi_write(spi, 0xaa));&lt;br /&gt;
       }&lt;br /&gt;
   err_exit:&lt;br /&gt;
       mraa_result_print(status);&lt;br /&gt;
   &lt;br /&gt;
       /* stop spi */&lt;br /&gt;
       mraa_spi_stop(spi);&lt;br /&gt;
   &lt;br /&gt;
       /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
       mraa_deinit();&lt;br /&gt;
   &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   rock@rockpis:~$ gcc -o test-spi test-spi.c -lmraa&lt;br /&gt;
&lt;br /&gt;
then short pin19 and pin21 and run a.out&lt;br /&gt;
   rock@rockpis:~$ sudo ./test-spi &lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   0xaa&lt;br /&gt;
   MRAA: SUCCESS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
connect signal you want to measure,and then compile mraa examplec file to test.&lt;br /&gt;
&lt;br /&gt;
Folder / mraa / examples / C has examples of testing ADC，compiling it and executing&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ gcc aio.c -lmraa&lt;br /&gt;
   rock@rockpis:~/mraa/examples/c$ ./a.out&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
   ADC A0 read 1A5 - 421&lt;br /&gt;
   ADC A0 read float - 0.41153&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiE</id>
		<title>RockpiE</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiE"/>
				<updated>2020-04-09T09:39:57Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiE_header}}&lt;br /&gt;
{{Languages|rockpiE}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-12 &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ROCK Pi E=&lt;br /&gt;
&lt;br /&gt;
E for Ethernets.&lt;br /&gt;
&lt;br /&gt;
This is the documentation for ROCK Pi E, written by Radxa Team with community contributions.&lt;br /&gt;
&lt;br /&gt;
ROCK Pi E is a Rockchip RK3328 based SBC(Single Board Computer) by Radxa. It equips a 64bits quad core processor, USB 3.0, dual ethernets, wireless connectivity at the size of 2.5x2.2 inch(56x65mm), making it perfect for IoT and network applications. ROCK Pi E comes in various ram sizes from 512MB to 4GB DDR3, and uses uSD card for OS and storage as well as supporting eMMC module. Optionally, ROCK Pi E supports PoE, additional HAT is required. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ROCKPI_E_Text.png | 500px  ]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-12 &amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-mango-white&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt; &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-star&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;  [[community_updates | What's new]]&amp;lt;/h3&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
{{community_updates}}&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-hearts-white&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt; &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-hand-o-up&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;  [[RockpiE/getting_started | Setup/Quick start ]]&amp;lt;/h3&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[RockpiE/getting_started | Getting started with ROCK Pi E]]&lt;br /&gt;
* [[RockpiE/hardware/rockpiE#gpio | GPIO pinout]]&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-12 &amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6 &amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-midnight-white&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-download&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; [[RockpiE/install | Installation]]&amp;lt;/h3&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
Installing an operating system on your ROCK PI E, including microSD card, eMMC module, USB drive, etc.&lt;br /&gt;
&lt;br /&gt;
* [[RockpiE/install/microSD | Install on microSD card]]&lt;br /&gt;
* [[RockpiE/install/eMMC | Install on eMMC module]]&lt;br /&gt;
* [[RockpiE/radxa-apt | Update from Radxa Apt]]&lt;br /&gt;
* [[RockpiE/partitions | Partition table]]&lt;br /&gt;
[[RockpiE/install| &amp;gt; More...]]&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6 &amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-mango-white&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-cog&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; [[RockpiE/dev | Development]]&amp;lt;/h3&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
Information about Linux development&lt;br /&gt;
* [[RockpiE/dev/usb-install | USB Intallation]]-How to use PC tools to install image on ROCK Pi E&lt;br /&gt;
* [[RockpiE/dev/Debian | Build Debian]]&lt;br /&gt;
* [[RockpiE/dev/kernel-4.4 | Build vendor kernel(Rockchip 4.4)]]&lt;br /&gt;
* [[RockpiE/dev/serial-console | Serial Console]]&lt;br /&gt;
* [[rockpiE/dev/device-serial-number | Device Serial Number]]&lt;br /&gt;
[[RockpiE/dev| &amp;gt; More...]]&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-12 &amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6 &amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-cello-white&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-hdd-o&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;  [[RockpiE/hardware|Hardware]] &amp;lt;/h3&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
Technical specifications about the ROCK Pi E hardware, including WI-FI module, LCD module, etc.&lt;br /&gt;
&lt;br /&gt;
* [[RockpiE/hardware/rockpiE | Main board]] - Hardware introduction of the ROCK Pi E&lt;br /&gt;
* [[RockpiE/hardware/gpio | GPIO]] - GPIO pinout&amp;amp;numbers&lt;br /&gt;
* [[rockpiE/hardware/models | Models and SKU]]&lt;br /&gt;
* [https://wiki.radxa.com/Device-tree-overlays Device Tree Overlays]&lt;br /&gt;
* [[RockpiE/hardware/display | Display]]&lt;br /&gt;
&lt;br /&gt;
[[RockpiE/hardware| &amp;gt; More...]]&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6 &amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-gunmetal-white&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-linux&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; [[RockpiE/Debian Working With Linux | Working With Linux ]]&amp;lt;/h3&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
Fundamental Linux usage for beginners and more advanced information for power users.&lt;br /&gt;
* [[RockpiE/Debian | Debian]]&lt;br /&gt;
* [[RockpiE/radxa-apt | Radxa APT]]&lt;br /&gt;
* [[RockpiE/downloads | Images official/3rd party/community]]&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-12 &amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6 &amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-cocktail-white&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-question&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; [[RockpiE/FAQs | FAQs]]&amp;lt;/h3&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* Answers to frequently asked technical questions&lt;br /&gt;
* Answers to sale of ROCK Pi E&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6 &amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-cocktail-white&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-users&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Community&amp;lt;/h3&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* Forum: http://forum.radxa.com&lt;br /&gt;
* [[Rockpi4/contribute | How to contribute to this wiki, refer ROCK Pi 4 contribution page]]&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiE</id>
		<title>RockpiE</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiE"/>
				<updated>2020-04-09T09:36:19Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiE_header}}&lt;br /&gt;
{{Languages|rockpiE}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-12 &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ROCK Pi E=&lt;br /&gt;
&lt;br /&gt;
E for Ethernets.&lt;br /&gt;
&lt;br /&gt;
This is the documentation for ROCK Pi E, written by Radxa Team with community contributions.&lt;br /&gt;
&lt;br /&gt;
ROCK Pi E is a Rockchip RK3328 based SBC(Single Board Computer) by Radxa. It equips a 64bits quad core processor, USB 3.0, dual ethernets, wireless connectivity at the size of 2.5x2.2 inch(56x65mm), making it perfect for IoT and network applications. ROCK Pi E comes in various ram sizes from 512MB to 4GB DDR3, and uses uSD card for OS and storage as well as supporting eMMC module. Optionally, ROCK Pi E supports PoE, additional HAT is required. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ROCKPI_E_Text.png | 500px  ]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-12 &amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-mango-white&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt; &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-star&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;  [[community_updates | What's new]]&amp;lt;/h3&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
{{community_updates}}&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-hearts-white&amp;quot;&amp;gt; &lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt; &amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-hand-o-up&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;  [[RockpiE/getting_started | Setup/Quick start ]]&amp;lt;/h3&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* [[RockpiE/getting_started | Getting started with ROCK Pi E]]&lt;br /&gt;
* [[RockpiE/hardware/rockpiE#gpio | GPIO pinout]]&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-12 &amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6 &amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-midnight-white&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-download&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; [[RockpiE/install | Installation]]&amp;lt;/h3&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
Installing an operating system on your ROCK PI E, including microSD card, eMMC module, USB drive, etc.&lt;br /&gt;
&lt;br /&gt;
* [[RockpiE/install/microSD | Install on microSD card]]&lt;br /&gt;
* [[RockpiE/install/eMMC | Install on eMMC module]]&lt;br /&gt;
* [[RockpiE/radxa-apt | Update from Radxa Apt]]&lt;br /&gt;
* [[RockpiE/partitions | Partition table]]&lt;br /&gt;
[[RockpiE/install| &amp;gt; More...]]&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6 &amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-mango-white&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-cog&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; [[RockpiE/dev | Development]]&amp;lt;/h3&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
Information about Linux development&lt;br /&gt;
* [[RockpiE/dev/Debian | USB Intallation]]-How to use PC tools to install image on ROCK Pi E&lt;br /&gt;
* [[RockpiE/dev/Debian | Build Debian]]&lt;br /&gt;
* [[RockpiE/dev/kernel-4.4 | Build vendor kernel(Rockchip 4.4)]]&lt;br /&gt;
* [[RockpiE/dev/serial-console | Serial Console]]&lt;br /&gt;
* [[rockpiE/dev/device-serial-number | Device Serial Number]]&lt;br /&gt;
[[RockpiE/dev| &amp;gt; More...]]&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-12 &amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6 &amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-cello-white&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-hdd-o&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;  [[RockpiE/hardware|Hardware]] &amp;lt;/h3&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
Technical specifications about the ROCK Pi E hardware, including WI-FI module, LCD module, etc.&lt;br /&gt;
&lt;br /&gt;
* [[RockpiE/hardware/rockpiE | Main board]] - Hardware introduction of the ROCK Pi E&lt;br /&gt;
* [[RockpiE/hardware/gpio | GPIO]] - GPIO pinout&amp;amp;numbers&lt;br /&gt;
* [[rockpiE/hardware/models | Models and SKU]]&lt;br /&gt;
* [https://wiki.radxa.com/Device-tree-overlays Device Tree Overlays]&lt;br /&gt;
* [[RockpiE/hardware/display | Display]]&lt;br /&gt;
&lt;br /&gt;
[[RockpiE/hardware| &amp;gt; More...]]&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6 &amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-gunmetal-white&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-linux&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; [[RockpiE/Debian Working With Linux | Working With Linux ]]&amp;lt;/h3&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
Fundamental Linux usage for beginners and more advanced information for power users.&lt;br /&gt;
* [[RockpiE/Debian | Debian]]&lt;br /&gt;
* [[RockpiE/radxa-apt | Radxa APT]]&lt;br /&gt;
* [[RockpiE/downloads | Images official/3rd party/community]]&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-12 &amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6 &amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-cocktail-white&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-question&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; [[RockpiE/FAQs | FAQs]]&amp;lt;/h3&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* Answers to frequently asked technical questions&lt;br /&gt;
* Answers to sale of ROCK Pi E&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-md-6 &amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;panel panel-cocktail-white&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-heading&amp;quot;&amp;gt;&amp;lt;h3 class=&amp;quot;panel-title&amp;quot;&amp;gt;&amp;lt;i class=&amp;quot;fa fa-users&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Community&amp;lt;/h3&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;panel-body&amp;quot;&amp;gt;&lt;br /&gt;
* Forum: http://forum.radxa.com&lt;br /&gt;
* [[Rockpi4/contribute | How to contribute to this wiki, refer ROCK Pi 4 contribution page]]&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-02-27T07:42:18Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test uart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT buster-testing repository. Edit file /etc/apt/sources.list.d/apt-radxa-com.list and add the following:&lt;br /&gt;
&lt;br /&gt;
For Debian Buster&lt;br /&gt;
    deb http://apt.radxa.com/buster-testing/ buster main&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa-rockpis&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''2'''_SDA&lt;br /&gt;
    PIN15      I2C'''2'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
modify '''/boot/hw_intfc.conf''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c2''' for test&lt;br /&gt;
    root@rockpis:/# cat boot/hw_intfc.conf&lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=on&lt;br /&gt;
    intfc:i2c1=on&lt;br /&gt;
    intfc:i2c2=on&lt;br /&gt;
    intfc:i2c3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=on&lt;br /&gt;
    intfc:pwm2=on&lt;br /&gt;
    intfc:pwm3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=on&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
   # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
   &lt;br /&gt;
   # Serial console on UART0&lt;br /&gt;
   intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
   root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
use c to test pwm.c,compile pwm.c&lt;br /&gt;
    root@rockpis:/home/rock/c# cat pwm.c&lt;br /&gt;
     #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/pwm.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    /* PWM declaration */&lt;br /&gt;
    #define PWM 11&lt;br /&gt;
    &lt;br /&gt;
    /* PWM period in us */&lt;br /&gt;
    #define PWM_FREQ 200&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_pwm_context pwm;&lt;br /&gt;
        float value = 0.0f;&lt;br /&gt;
        float output;&lt;br /&gt;
     &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
     &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        pwm = mraa_pwm_init(PWM);&lt;br /&gt;
        if (pwm == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize PWM\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
      &lt;br /&gt;
        /* set PWM period */&lt;br /&gt;
        status = mraa_pwm_period_us(pwm, PWM_FREQ);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
             goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* enable PWM */&lt;br /&gt;
        status = mraa_pwm_enable(pwm, 1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            value = value + 0.01f;&lt;br /&gt;
    &lt;br /&gt;
            /* write PWM duty cyle */&lt;br /&gt;
            status = mraa_pwm_write(pwm, value);&lt;br /&gt;
            if (status != MRAA_SUCCESS) {&lt;br /&gt;
                 goto err_exit;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            usleep(50000);&lt;br /&gt;
     &lt;br /&gt;
            if (value &amp;gt;= 1.0f) {&lt;br /&gt;
                value = 0.0f;&lt;br /&gt;
            }&lt;br /&gt;
     &lt;br /&gt;
            /* read PWM duty cyle */&lt;br /&gt;
            output = mraa_pwm_read(pwm);&lt;br /&gt;
            fprintf(stdout, &amp;quot;PWM value is %f\n&amp;quot;, output);&lt;br /&gt;
        }&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
        &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
         &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc pwm.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
    root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    PWM value is 0.010015&lt;br /&gt;
    PWM value is 0.019985&lt;br /&gt;
    PWM value is 0.030000&lt;br /&gt;
    PWM value is 0.040014&lt;br /&gt;
    PWM value is 0.049984&lt;br /&gt;
    PWM value is 0.059999&lt;br /&gt;
    PWM value is 0.070014&lt;br /&gt;
    PWM value is 0.079984&lt;br /&gt;
    PWM value is 0.089999&lt;br /&gt;
    PWM value is 0.100014&lt;br /&gt;
    PWM value is 0.109983&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
    root@rockpis:/home/rock/c# cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    #define I2C_BUS 1&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc i2c_mpu6050.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
     root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-10 y:1 z:7&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
enable uart1 for uart test&lt;br /&gt;
    root@rockpis:/home/rock# cat /boot/hw_intfc.conf&lt;br /&gt;
    &lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    &lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=off&lt;br /&gt;
    intfc:i2c1=off&lt;br /&gt;
    intfc:i2c2=off&lt;br /&gt;
    intfc:i2c3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=off&lt;br /&gt;
    intfc:pwm2=off&lt;br /&gt;
    intfc:pwm3=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=off&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
    # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
    &lt;br /&gt;
    # Serial console on UART0&lt;br /&gt;
    intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
    # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
    # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI0 for test. Need set: intfc:spi0=on&lt;br /&gt;
    #intfc:dtoverlay=devspi0&lt;br /&gt;
    &lt;br /&gt;
    # Dummy spi device on SPI2 for test. Need set: intfc:spi2=on&lt;br /&gt;
    #intfc:dtoverlay=devspi2&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS0. Need set: intfc:uart0=on&lt;br /&gt;
    #intfc:dtoverlay=rk3308-uart0&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS1. Need set: intfc:uart1=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart1&lt;br /&gt;
    &lt;br /&gt;
    # Use /dev/ttyS2. Need set: intfc:uart2=on&lt;br /&gt;
    intfc:dtoverlay=rk3308-uart2&lt;br /&gt;
&lt;br /&gt;
then reboot and use serial port PIN23 and PIN24&lt;br /&gt;
&lt;br /&gt;
send command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 send  data&lt;br /&gt;
&lt;br /&gt;
receive command follow:&lt;br /&gt;
    sudo mraa-uart dev 0 baud 1500000 recv  1000&lt;br /&gt;
&lt;br /&gt;
the receive window will show&lt;br /&gt;
    date&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-02-25T09:06:47Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test i2c */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT buster-testing repository. Edit file /etc/apt/sources.list.d/apt-radxa-com.list and add the following:&lt;br /&gt;
&lt;br /&gt;
For Debian Buster&lt;br /&gt;
    deb http://apt.radxa.com/buster-testing/ buster main&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa-rockpis&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''2'''_SDA&lt;br /&gt;
    PIN15      I2C'''2'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
modify '''/boot/hw_intfc.conf''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c2''' for test&lt;br /&gt;
    root@rockpis:/# cat boot/hw_intfc.conf&lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=on&lt;br /&gt;
    intfc:i2c1=on&lt;br /&gt;
    intfc:i2c2=on&lt;br /&gt;
    intfc:i2c3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=on&lt;br /&gt;
    intfc:pwm2=on&lt;br /&gt;
    intfc:pwm3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=on&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
   # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
   &lt;br /&gt;
   # Serial console on UART0&lt;br /&gt;
   intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
   root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
use c to test pwm.c,compile pwm.c&lt;br /&gt;
    root@rockpis:/home/rock/c# cat pwm.c&lt;br /&gt;
     #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/pwm.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    /* PWM declaration */&lt;br /&gt;
    #define PWM 11&lt;br /&gt;
    &lt;br /&gt;
    /* PWM period in us */&lt;br /&gt;
    #define PWM_FREQ 200&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_pwm_context pwm;&lt;br /&gt;
        float value = 0.0f;&lt;br /&gt;
        float output;&lt;br /&gt;
     &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
     &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        pwm = mraa_pwm_init(PWM);&lt;br /&gt;
        if (pwm == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize PWM\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
      &lt;br /&gt;
        /* set PWM period */&lt;br /&gt;
        status = mraa_pwm_period_us(pwm, PWM_FREQ);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
             goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* enable PWM */&lt;br /&gt;
        status = mraa_pwm_enable(pwm, 1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            value = value + 0.01f;&lt;br /&gt;
    &lt;br /&gt;
            /* write PWM duty cyle */&lt;br /&gt;
            status = mraa_pwm_write(pwm, value);&lt;br /&gt;
            if (status != MRAA_SUCCESS) {&lt;br /&gt;
                 goto err_exit;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            usleep(50000);&lt;br /&gt;
     &lt;br /&gt;
            if (value &amp;gt;= 1.0f) {&lt;br /&gt;
                value = 0.0f;&lt;br /&gt;
            }&lt;br /&gt;
     &lt;br /&gt;
            /* read PWM duty cyle */&lt;br /&gt;
            output = mraa_pwm_read(pwm);&lt;br /&gt;
            fprintf(stdout, &amp;quot;PWM value is %f\n&amp;quot;, output);&lt;br /&gt;
        }&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
        &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
         &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc pwm.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
    root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    PWM value is 0.010015&lt;br /&gt;
    PWM value is 0.019985&lt;br /&gt;
    PWM value is 0.030000&lt;br /&gt;
    PWM value is 0.040014&lt;br /&gt;
    PWM value is 0.049984&lt;br /&gt;
    PWM value is 0.059999&lt;br /&gt;
    PWM value is 0.070014&lt;br /&gt;
    PWM value is 0.079984&lt;br /&gt;
    PWM value is 0.089999&lt;br /&gt;
    PWM value is 0.100014&lt;br /&gt;
    PWM value is 0.109983&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
    root@rockpis:/home/rock/c# cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    #define I2C_BUS 1&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc i2c_mpu6050.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
     root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-10 y:1 z:7&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:107 y:-12 z:69&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:6 y:136 z:-50&lt;br /&gt;
    &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:-5 y:48 z:-103&lt;br /&gt;
      &lt;br /&gt;
    accel: x:0 y:0 z:0&lt;br /&gt;
    gyro: x:3 y:3 z:5&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-02-25T09:01:47Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test i2c */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT buster-testing repository. Edit file /etc/apt/sources.list.d/apt-radxa-com.list and add the following:&lt;br /&gt;
&lt;br /&gt;
For Debian Buster&lt;br /&gt;
    deb http://apt.radxa.com/buster-testing/ buster main&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa-rockpis&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''2'''_SDA&lt;br /&gt;
    PIN15      I2C'''2'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
modify '''/boot/hw_intfc.conf''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c2''' for test&lt;br /&gt;
    root@rockpis:/# cat boot/hw_intfc.conf&lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=on&lt;br /&gt;
    intfc:i2c1=on&lt;br /&gt;
    intfc:i2c2=on&lt;br /&gt;
    intfc:i2c3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=on&lt;br /&gt;
    intfc:pwm2=on&lt;br /&gt;
    intfc:pwm3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=on&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
   # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
   &lt;br /&gt;
   # Serial console on UART0&lt;br /&gt;
   intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
   root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
use c to test pwm.c,compile pwm.c&lt;br /&gt;
    root@rockpis:/home/rock/c# cat pwm.c&lt;br /&gt;
     #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/pwm.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    /* PWM declaration */&lt;br /&gt;
    #define PWM 11&lt;br /&gt;
    &lt;br /&gt;
    /* PWM period in us */&lt;br /&gt;
    #define PWM_FREQ 200&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_pwm_context pwm;&lt;br /&gt;
        float value = 0.0f;&lt;br /&gt;
        float output;&lt;br /&gt;
     &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
     &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        pwm = mraa_pwm_init(PWM);&lt;br /&gt;
        if (pwm == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize PWM\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
      &lt;br /&gt;
        /* set PWM period */&lt;br /&gt;
        status = mraa_pwm_period_us(pwm, PWM_FREQ);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
             goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* enable PWM */&lt;br /&gt;
        status = mraa_pwm_enable(pwm, 1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            value = value + 0.01f;&lt;br /&gt;
    &lt;br /&gt;
            /* write PWM duty cyle */&lt;br /&gt;
            status = mraa_pwm_write(pwm, value);&lt;br /&gt;
            if (status != MRAA_SUCCESS) {&lt;br /&gt;
                 goto err_exit;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            usleep(50000);&lt;br /&gt;
     &lt;br /&gt;
            if (value &amp;gt;= 1.0f) {&lt;br /&gt;
                value = 0.0f;&lt;br /&gt;
            }&lt;br /&gt;
     &lt;br /&gt;
            /* read PWM duty cyle */&lt;br /&gt;
            output = mraa_pwm_read(pwm);&lt;br /&gt;
            fprintf(stdout, &amp;quot;PWM value is %f\n&amp;quot;, output);&lt;br /&gt;
        }&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
        &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
         &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc pwm.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
    root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    PWM value is 0.010015&lt;br /&gt;
    PWM value is 0.019985&lt;br /&gt;
    PWM value is 0.030000&lt;br /&gt;
    PWM value is 0.040014&lt;br /&gt;
    PWM value is 0.049984&lt;br /&gt;
    PWM value is 0.059999&lt;br /&gt;
    PWM value is 0.070014&lt;br /&gt;
    PWM value is 0.079984&lt;br /&gt;
    PWM value is 0.089999&lt;br /&gt;
    PWM value is 0.100014&lt;br /&gt;
    PWM value is 0.109983&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
    root@rockpis:/home/rock/c# cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    #define I2C_BUS 1&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/home/rock/c# gcc i2c_mpu6050.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-02-25T09:00:19Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test i2c */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT buster-testing repository. Edit file /etc/apt/sources.list.d/apt-radxa-com.list and add the following:&lt;br /&gt;
&lt;br /&gt;
For Debian Buster&lt;br /&gt;
    deb http://apt.radxa.com/buster-testing/ buster main&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa-rockpis&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''2'''_SDA&lt;br /&gt;
    PIN15      I2C'''2'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
modify '''/boot/hw_intfc.conf''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c2''' for test&lt;br /&gt;
    root@rockpis:/# cat boot/hw_intfc.conf&lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=on&lt;br /&gt;
    intfc:i2c1=on&lt;br /&gt;
    intfc:i2c2=on&lt;br /&gt;
    intfc:i2c3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=on&lt;br /&gt;
    intfc:pwm2=on&lt;br /&gt;
    intfc:pwm3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=on&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
   # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
   &lt;br /&gt;
   # Serial console on UART0&lt;br /&gt;
   intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
   root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
use c to test pwm.c,compile pwm.c&lt;br /&gt;
    root@rockpis:/home/rock/c# cat pwm.c&lt;br /&gt;
     #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/pwm.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    /* PWM declaration */&lt;br /&gt;
    #define PWM 11&lt;br /&gt;
    &lt;br /&gt;
    /* PWM period in us */&lt;br /&gt;
    #define PWM_FREQ 200&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_pwm_context pwm;&lt;br /&gt;
        float value = 0.0f;&lt;br /&gt;
        float output;&lt;br /&gt;
     &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
     &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        pwm = mraa_pwm_init(PWM);&lt;br /&gt;
        if (pwm == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize PWM\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
      &lt;br /&gt;
        /* set PWM period */&lt;br /&gt;
        status = mraa_pwm_period_us(pwm, PWM_FREQ);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
             goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* enable PWM */&lt;br /&gt;
        status = mraa_pwm_enable(pwm, 1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            value = value + 0.01f;&lt;br /&gt;
    &lt;br /&gt;
            /* write PWM duty cyle */&lt;br /&gt;
            status = mraa_pwm_write(pwm, value);&lt;br /&gt;
            if (status != MRAA_SUCCESS) {&lt;br /&gt;
                 goto err_exit;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            usleep(50000);&lt;br /&gt;
     &lt;br /&gt;
            if (value &amp;gt;= 1.0f) {&lt;br /&gt;
                value = 0.0f;&lt;br /&gt;
            }&lt;br /&gt;
     &lt;br /&gt;
            /* read PWM duty cyle */&lt;br /&gt;
            output = mraa_pwm_read(pwm);&lt;br /&gt;
            fprintf(stdout, &amp;quot;PWM value is %f\n&amp;quot;, output);&lt;br /&gt;
        }&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
        &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
         &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc pwm.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
    root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    PWM value is 0.010015&lt;br /&gt;
    PWM value is 0.019985&lt;br /&gt;
    PWM value is 0.030000&lt;br /&gt;
    PWM value is 0.040014&lt;br /&gt;
    PWM value is 0.049984&lt;br /&gt;
    PWM value is 0.059999&lt;br /&gt;
    PWM value is 0.070014&lt;br /&gt;
    PWM value is 0.079984&lt;br /&gt;
    PWM value is 0.089999&lt;br /&gt;
    PWM value is 0.100014&lt;br /&gt;
    PWM value is 0.109983&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
    root@rockpis:/home/rock/c# cat i2c_mpu6050.c &lt;br /&gt;
    /* standard headers */&lt;br /&gt;
    #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/i2c.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    #define I2C_BUS 1&lt;br /&gt;
    &lt;br /&gt;
    /* register definitions */&lt;br /&gt;
    #define MPU6050_ADDR 0x68&lt;br /&gt;
    #define MPU6050_REG_PWR_MGMT_1 0x6b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_X 0x3b&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Y 0x3d&lt;br /&gt;
    #define MPU6050_REG_RAW_ACCEL_Z 0x3f&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_X 0x43&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Y 0x45&lt;br /&gt;
    #define MPU6050_REG_RAW_GYRO_Z 0x47&lt;br /&gt;
    &lt;br /&gt;
    /* bit definitions */&lt;br /&gt;
    #define MPU6050_RESET 0x80&lt;br /&gt;
    #define MPU6050_SLEEP (1 &amp;lt;&amp;lt; 6)&lt;br /&gt;
    #define MPU6050_PLL_GYRO_X (1 &amp;lt;&amp;lt; 1)&lt;br /&gt;
    &lt;br /&gt;
    /* accelerometer scale factor for (+/-)2g */&lt;br /&gt;
    #define MPU6050_ACCEL_SCALE 16384.0&lt;br /&gt;
    &lt;br /&gt;
    /* gyroscope scale factor for (+/-)250/s */&lt;br /&gt;
    #define MPU6050_GYRO_SCALE 131.0&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int16_t&lt;br /&gt;
    i2c_read_word(mraa_i2c_context dev, uint8_t command)&lt;br /&gt;
    {&lt;br /&gt;
        return be16toh(mraa_i2c_read_word_data(dev, command));&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_i2c_context i2c;&lt;br /&gt;
        uint8_t data;&lt;br /&gt;
        int16_t accel_data[3];&lt;br /&gt;
        int16_t gyro_data[3];&lt;br /&gt;
        int ret;&lt;br /&gt;
    &lt;br /&gt;
        /* install signal handler */&lt;br /&gt;
        signal(SIGINT, sig_handler);&lt;br /&gt;
             &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* initialize I2C bus */&lt;br /&gt;
        i2c = mraa_i2c_init(I2C_BUS);&lt;br /&gt;
        if (i2c == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize I2C\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* set slave address */&lt;br /&gt;
        status = mraa_i2c_address(i2c, MPU6050_ADDR);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* reset the sensor */&lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, MPU6050_RESET, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
     &lt;br /&gt;
        /* configure power management register */&lt;br /&gt;
        ret = mraa_i2c_read_byte_data(i2c, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (ret == -1) {&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        data = ret;&lt;br /&gt;
        data |= MPU6050_PLL_GYRO_X;&lt;br /&gt;
        data &amp;amp;= ~(MPU6050_SLEEP);&lt;br /&gt;
    &lt;br /&gt;
        status = mraa_i2c_write_byte_data(i2c, data, MPU6050_REG_PWR_MGMT_1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
        goto err_exit;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
        sleep(5);&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            /* read raw accel data */&lt;br /&gt;
            accel_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_X) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Y) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
            accel_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_ACCEL_Z) / MPU6050_ACCEL_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            /* read raw gyro data */&lt;br /&gt;
            gyro_data[0] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_X) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[1] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Y) / MPU6050_GYRO_SCALE;&lt;br /&gt;
            gyro_data[2] = i2c_read_word(i2c, MPU6050_REG_RAW_GYRO_Z) / MPU6050_GYRO_SCALE;&lt;br /&gt;
    &lt;br /&gt;
            fprintf(stdout, &amp;quot;accel: x:%d y:%d z:%d\n&amp;quot;, accel_data[0], accel_data[1], accel_data[2]);&lt;br /&gt;
            fprintf(stdout, &amp;quot;gyro: x:%d y:%d z:%d\n\n&amp;quot;, gyro_data[0], gyro_data[1], gyro_data[2]);&lt;br /&gt;
    &lt;br /&gt;
            sleep(2);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
    &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
      &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* stop i2c */&lt;br /&gt;
        mraa_i2c_stop(i2c);&lt;br /&gt;
     &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
    &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-02-25T08:46:11Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test i2c */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT buster-testing repository. Edit file /etc/apt/sources.list.d/apt-radxa-com.list and add the following:&lt;br /&gt;
&lt;br /&gt;
For Debian Buster&lt;br /&gt;
    deb http://apt.radxa.com/buster-testing/ buster main&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa-rockpis&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''2'''_SDA&lt;br /&gt;
    PIN15      I2C'''2'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
modify '''/boot/hw_intfc.conf''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c2''' for test&lt;br /&gt;
    root@rockpis:/# cat boot/hw_intfc.conf&lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=on&lt;br /&gt;
    intfc:i2c1=on&lt;br /&gt;
    intfc:i2c2=on&lt;br /&gt;
    intfc:i2c3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=on&lt;br /&gt;
    intfc:pwm2=on&lt;br /&gt;
    intfc:pwm3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=on&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
   # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
   &lt;br /&gt;
   # Serial console on UART0&lt;br /&gt;
   intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
   root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
use c to test pwm.c,compile pwm.c&lt;br /&gt;
    root@rockpis:/home/rock/c# cat pwm.c&lt;br /&gt;
     #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/pwm.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    /* PWM declaration */&lt;br /&gt;
    #define PWM 11&lt;br /&gt;
    &lt;br /&gt;
    /* PWM period in us */&lt;br /&gt;
    #define PWM_FREQ 200&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_pwm_context pwm;&lt;br /&gt;
        float value = 0.0f;&lt;br /&gt;
        float output;&lt;br /&gt;
     &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
     &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        pwm = mraa_pwm_init(PWM);&lt;br /&gt;
        if (pwm == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize PWM\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
      &lt;br /&gt;
        /* set PWM period */&lt;br /&gt;
        status = mraa_pwm_period_us(pwm, PWM_FREQ);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
             goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* enable PWM */&lt;br /&gt;
        status = mraa_pwm_enable(pwm, 1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            value = value + 0.01f;&lt;br /&gt;
    &lt;br /&gt;
            /* write PWM duty cyle */&lt;br /&gt;
            status = mraa_pwm_write(pwm, value);&lt;br /&gt;
            if (status != MRAA_SUCCESS) {&lt;br /&gt;
                 goto err_exit;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            usleep(50000);&lt;br /&gt;
     &lt;br /&gt;
            if (value &amp;gt;= 1.0f) {&lt;br /&gt;
                value = 0.0f;&lt;br /&gt;
            }&lt;br /&gt;
     &lt;br /&gt;
            /* read PWM duty cyle */&lt;br /&gt;
            output = mraa_pwm_read(pwm);&lt;br /&gt;
            fprintf(stdout, &amp;quot;PWM value is %f\n&amp;quot;, output);&lt;br /&gt;
        }&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
        &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
         &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc pwm.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
    root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    PWM value is 0.010015&lt;br /&gt;
    PWM value is 0.019985&lt;br /&gt;
    PWM value is 0.030000&lt;br /&gt;
    PWM value is 0.040014&lt;br /&gt;
    PWM value is 0.049984&lt;br /&gt;
    PWM value is 0.059999&lt;br /&gt;
    PWM value is 0.070014&lt;br /&gt;
    PWM value is 0.079984&lt;br /&gt;
    PWM value is 0.089999&lt;br /&gt;
    PWM value is 0.100014&lt;br /&gt;
    PWM value is 0.109983&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
Use mraa-i2c tool to test,here we use I2C MPU6050&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-02-25T08:40:59Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* Hardware V10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT buster-testing repository. Edit file /etc/apt/sources.list.d/apt-radxa-com.list and add the following:&lt;br /&gt;
&lt;br /&gt;
For Debian Buster&lt;br /&gt;
    deb http://apt.radxa.com/buster-testing/ buster main&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa-rockpis&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V12 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''2'''_SDA&lt;br /&gt;
    PIN15      I2C'''2'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
modify '''/boot/hw_intfc.conf''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c2''' for test&lt;br /&gt;
    root@rockpis:/# cat boot/hw_intfc.conf&lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=on&lt;br /&gt;
    intfc:i2c1=on&lt;br /&gt;
    intfc:i2c2=on&lt;br /&gt;
    intfc:i2c3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=on&lt;br /&gt;
    intfc:pwm2=on&lt;br /&gt;
    intfc:pwm3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=on&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
   # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
   &lt;br /&gt;
   # Serial console on UART0&lt;br /&gt;
   intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
   root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
use c to test pwm.c,compile pwm.c&lt;br /&gt;
    root@rockpis:/home/rock/c# cat pwm.c&lt;br /&gt;
     #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/pwm.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    /* PWM declaration */&lt;br /&gt;
    #define PWM 11&lt;br /&gt;
    &lt;br /&gt;
    /* PWM period in us */&lt;br /&gt;
    #define PWM_FREQ 200&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_pwm_context pwm;&lt;br /&gt;
        float value = 0.0f;&lt;br /&gt;
        float output;&lt;br /&gt;
     &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
     &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        pwm = mraa_pwm_init(PWM);&lt;br /&gt;
        if (pwm == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize PWM\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
      &lt;br /&gt;
        /* set PWM period */&lt;br /&gt;
        status = mraa_pwm_period_us(pwm, PWM_FREQ);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
             goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* enable PWM */&lt;br /&gt;
        status = mraa_pwm_enable(pwm, 1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            value = value + 0.01f;&lt;br /&gt;
    &lt;br /&gt;
            /* write PWM duty cyle */&lt;br /&gt;
            status = mraa_pwm_write(pwm, value);&lt;br /&gt;
            if (status != MRAA_SUCCESS) {&lt;br /&gt;
                 goto err_exit;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            usleep(50000);&lt;br /&gt;
     &lt;br /&gt;
            if (value &amp;gt;= 1.0f) {&lt;br /&gt;
                value = 0.0f;&lt;br /&gt;
            }&lt;br /&gt;
     &lt;br /&gt;
            /* read PWM duty cyle */&lt;br /&gt;
            output = mraa_pwm_read(pwm);&lt;br /&gt;
            fprintf(stdout, &amp;quot;PWM value is %f\n&amp;quot;, output);&lt;br /&gt;
        }&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
        &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
         &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc pwm.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
    root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    PWM value is 0.010015&lt;br /&gt;
    PWM value is 0.019985&lt;br /&gt;
    PWM value is 0.030000&lt;br /&gt;
    PWM value is 0.040014&lt;br /&gt;
    PWM value is 0.049984&lt;br /&gt;
    PWM value is 0.059999&lt;br /&gt;
    PWM value is 0.070014&lt;br /&gt;
    PWM value is 0.079984&lt;br /&gt;
    PWM value is 0.089999&lt;br /&gt;
    PWM value is 0.100014&lt;br /&gt;
    PWM value is 0.109983&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-02-25T08:39:22Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* ===== test i2c ===== */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT buster-testing repository. Edit file /etc/apt/sources.list.d/apt-radxa-com.list and add the following:&lt;br /&gt;
&lt;br /&gt;
For Debian Buster&lt;br /&gt;
    deb http://apt.radxa.com/buster-testing/ buster main&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa-rockpis&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V10 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''2'''_SDA&lt;br /&gt;
    PIN15      I2C'''2'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
modify '''/boot/hw_intfc.conf''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c2''' for test&lt;br /&gt;
    root@rockpis:/# cat boot/hw_intfc.conf&lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=on&lt;br /&gt;
    intfc:i2c1=on&lt;br /&gt;
    intfc:i2c2=on&lt;br /&gt;
    intfc:i2c3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=on&lt;br /&gt;
    intfc:pwm2=on&lt;br /&gt;
    intfc:pwm3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=on&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
   # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
   &lt;br /&gt;
   # Serial console on UART0&lt;br /&gt;
   intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
   root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
use c to test pwm.c,compile pwm.c&lt;br /&gt;
    root@rockpis:/home/rock/c# cat pwm.c&lt;br /&gt;
     #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/pwm.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    /* PWM declaration */&lt;br /&gt;
    #define PWM 11&lt;br /&gt;
    &lt;br /&gt;
    /* PWM period in us */&lt;br /&gt;
    #define PWM_FREQ 200&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_pwm_context pwm;&lt;br /&gt;
        float value = 0.0f;&lt;br /&gt;
        float output;&lt;br /&gt;
     &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
     &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        pwm = mraa_pwm_init(PWM);&lt;br /&gt;
        if (pwm == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize PWM\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
      &lt;br /&gt;
        /* set PWM period */&lt;br /&gt;
        status = mraa_pwm_period_us(pwm, PWM_FREQ);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
             goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* enable PWM */&lt;br /&gt;
        status = mraa_pwm_enable(pwm, 1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            value = value + 0.01f;&lt;br /&gt;
    &lt;br /&gt;
            /* write PWM duty cyle */&lt;br /&gt;
            status = mraa_pwm_write(pwm, value);&lt;br /&gt;
            if (status != MRAA_SUCCESS) {&lt;br /&gt;
                 goto err_exit;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            usleep(50000);&lt;br /&gt;
     &lt;br /&gt;
            if (value &amp;gt;= 1.0f) {&lt;br /&gt;
                value = 0.0f;&lt;br /&gt;
            }&lt;br /&gt;
     &lt;br /&gt;
            /* read PWM duty cyle */&lt;br /&gt;
            output = mraa_pwm_read(pwm);&lt;br /&gt;
            fprintf(stdout, &amp;quot;PWM value is %f\n&amp;quot;, output);&lt;br /&gt;
        }&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
        &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
         &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc pwm.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
    root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    PWM value is 0.010015&lt;br /&gt;
    PWM value is 0.019985&lt;br /&gt;
    PWM value is 0.030000&lt;br /&gt;
    PWM value is 0.040014&lt;br /&gt;
    PWM value is 0.049984&lt;br /&gt;
    PWM value is 0.059999&lt;br /&gt;
    PWM value is 0.070014&lt;br /&gt;
    PWM value is 0.079984&lt;br /&gt;
    PWM value is 0.089999&lt;br /&gt;
    PWM value is 0.100014&lt;br /&gt;
    PWM value is 0.109983&lt;br /&gt;
&lt;br /&gt;
===== test i2c =====&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-02-25T08:38:56Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test I2C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT buster-testing repository. Edit file /etc/apt/sources.list.d/apt-radxa-com.list and add the following:&lt;br /&gt;
&lt;br /&gt;
For Debian Buster&lt;br /&gt;
    deb http://apt.radxa.com/buster-testing/ buster main&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa-rockpis&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V10 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''2'''_SDA&lt;br /&gt;
    PIN15      I2C'''2'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
modify '''/boot/hw_intfc.conf''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c2''' for test&lt;br /&gt;
    root@rockpis:/# cat boot/hw_intfc.conf&lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=on&lt;br /&gt;
    intfc:i2c1=on&lt;br /&gt;
    intfc:i2c2=on&lt;br /&gt;
    intfc:i2c3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=on&lt;br /&gt;
    intfc:pwm2=on&lt;br /&gt;
    intfc:pwm3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=on&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
   # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
   &lt;br /&gt;
   # Serial console on UART0&lt;br /&gt;
   intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
   root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
use c to test pwm.c,compile pwm.c&lt;br /&gt;
    root@rockpis:/home/rock/c# cat pwm.c&lt;br /&gt;
     #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/pwm.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    /* PWM declaration */&lt;br /&gt;
    #define PWM 11&lt;br /&gt;
    &lt;br /&gt;
    /* PWM period in us */&lt;br /&gt;
    #define PWM_FREQ 200&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_pwm_context pwm;&lt;br /&gt;
        float value = 0.0f;&lt;br /&gt;
        float output;&lt;br /&gt;
     &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
     &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        pwm = mraa_pwm_init(PWM);&lt;br /&gt;
        if (pwm == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize PWM\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
      &lt;br /&gt;
        /* set PWM period */&lt;br /&gt;
        status = mraa_pwm_period_us(pwm, PWM_FREQ);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
             goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* enable PWM */&lt;br /&gt;
        status = mraa_pwm_enable(pwm, 1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            value = value + 0.01f;&lt;br /&gt;
    &lt;br /&gt;
            /* write PWM duty cyle */&lt;br /&gt;
            status = mraa_pwm_write(pwm, value);&lt;br /&gt;
            if (status != MRAA_SUCCESS) {&lt;br /&gt;
                 goto err_exit;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            usleep(50000);&lt;br /&gt;
     &lt;br /&gt;
            if (value &amp;gt;= 1.0f) {&lt;br /&gt;
                value = 0.0f;&lt;br /&gt;
            }&lt;br /&gt;
     &lt;br /&gt;
            /* read PWM duty cyle */&lt;br /&gt;
            output = mraa_pwm_read(pwm);&lt;br /&gt;
            fprintf(stdout, &amp;quot;PWM value is %f\n&amp;quot;, output);&lt;br /&gt;
        }&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
        &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
         &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc pwm.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
    root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    PWM value is 0.010015&lt;br /&gt;
    PWM value is 0.019985&lt;br /&gt;
    PWM value is 0.030000&lt;br /&gt;
    PWM value is 0.040014&lt;br /&gt;
    PWM value is 0.049984&lt;br /&gt;
    PWM value is 0.059999&lt;br /&gt;
    PWM value is 0.070014&lt;br /&gt;
    PWM value is 0.079984&lt;br /&gt;
    PWM value is 0.089999&lt;br /&gt;
    PWM value is 0.100014&lt;br /&gt;
    PWM value is 0.109983&lt;br /&gt;
&lt;br /&gt;
== ===== test i2c ===== ==&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-02-25T08:37:24Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test gpio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT buster-testing repository. Edit file /etc/apt/sources.list.d/apt-radxa-com.list and add the following:&lt;br /&gt;
&lt;br /&gt;
For Debian Buster&lt;br /&gt;
    deb http://apt.radxa.com/buster-testing/ buster main&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa-rockpis&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V10 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''2'''_SDA&lt;br /&gt;
    PIN15      I2C'''2'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
modify '''/boot/hw_intfc.conf''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c2''' for test&lt;br /&gt;
    root@rockpis:/# cat boot/hw_intfc.conf&lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=on&lt;br /&gt;
    intfc:i2c1=on&lt;br /&gt;
    intfc:i2c2=on&lt;br /&gt;
    intfc:i2c3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=on&lt;br /&gt;
    intfc:pwm2=on&lt;br /&gt;
    intfc:pwm3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=on&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
   # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
   &lt;br /&gt;
   # Serial console on UART0&lt;br /&gt;
   intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
   root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
use c to test pwm.c,compile pwm.c&lt;br /&gt;
    root@rockpis:/home/rock/c# cat pwm.c&lt;br /&gt;
     #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/pwm.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    /* PWM declaration */&lt;br /&gt;
    #define PWM 11&lt;br /&gt;
    &lt;br /&gt;
    /* PWM period in us */&lt;br /&gt;
    #define PWM_FREQ 200&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_pwm_context pwm;&lt;br /&gt;
        float value = 0.0f;&lt;br /&gt;
        float output;&lt;br /&gt;
     &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
     &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        pwm = mraa_pwm_init(PWM);&lt;br /&gt;
        if (pwm == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize PWM\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
      &lt;br /&gt;
        /* set PWM period */&lt;br /&gt;
        status = mraa_pwm_period_us(pwm, PWM_FREQ);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
             goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* enable PWM */&lt;br /&gt;
        status = mraa_pwm_enable(pwm, 1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            value = value + 0.01f;&lt;br /&gt;
    &lt;br /&gt;
            /* write PWM duty cyle */&lt;br /&gt;
            status = mraa_pwm_write(pwm, value);&lt;br /&gt;
            if (status != MRAA_SUCCESS) {&lt;br /&gt;
                 goto err_exit;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            usleep(50000);&lt;br /&gt;
     &lt;br /&gt;
            if (value &amp;gt;= 1.0f) {&lt;br /&gt;
                value = 0.0f;&lt;br /&gt;
            }&lt;br /&gt;
     &lt;br /&gt;
            /* read PWM duty cyle */&lt;br /&gt;
            output = mraa_pwm_read(pwm);&lt;br /&gt;
            fprintf(stdout, &amp;quot;PWM value is %f\n&amp;quot;, output);&lt;br /&gt;
        }&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
        &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
         &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc pwm.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
    root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    PWM value is 0.010015&lt;br /&gt;
    PWM value is 0.019985&lt;br /&gt;
    PWM value is 0.030000&lt;br /&gt;
    PWM value is 0.040014&lt;br /&gt;
    PWM value is 0.049984&lt;br /&gt;
    PWM value is 0.059999&lt;br /&gt;
    PWM value is 0.070014&lt;br /&gt;
    PWM value is 0.079984&lt;br /&gt;
    PWM value is 0.089999&lt;br /&gt;
    PWM value is 0.100014&lt;br /&gt;
    PWM value is 0.109983&lt;br /&gt;
===== test I2C =====&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-02-25T08:35:51Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT buster-testing repository. Edit file /etc/apt/sources.list.d/apt-radxa-com.list and add the following:&lt;br /&gt;
&lt;br /&gt;
For Debian Buster&lt;br /&gt;
    deb http://apt.radxa.com/buster-testing/ buster main&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa-rockpis&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V10 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''2'''_SDA&lt;br /&gt;
    PIN15      I2C'''2'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
modify '''/boot/hw_intfc.conf''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c2''' for test&lt;br /&gt;
    root@rockpis:/# cat boot/hw_intfc.conf&lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=on&lt;br /&gt;
    intfc:i2c1=on&lt;br /&gt;
    intfc:i2c2=on&lt;br /&gt;
    intfc:i2c3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=on&lt;br /&gt;
    intfc:pwm2=on&lt;br /&gt;
    intfc:pwm3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=on&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
   # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
   &lt;br /&gt;
   # Serial console on UART0&lt;br /&gt;
   intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
   root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
use c to test pwm.c,compile pwm.c&lt;br /&gt;
    root@rockpis:/home/rock/c# cat pwm.c&lt;br /&gt;
     #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/pwm.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    /* PWM declaration */&lt;br /&gt;
    #define PWM 11&lt;br /&gt;
    &lt;br /&gt;
    /* PWM period in us */&lt;br /&gt;
    #define PWM_FREQ 200&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_pwm_context pwm;&lt;br /&gt;
        float value = 0.0f;&lt;br /&gt;
        float output;&lt;br /&gt;
     &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
     &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        pwm = mraa_pwm_init(PWM);&lt;br /&gt;
        if (pwm == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize PWM\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
      &lt;br /&gt;
        /* set PWM period */&lt;br /&gt;
        status = mraa_pwm_period_us(pwm, PWM_FREQ);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
             goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* enable PWM */&lt;br /&gt;
        status = mraa_pwm_enable(pwm, 1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            value = value + 0.01f;&lt;br /&gt;
    &lt;br /&gt;
            /* write PWM duty cyle */&lt;br /&gt;
            status = mraa_pwm_write(pwm, value);&lt;br /&gt;
            if (status != MRAA_SUCCESS) {&lt;br /&gt;
                 goto err_exit;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            usleep(50000);&lt;br /&gt;
     &lt;br /&gt;
            if (value &amp;gt;= 1.0f) {&lt;br /&gt;
                value = 0.0f;&lt;br /&gt;
            }&lt;br /&gt;
     &lt;br /&gt;
            /* read PWM duty cyle */&lt;br /&gt;
            output = mraa_pwm_read(pwm);&lt;br /&gt;
            fprintf(stdout, &amp;quot;PWM value is %f\n&amp;quot;, output);&lt;br /&gt;
        }&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
        &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
         &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc pwm.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
    root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    PWM value is 0.010015&lt;br /&gt;
    PWM value is 0.019985&lt;br /&gt;
    PWM value is 0.030000&lt;br /&gt;
    PWM value is 0.040014&lt;br /&gt;
    PWM value is 0.049984&lt;br /&gt;
    PWM value is 0.059999&lt;br /&gt;
    PWM value is 0.070014&lt;br /&gt;
    PWM value is 0.079984&lt;br /&gt;
    PWM value is 0.089999&lt;br /&gt;
    PWM value is 0.100014&lt;br /&gt;
    PWM value is 0.109983&lt;br /&gt;
===== test I2C =====&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	<entry>
		<id>https://wiki.radxa.com/RockpiS/dev/libmraa</id>
		<title>RockpiS/dev/libmraa</title>
		<link rel="alternate" type="text/html" href="https://wiki.radxa.com/RockpiS/dev/libmraa"/>
				<updated>2020-02-25T08:34:25Z</updated>
		
		<summary type="html">&lt;p&gt;Zzl: /* test pwm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{rockpiS_header}}&lt;br /&gt;
&lt;br /&gt;
{{Languages|rockpiS/dev/libmraa}}&lt;br /&gt;
&lt;br /&gt;
       [[rockpiS | ROCK Pi S]] &amp;gt; [[rockpiS/dev | Development]] &amp;gt; [[rockpiS/dev/libmraa  | Install Libmraa ]]&lt;br /&gt;
&lt;br /&gt;
=== Libmraa on ROCK Pi S ===&lt;br /&gt;
&lt;br /&gt;
This guide describes how to use libmraa on ROCK Pi S.&lt;br /&gt;
&lt;br /&gt;
==== Install essential packages ====&lt;br /&gt;
&lt;br /&gt;
Package libmraa-rockpis is in the Radxa APT buster-testing repository. Edit file /etc/apt/sources.list.d/apt-radxa-com.list and add the following:&lt;br /&gt;
&lt;br /&gt;
For Debian Buster&lt;br /&gt;
    deb http://apt.radxa.com/buster-testing/ buster main&lt;br /&gt;
&lt;br /&gt;
Get the pub key  &lt;br /&gt;
    wget -O -  apt.radxa.com/buster-testing/public.key | sudo apt-key add -&lt;br /&gt;
&lt;br /&gt;
Install essential packages:&lt;br /&gt;
    sudo apt-get update&lt;br /&gt;
    sudo apt-get install -y rockchip-overlay rockpis-dtbo libmraa-rockpis&lt;br /&gt;
&lt;br /&gt;
==== Enable interface ====&lt;br /&gt;
See ROCK Pi S [[rockpiS/hardware/gpio | GPIO pintout]]. ROCK Pi S has a 26-pin colorful expansion header. Each pin is distinguished by color. mraa define follow:  &lt;br /&gt;
&lt;br /&gt;
===== Hardware V10 =====&lt;br /&gt;
&lt;br /&gt;
16 GPIO:&lt;br /&gt;
    PIN03      GPIO2_A2&lt;br /&gt;
    PIN05      GPIO2_B0&lt;br /&gt;
    PIN07      GPIO2_B3&lt;br /&gt;
    PIN09      GPIO4_C4&lt;br /&gt;
    PIN11      GPIO4_C2&lt;br /&gt;
    PIN12      GPIO4_A3&lt;br /&gt;
    PIN13      GPIO4_C6&lt;br /&gt;
    PIN15      GPIO4_C5&lt;br /&gt;
    PIN16      GPIO4_D2&lt;br /&gt;
    PIN18      GPIO4_D4&lt;br /&gt;
    PIN19      GPIO1_B0&lt;br /&gt;
    PIN21      GPIO1_A7&lt;br /&gt;
    PIN22      GPIO4_D5&lt;br /&gt;
    PIN23      GPIO1_B1&lt;br /&gt;
    PIN24      GPIO1_B2&lt;br /&gt;
    PIN26      GPIO1_B2&lt;br /&gt;
&lt;br /&gt;
3 I2C:&lt;br /&gt;
    PIN23      I2C'''0'''_SDA&lt;br /&gt;
    PIN24      I2C'''0'''_SCL&lt;br /&gt;
    PIN3       I2C'''1'''_SCL&lt;br /&gt;
    PIN5       I2C'''1'''_SDA&lt;br /&gt;
    PIN13      I2C'''2'''_SDA&lt;br /&gt;
    PIN15      I2C'''2'''_SCL&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
1 SPI:&lt;br /&gt;
    PIN19      SPI'''2'''TX        //must disable i2c0&lt;br /&gt;
    PIN21      SPI'''2'''RX        //must disable i2c0&lt;br /&gt;
    PIN23      SPI'''2'''CLK&lt;br /&gt;
    PIN24      SPI'''2'''CSN&lt;br /&gt;
&lt;br /&gt;
3 UART:&lt;br /&gt;
    PIN8       UART'''0'''_TX&lt;br /&gt;
    PIN10      UART'''0'''_RX&lt;br /&gt;
    PIN23      UART'''1'''_TX&lt;br /&gt;
    PIN24      UART'''1'''_RX&lt;br /&gt;
    PIN19      UART'''2'''_RX&lt;br /&gt;
    PIN21      UART'''2'''_TX&lt;br /&gt;
&lt;br /&gt;
2 PWM:&lt;br /&gt;
    PIN11      PWM'''2'''&lt;br /&gt;
    PIN13      PWM'''3'''&lt;br /&gt;
&lt;br /&gt;
1 ADC:&lt;br /&gt;
    PIN26      ADC_IN0          //the measure voltage must lower than 1.8v&lt;br /&gt;
&lt;br /&gt;
modify '''/boot/hw_intfc.conf''' to enable '''pwm2,pwm3,uart1,uart2,i2c0,i2c1,i2c2''' for test&lt;br /&gt;
    root@rockpis:/# cat boot/hw_intfc.conf&lt;br /&gt;
    # Hardware Interface Config&lt;br /&gt;
    # Set &amp;quot;on&amp;quot; to enable the optional hardware interfaces while set &amp;quot;off&amp;quot; to disable.&lt;br /&gt;
    &lt;br /&gt;
    intfc:i2c0=on&lt;br /&gt;
    intfc:i2c1=on&lt;br /&gt;
    intfc:i2c2=on&lt;br /&gt;
    intfc:i2c3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:pwm1=on&lt;br /&gt;
    intfc:pwm2=on&lt;br /&gt;
    intfc:pwm3=on&lt;br /&gt;
    &lt;br /&gt;
    intfc:spi0=off&lt;br /&gt;
    intfc:spi2=off&lt;br /&gt;
    &lt;br /&gt;
    intfc:uart0=on&lt;br /&gt;
    intfc:uart1=on&lt;br /&gt;
    intfc:uart2=on&lt;br /&gt;
    &lt;br /&gt;
   # Devicetree Overlay Enable, uncomment to enable .dtbo under /boot/overlays/.&lt;br /&gt;
   &lt;br /&gt;
   # Serial console on UART0&lt;br /&gt;
   intfc:dtoverlay=console-on-ttyS0&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (B v2) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35b-v2&lt;br /&gt;
    &lt;br /&gt;
   # waveshare 3.5inch lcd (C) on SPI2. Need set:&lt;br /&gt;
   # intfc:uart1=off intfc:uart2=off intfc:i2c0=off intfc:spi2=on&lt;br /&gt;
   #intfc:dtoverlay=spi2-waveshare35c&lt;br /&gt;
   root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
then '''reboot'''&lt;br /&gt;
&lt;br /&gt;
==== Test ====&lt;br /&gt;
===== test gpio =====&lt;br /&gt;
Use '''mraa-gpio tool''' to test&lt;br /&gt;
&lt;br /&gt;
    root@rockpis:/# mraa-gpio list&lt;br /&gt;
    01         3V3: &lt;br /&gt;
    02          5V: &lt;br /&gt;
    03     I2C_SDA: GPIO I2C  &lt;br /&gt;
    04          5V: &lt;br /&gt;
    05     I2C_SCL: GPIO I2C  &lt;br /&gt;
    06         GND: &lt;br /&gt;
    07 I2S0_8CH_MC: GPIO &lt;br /&gt;
    08    UART0_TX: GPIO UART &lt;br /&gt;
    09         GND: &lt;br /&gt;
    10    UART0_RX: GPIO UART &lt;br /&gt;
    11 PWM2,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    12 I2S0_8CH_SC: GPIO &lt;br /&gt;
    13 PWM3,I2C3_S: GPIO I2C  PWM  &lt;br /&gt;
    14         GND: &lt;br /&gt;
    15    SPDIF_TX: GPIO &lt;br /&gt;
    16 I2S0_8CH_SD: GPIO &lt;br /&gt;
    17         3V3: &lt;br /&gt;
    18 I2S0_8CH_SD: GPIO &lt;br /&gt;
    19 UART1_RTSN,: GPIO SPI  UART &lt;br /&gt;
    20         GND: &lt;br /&gt;
    21 UART1_CTSN,: GPIO SPI  UART &lt;br /&gt;
    22 I2S0_8CH_LR: GPIO &lt;br /&gt;
    23 UART1_RX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    24 UART1_TX,I2: GPIO I2C  SPI  UART &lt;br /&gt;
    25         GND: &lt;br /&gt;
    26     ADC_IN0: AIO &lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 1           #pin15 pull high&lt;br /&gt;
    root@rockpis:/# mraa-gpio set 15 0           #pin15 pull high&lt;br /&gt;
    root@rockpis:/#&lt;br /&gt;
&lt;br /&gt;
===== test pwm =====&lt;br /&gt;
use c to test pwm.c,compile pwm.c&lt;br /&gt;
    root@rockpis:/home/rock/c# cat pwm.c&lt;br /&gt;
     #include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
     #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    /* mraa header */&lt;br /&gt;
    #include &amp;quot;mraa/pwm.h&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    /* PWM declaration */&lt;br /&gt;
    #define PWM 11&lt;br /&gt;
    &lt;br /&gt;
    /* PWM period in us */&lt;br /&gt;
    #define PWM_FREQ 200&lt;br /&gt;
    &lt;br /&gt;
    volatile sig_atomic_t flag = 1;&lt;br /&gt;
    &lt;br /&gt;
    void&lt;br /&gt;
    sig_handler(int signum)&lt;br /&gt;
    {&lt;br /&gt;
        if (signum == SIGINT) {&lt;br /&gt;
            fprintf(stdout, &amp;quot;Exiting...\n&amp;quot;);&lt;br /&gt;
            flag = 0;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    int&lt;br /&gt;
    main(void)&lt;br /&gt;
    {&lt;br /&gt;
        mraa_result_t status = MRAA_SUCCESS;&lt;br /&gt;
        mraa_pwm_context pwm;&lt;br /&gt;
        float value = 0.0f;&lt;br /&gt;
        float output;&lt;br /&gt;
     &lt;br /&gt;
        /* initialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_init();&lt;br /&gt;
     &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        pwm = mraa_pwm_init(PWM);&lt;br /&gt;
        if (pwm == NULL) {&lt;br /&gt;
            fprintf(stderr, &amp;quot;Failed to initialize PWM\n&amp;quot;);&lt;br /&gt;
            mraa_deinit();&lt;br /&gt;
            return EXIT_FAILURE;&lt;br /&gt;
        }&lt;br /&gt;
      &lt;br /&gt;
        /* set PWM period */&lt;br /&gt;
        status = mraa_pwm_period_us(pwm, PWM_FREQ);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
             goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        /* enable PWM */&lt;br /&gt;
        status = mraa_pwm_enable(pwm, 1);&lt;br /&gt;
        if (status != MRAA_SUCCESS) {&lt;br /&gt;
            goto err_exit;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
        while (flag) {&lt;br /&gt;
            value = value + 0.01f;&lt;br /&gt;
    &lt;br /&gt;
            /* write PWM duty cyle */&lt;br /&gt;
            status = mraa_pwm_write(pwm, value);&lt;br /&gt;
            if (status != MRAA_SUCCESS) {&lt;br /&gt;
                 goto err_exit;&lt;br /&gt;
            }&lt;br /&gt;
    &lt;br /&gt;
            usleep(50000);&lt;br /&gt;
     &lt;br /&gt;
            if (value &amp;gt;= 1.0f) {&lt;br /&gt;
                value = 0.0f;&lt;br /&gt;
            }&lt;br /&gt;
     &lt;br /&gt;
            /* read PWM duty cyle */&lt;br /&gt;
            output = mraa_pwm_read(pwm);&lt;br /&gt;
            fprintf(stdout, &amp;quot;PWM value is %f\n&amp;quot;, output);&lt;br /&gt;
        }&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        //! [Interesting]&lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
        &lt;br /&gt;
        return EXIT_SUCCESS;&lt;br /&gt;
         &lt;br /&gt;
    err_exit:&lt;br /&gt;
        mraa_result_print(status);&lt;br /&gt;
     &lt;br /&gt;
        /* close PWM */&lt;br /&gt;
        mraa_pwm_close(pwm);&lt;br /&gt;
         &lt;br /&gt;
        /* deinitialize mraa for the platform (not needed most of the times) */&lt;br /&gt;
        mraa_deinit();&lt;br /&gt;
     &lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    root@rockpis:/home/rock/c# gcc pwm.c -lmraa&lt;br /&gt;
    root@rockpis:/home/rock/c#&lt;br /&gt;
&lt;br /&gt;
Run the compiled file&lt;br /&gt;
    root@rockpis:/home/rock/c# ./a.out &lt;br /&gt;
    PWM value is 0.010015&lt;br /&gt;
    PWM value is 0.019985&lt;br /&gt;
    PWM value is 0.030000&lt;br /&gt;
    PWM value is 0.040014&lt;br /&gt;
    PWM value is 0.049984&lt;br /&gt;
    PWM value is 0.059999&lt;br /&gt;
    PWM value is 0.070014&lt;br /&gt;
    PWM value is 0.079984&lt;br /&gt;
    PWM value is 0.089999&lt;br /&gt;
    PWM value is 0.100014&lt;br /&gt;
    PWM value is 0.109983&lt;br /&gt;
&lt;br /&gt;
===== test uart =====&lt;br /&gt;
&lt;br /&gt;
===== test spi =====&lt;br /&gt;
&lt;br /&gt;
===== test adc =====&lt;br /&gt;
&lt;br /&gt;
====Development====&lt;br /&gt;
&lt;br /&gt;
More introduction of libmraa can look at [http://iotdk.intel.com/docs/master/mraa/index.html libmraa official website].&lt;/div&gt;</summary>
		<author><name>Zzl</name></author>	</entry>

	</feed>