Skip to content

Commit ed793eb

Browse files
nascstingleby
authored andcommitted
platform: add Radxa ROCK 3A platform support
Signed-off-by: Nascs <[email protected]>
1 parent d055b45 commit ed793eb

File tree

10 files changed

+326
-0
lines changed

10 files changed

+326
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ ARM
4646
* [96Boards](../master/docs/96boards.md)
4747
* [ADLINK IPi-SMARC ARM](../master/docs/adlink_ipi_arm.md)
4848
* [Radxa CM3](../master/docs/radxa_cm3.md)
49+
* [Radxa ROCK 3A](../master/docs/radxa_rock_3a.md)
4950
* [Radxa ROCK 3B](../master/docs/radxa_rock_3b.md)
5051
* [Radxa ROCK 3C](../master/docs/radxa_rock_3c.md)
5152
* [Radxa ROCK 5A](../master/docs/radxa_rock_5a.md)

api/mraa/types.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ typedef enum {
7777
MRAA_RADXA_ROCK_3B = 32, /**< Radxa ROCK 3 Model B */
7878
MRAA_RADXA_CM3 = 33, /**< Radxa CM3 */
7979
MRAA_RADXA_CM5_IO = 34, /**< Radxa CM5 IO */
80+
MRAA_RADXA_ROCK_3A = 35, /**< Radxa ROCK 3 Model A */
8081

8182
// USB platform extenders start at 256
8283
MRAA_FTDI_FT4222 = 256, /**< FTDI FT4222 USB to i2c bridge */
@@ -283,6 +284,40 @@ typedef enum {
283284
RADXA_CM5_IO_PIN40 = 40
284285
} mraa_radxa_cm5_io_wiring_t;
285286

287+
/**
288+
* Radxa ROCK 3 Model A GPIO numbering enum
289+
*/
290+
typedef enum {
291+
MRAA_RADXA_ROCK_3A_PIN3 = 3,
292+
MRAA_RADXA_ROCK_3A_PIN5 = 5,
293+
MRAA_RADXA_ROCK_3A_PIN7 = 7,
294+
MRAA_RADXA_ROCK_3A_PIN8 = 8,
295+
MRAA_RADXA_ROCK_3A_PIN10 = 10,
296+
MRAA_RADXA_ROCK_3A_PIN11 = 11,
297+
MRAA_RADXA_ROCK_3A_PIN12 = 12,
298+
MRAA_RADXA_ROCK_3A_PIN13 = 13,
299+
MRAA_RADXA_ROCK_3A_PIN15 = 15,
300+
MRAA_RADXA_ROCK_3A_PIN16 = 16,
301+
MRAA_RADXA_ROCK_3A_PIN17 = 17,
302+
MRAA_RADXA_ROCK_3A_PIN18 = 18,
303+
MRAA_RADXA_ROCK_3A_PIN19 = 19,
304+
MRAA_RADXA_ROCK_3A_PIN21 = 21,
305+
MRAA_RADXA_ROCK_3A_PIN23 = 23,
306+
MRAA_RADXA_ROCK_3A_PIN24 = 24,
307+
MRAA_RADXA_ROCK_3A_PIN26 = 26,
308+
MRAA_RADXA_ROCK_3A_PIN27 = 27,
309+
MRAA_RADXA_ROCK_3A_PIN28 = 28,
310+
MRAA_RADXA_ROCK_3A_PIN29 = 29,
311+
MRAA_RADXA_ROCK_3A_PIN31 = 31,
312+
MRAA_RADXA_ROCK_3A_PIN32 = 32,
313+
MRAA_RADXA_ROCK_3A_PIN33 = 33,
314+
MRAA_RADXA_ROCK_3A_PIN35 = 35,
315+
MRAA_RADXA_ROCK_3A_PIN36 = 36,
316+
MRAA_RADXA_ROCK_3A_PIN37 = 37,
317+
MRAA_RADXA_ROCK_3A_PIN38 = 38,
318+
MRAA_RADXA_ROCK_3A_PIN40 = 40
319+
} mraa_radxa_rock_3a_wiring_t;
320+
286321
/**
287322
* Radxa ROCK 3 Model B GPIO numbering enum
288323
*/

api/mraa/types.hpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ typedef enum {
7171
RADXA_ROCK_3B = 32, /**< Radxa ROCK 3 Model B */
7272
RADXA_CM3 = 33, /**< Radxa CM3 */
7373
RADXA_CM5_IO = 34, /**< Radxa CM5 IO */
74+
RADXA_ROCK_3A = 35, /**< Radxa ROCK 3 Model A */
7475

7576
FTDI_FT4222 = 256, /**< FTDI FT4222 USB to i2c bridge */
7677

@@ -274,6 +275,40 @@ typedef enum {
274275
RADXA_CM5_IO_PIN40 = 40
275276
} RadxaCM5IOWiring;
276277

278+
/**
279+
* Radxa ROCK 3 Model A GPIO numbering enum
280+
*/
281+
typedef enum {
282+
RADXA_ROCK_3A_PIN3 = 3,
283+
RADXA_ROCK_3A_PIN5 = 5,
284+
RADXA_ROCK_3A_PIN7 = 7,
285+
RADXA_ROCK_3A_PIN8 = 8,
286+
RADXA_ROCK_3A_PIN10 = 10,
287+
RADXA_ROCK_3A_PIN11 = 11,
288+
RADXA_ROCK_3A_PIN12 = 12,
289+
RADXA_ROCK_3A_PIN13 = 13,
290+
RADXA_ROCK_3A_PIN15 = 15,
291+
RADXA_ROCK_3A_PIN16 = 16,
292+
RADXA_ROCK_3A_PIN17 = 17,
293+
RADXA_ROCK_3A_PIN18 = 18,
294+
RADXA_ROCK_3A_PIN19 = 19,
295+
RADXA_ROCK_3A_PIN21 = 21,
296+
RADXA_ROCK_3A_PIN23 = 23,
297+
RADXA_ROCK_3A_PIN24 = 24,
298+
RADXA_ROCK_3A_PIN26 = 26,
299+
RADXA_ROCK_3A_PIN27 = 27,
300+
RADXA_ROCK_3A_PIN28 = 28,
301+
RADXA_ROCK_3A_PIN29 = 29,
302+
RADXA_ROCK_3A_PIN31 = 31,
303+
RADXA_ROCK_3A_PIN32 = 32,
304+
RADXA_ROCK_3A_PIN33 = 33,
305+
RADXA_ROCK_3A_PIN35 = 35,
306+
RADXA_ROCK_3A_PIN36 = 36,
307+
RADXA_ROCK_3A_PIN37 = 37,
308+
RADXA_ROCK_3A_PIN38 = 38,
309+
RADXA_ROCK_3A_PIN40 = 40
310+
} RadxaRock3AWiring;
311+
277312
/**
278313
* Radxa ROCK 3 Model B GPIO numbering enum
279314
*/

docs/index.java.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ Specific platform information for supported platforms is documented here:
5656
- @ref _orange_pi_prime
5757
- @ref radxa_cm3
5858
- @ref radxa_cm5_io
59+
- @ref radxa_rock_3a
5960
- @ref radxa_rock_3b
6061
- @ref radxa_rock_3c
6162
- @ref radxa_rock_5a

docs/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ Specific platform information for supported platforms is documented here:
6464
- @ref _orange_pi_prime
6565
- @ref radxa_cm3
6666
- @ref radxa_cm5_io
67+
- @ref radxa_rock_3a
6768
- @ref radxa_rock_3b
6869
- @ref radxa_rock_3c
6970
- @ref radxa_rock_5a

docs/radxa_rock_3a.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
Radxa ROCK 3 Model A {#_Radxa}
2+
====================
3+
4+
Radxa ROCK 3 Model A is a Rockchip RK3568 based SBC(Single Board Computer) by Radxa. It can run Android or Linux. Radxa ROCK 3 Model A features a four core ARM processor, 64bit dual channel 3200Mb/s LPDDR4, HDMI up to 4K60p, MIPI DSI, MIPI CSI, 3.5mm combo audio jack, Wi-Fi 6, Bluetooth 5.0, USB, GbE LAN, and 40-pin color expansion header. Radxa ROCK 3 Model A is powered by the USB Type-C port, and supports 5V input only. The recommended power adapter is 5V/3A without SSD, or 5V/5A with SSD.
5+
6+
Interface notes
7+
---------------
8+
9+
- UART2 is enabled as the default console.
10+
- All UART ports support baud up to 1500000.
11+
12+
Pin Mapping
13+
-----------
14+
15+
Radxa ROCK 3 Model A has a 40-pin expansion header. Each pin is distinguished by the color.
16+
17+
| Function5| Function4| Function3| Function2| Function1| PIN | PIN | Function1| Function2| Function3| Function4| Function5|
18+
|-------------|-------------|-----------|-------------|-----------|:------|------:|----------|-------------|-----------|------------|------------|
19+
| | | | | 3V3| 1 | 2 |+5.0V | | | | |
20+
| | |UART3_RX_M0| I2C3_SDA_M0| GPIO1_A0| 3 | 4 |+5.0V | | | | |
21+
| | |UART3_TX_M0| I2C3_SCL_M0| GPIO1_A1| 5 | 6 |GND | |UART2_TXD | | |
22+
| | PWM1_M1| | I2C2_SCL_M0| GPIO0_B5| 7 | 8 |GPIO0_D1 | |UART2_RXD | | |
23+
| | | | | GND| 9 | 10 |GPIO0_D0 | | | | |
24+
| | PWM14_M0|UART7_TX_M1| | GPIO3_C4| 11 | 12 |GPIO3_A3 | | | | |
25+
| | PWM15_IR_M0|UART7_RX_M1| | GPIO3_C5| 13 | 14 |GND | | | | |
26+
| | PWM1_M0| UART0_RX| | GPIO0_C0| 15 | 16 |GPIO0_B6 |I2C2_SDA_M0 | |PWM2_M1 | |
27+
| | | | | 3V3| 17 | 18 |GPIO3_B2 | |UART4_TX_M1| | |
28+
| SPI3_MOSI_M1| PWM15_IR_M1| | | GPIO4_C3| 19 | 20 |GND | | | | |
29+
| SPI3_MISO_M1| PWM12_M1|UART9_TX_M1| | GPIO4_C5| 21 | 22 |GPIO0_C1 | |UART0_TX |PWM2_M0 | |
30+
| SPI3_CLK_M1| PWM14_M1| | | GPIO4_C2| 23 | 24 |GPIO4_C6 | |UART9_RX_M1|PWM13_M1 |SPI3_CS0_M1 |
31+
| | | | | GND| 25 | 26 |GPIO4_D1 | | | |SPI3_CS1_M1 |
32+
| | PWM2_M1| | I2C1_SDA| GPIO0_B4| 27 | 28 |GPIO0_B3 |I2C1_SCL | |PWM1_M1 | |
33+
| | |UART8_TX_M1| | GPIO2_D7| 29 | 30 |GND | | | | |
34+
| SPI2_CLK_M1| |UART8_RX_M1| | GPIO3_A0| 31 | 32 |GPIO3_C2 | |UART5_TX_M1| | |
35+
| | |UART5_RX_M1| | GPIO3_C3| 33 | 34 |GND | | | | |
36+
| | | | | GPIO3_A4| 35 | 36 |GPIO3_A2 | | | | |
37+
| | | | |SARADC_VIN5| 37 | 38 |GPIO3_A6 | | | | |
38+
| | | | | GND| 39 | 40 |GPIO3_A5 | | | | |
39+
40+
Supports
41+
--------
42+
43+
You can find additional product support in the following channels:
44+
45+
- [Product Info](https://docs.radxa.com/en/rock3/rock3a)
46+
- [Forums](https://forum.radxa.com/c/rock3)
47+
- [Github](https://github.com/radxa)

include/arm/radxa_rock_3a.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Author: Nascs <[email protected]>
3+
* Copyright (c) Radxa Limited.
4+
*
5+
* SPDX-License-Identifier: MIT
6+
*/
7+
8+
#pragma once
9+
10+
#ifdef __cplusplus
11+
extern "C" {
12+
#endif
13+
14+
#include "mraa_internal.h"
15+
16+
#define MRAA_RADXA_ROCK_3A_GPIO_COUNT 28
17+
#define MRAA_RADXA_ROCK_3A_I2C_COUNT 3
18+
#define MRAA_RADXA_ROCK_3A_SPI_COUNT 1
19+
#define MRAA_RADXA_ROCK_3A_UART_COUNT 7
20+
#define MRAA_RADXA_ROCK_3A_PWM_COUNT 11
21+
#define MRAA_RADXA_ROCK_3A_AIO_COUNT 1
22+
#define MRAA_RADXA_ROCK_3A_PIN_COUNT 40
23+
#define PLATFORM_NAME_RADXA_ROCK_3A "Radxa ROCK3 Model A"
24+
25+
mraa_board_t *
26+
mraa_radxa_rock_3a();
27+
28+
#ifdef __cplusplus
29+
}
30+
#endif

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ set (mraa_LIB_ARM_SRCS_NOAUTO
107107
${PROJECT_SOURCE_DIR}/src/arm/phyboard.c
108108
${PROJECT_SOURCE_DIR}/src/arm/banana.c
109109
${PROJECT_SOURCE_DIR}/src/arm/de_nano_soc.c
110+
${PROJECT_SOURCE_DIR}/src/arm/radxa_rock_3a.c
110111
${PROJECT_SOURCE_DIR}/src/arm/radxa_rock_3b.c
111112
${PROJECT_SOURCE_DIR}/src/arm/radxa_rock_3c.c
112113
${PROJECT_SOURCE_DIR}/src/arm/radxa_cm3.c

src/arm/arm.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include "arm/96boards.h"
1313
#include "arm/radxa_cm3.h"
14+
#include "arm/radxa_rock_3a.h"
1415
#include "arm/radxa_rock_3b.h"
1516
#include "arm/radxa_rock_3c.h"
1617
#include "arm/radxa_rock_5a.h"
@@ -102,6 +103,8 @@ mraa_arm_platform()
102103
mraa_file_contains("/proc/device-tree/model", PLATFORM_NAME_RADXA_CM3_IO_2) ||
103104
mraa_file_contains("/proc/device-tree/model", PLATFORM_NAME_RADXA_CM3_RPI_CM4_IO))
104105
platform_type = MRAA_RADXA_CM3;
106+
else if (mraa_file_contains("/proc/device-tree/model", PLATFORM_NAME_RADXA_ROCK_3A))
107+
platform_type = MRAA_RADXA_ROCK_3A;
105108
else if (mraa_file_contains("/proc/device-tree/model", PLATFORM_NAME_RADXA_ROCK_3B))
106109
platform_type = MRAA_RADXA_ROCK_3B;
107110
else if (mraa_file_contains("/proc/device-tree/model", PLATFORM_NAME_RADXA_ROCK_3C))
@@ -146,6 +149,9 @@ mraa_arm_platform()
146149
case MRAA_RADXA_CM3:
147150
plat = mraa_radxa_cm3();
148151
break;
152+
case MRAA_RADXA_ROCK_3A:
153+
plat = mraa_radxa_rock_3a();
154+
break;
149155
case MRAA_RADXA_ROCK_3B:
150156
plat = mraa_radxa_rock_3b();
151157
break;

0 commit comments

Comments
 (0)