Skip to content

Commit d055b45

Browse files
nascstingleby
authored andcommitted
platform: add Radxa CM5 IO platform support
Signed-off-by: Nascs <[email protected]>
1 parent 651131b commit d055b45

File tree

10 files changed

+317
-1
lines changed

10 files changed

+317
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ ARM
5050
* [Radxa ROCK 3C](../master/docs/radxa_rock_3c.md)
5151
* [Radxa ROCK 5A](../master/docs/radxa_rock_5a.md)
5252
* [Radxa ROCK 5B](../master/docs/radxa_rock_5b.md)
53+
* [Radxa CM5 IO](../master/docs/radxa_cm5_io.md)
5354
* [Rock Pi 4](../master/docs/rockpi4.md)
5455
* [Orange Pi Prime](../master/docs/orange_pi_prime.md)
5556

api/mraa/types.h

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ typedef enum {
7676
MRAA_ORANGE_PI_PRIME = 31, /**< Orange Pi Prime board */
7777
MRAA_RADXA_ROCK_3B = 32, /**< Radxa ROCK 3 Model B */
7878
MRAA_RADXA_CM3 = 33, /**< Radxa CM3 */
79+
MRAA_RADXA_CM5_IO = 34, /**< Radxa CM5 IO */
7980

8081
// USB platform extenders start at 256
8182
MRAA_FTDI_FT4222 = 256, /**< FTDI FT4222 USB to i2c bridge */
@@ -251,6 +252,37 @@ typedef enum {
251252
MRAA_RADXA_ROCK_5B_PIN40 = 40
252253
} mraa_radxa_rock_5b_wiring_t;
253254

255+
/**
256+
* Radxa CM5 IO GPIO numbering enum
257+
*/
258+
typedef enum {
259+
RADXA_CM5_IO_PIN3 = 3,
260+
RADXA_CM5_IO_PIN5 = 5,
261+
RADXA_CM5_IO_PIN7 = 7,
262+
RADXA_CM5_IO_PIN8 = 8,
263+
RADXA_CM5_IO_PIN10 = 10,
264+
RADXA_CM5_IO_PIN11 = 11,
265+
RADXA_CM5_IO_PIN12 = 12,
266+
RADXA_CM5_IO_PIN13 = 13,
267+
RADXA_CM5_IO_PIN15 = 15,
268+
RADXA_CM5_IO_PIN16 = 16,
269+
RADXA_CM5_IO_PIN18 = 18,
270+
RADXA_CM5_IO_PIN19 = 19,
271+
RADXA_CM5_IO_PIN21 = 21,
272+
RADXA_CM5_IO_PIN22 = 22,
273+
RADXA_CM5_IO_PIN23 = 23,
274+
RADXA_CM5_IO_PIN24 = 24,
275+
RADXA_CM5_IO_PIN26 = 26,
276+
RADXA_CM5_IO_PIN29 = 29,
277+
RADXA_CM5_IO_PIN31 = 31,
278+
RADXA_CM5_IO_PIN32 = 32,
279+
RADXA_CM5_IO_PIN33 = 33,
280+
RADXA_CM5_IO_PIN35 = 35,
281+
RADXA_CM5_IO_PIN36 = 36,
282+
RADXA_CM5_IO_PIN38 = 38,
283+
RADXA_CM5_IO_PIN40 = 40
284+
} mraa_radxa_cm5_io_wiring_t;
285+
254286
/**
255287
* Radxa ROCK 3 Model B GPIO numbering enum
256288
*/
@@ -283,7 +315,6 @@ typedef enum {
283315
RADXA_ROCK_3B_PIN40 = 40
284316
} mraa_radxa_rock_3b_wiring_t;
285317

286-
287318
/**
288319
* Radxa ROCK 3 Model C GPIO numbering enum
289320
*/

api/mraa/types.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ typedef enum {
7070
ORANGE_PI_PRIME = 31, /**< Orange Pi Prime board */
7171
RADXA_ROCK_3B = 32, /**< Radxa ROCK 3 Model B */
7272
RADXA_CM3 = 33, /**< Radxa CM3 */
73+
RADXA_CM5_IO = 34, /**< Radxa CM5 IO */
7374

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

@@ -242,6 +243,37 @@ typedef enum {
242243
RADXA_ROCK_5B_PIN40 = 40
243244
} RadxaRock5BWiring;
244245

246+
/**
247+
* Radxa CM5 IO GPIO numbering enum
248+
*/
249+
typedef enum {
250+
RADXA_CM5_IO_PIN3 = 3,
251+
RADXA_CM5_IO_PIN5 = 5,
252+
RADXA_CM5_IO_PIN7 = 7,
253+
RADXA_CM5_IO_PIN8 = 8,
254+
RADXA_CM5_IO_PIN10 = 10,
255+
RADXA_CM5_IO_PIN11 = 11,
256+
RADXA_CM5_IO_PIN12 = 12,
257+
RADXA_CM5_IO_PIN13 = 13,
258+
RADXA_CM5_IO_PIN15 = 15,
259+
RADXA_CM5_IO_PIN16 = 16,
260+
RADXA_CM5_IO_PIN18 = 18,
261+
RADXA_CM5_IO_PIN19 = 19,
262+
RADXA_CM5_IO_PIN21 = 21,
263+
RADXA_CM5_IO_PIN22 = 22,
264+
RADXA_CM5_IO_PIN23 = 23,
265+
RADXA_CM5_IO_PIN24 = 24,
266+
RADXA_CM5_IO_PIN26 = 26,
267+
RADXA_CM5_IO_PIN29 = 29,
268+
RADXA_CM5_IO_PIN31 = 31,
269+
RADXA_CM5_IO_PIN32 = 32,
270+
RADXA_CM5_IO_PIN33 = 33,
271+
RADXA_CM5_IO_PIN35 = 35,
272+
RADXA_CM5_IO_PIN36 = 36,
273+
RADXA_CM5_IO_PIN38 = 38,
274+
RADXA_CM5_IO_PIN40 = 40
275+
} RadxaCM5IOWiring;
276+
245277
/**
246278
* Radxa ROCK 3 Model B GPIO numbering enum
247279
*/

docs/index.java.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Specific platform information for supported platforms is documented here:
5555
- @ref up-xtreme
5656
- @ref _orange_pi_prime
5757
- @ref radxa_cm3
58+
- @ref radxa_cm5_io
5859
- @ref radxa_rock_3b
5960
- @ref radxa_rock_3c
6061
- @ref radxa_rock_5a

docs/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ Specific platform information for supported platforms is documented here:
6363
- @ref upXtreme
6464
- @ref _orange_pi_prime
6565
- @ref radxa_cm3
66+
- @ref radxa_cm5_io
6667
- @ref radxa_rock_3b
6768
- @ref radxa_rock_3c
6869
- @ref radxa_rock_5a

docs/radxa_cm5_io.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
Radxa CM5 IO {#_Radxa}
2+
============
3+
4+
The Radxa CM5 is a System on Module (SoM) based on the Rockchip RK3588s System on Chip (SoC). CM5 is compatible with Radxa CM5 IO Board. It can run android or some Linux distributions. Radxa CM5 IO features an eight core ARM processor, 64bit dual channel 3200Mb/s LPDDR4, up to 8Kp60 HDMI, MIPI DSI, MIPI CSI, 3.5mm jack with mic, 802.11 ac WIFI, Bluetooth 5.0, USB Port, GbE LAN, 40-pin color expansion header, RTC. Also, Radxa CM5 IO supports USB PD and QC powering.
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 CM5 IO has a 40-pin expansion header. Each pin is distinguished by color.
16+
17+
|Function4 |Function3 |Function2 |Function1 | | PIN | PIN | Function1| Function2| Function3|
18+
|------------|------------|------------|-----------|:------|------:|---------|------------|-----------|------------|
19+
| | | |+3.3V | 1 | 2 | +5.0V| | | |
20+
| | |I2C7_SDA_M2 |GPIO3_D3 | 3 | 4 | +5.0V| | | |
21+
| | |I2C7_SCL_M2 |GPIO3_D2 | 5 | 6 | GND| | | |
22+
| | |I2C5_SDA_M2 |GPIO4_A7 | 7 | 8 | GPIO0_B5| UART2_TX_M0|I2C1_SCL_M0| |
23+
| | | |GND | 9 | 10 | GPIO0_B6| UART2_RX_M0|I2C1_SDA_M0| |
24+
| |UART3_RX_M2 |I2C5_SCL_M2 |GPIO4_A6 | 11 | 12 | GPIO0_C2| | | |
25+
| |UART3_TX_M2 |I2C3_SDA_M2 |GPIO4_A5 | 13 | 14 | GND| | | |
26+
| | |I2C3_SCL_M2 |GPIO4_A4 | 15 | 16 | GPIO1_C4| PWM11_IR_M2| | |
27+
| | | |+3.3V | 17 | 18 | GPIO1_D5| | | |
28+
| | |SPI0_MOSI_M1|GPIO4_A1 | 19 | 20 | GND| | | |
29+
| | |SPI0_MISO_M1|GPIO4_A0 | 21 | 22 | GPIO1_B1| | | |
30+
| | |SPI0_CLK_M1 |GPIO4_A2 | 23 | 24 | GPIO4_B2| SPI0_CS0_M1| PWM14_M1| |
31+
| | | |GND | 25 | 26 | GPIO3_B7| | | |
32+
| | | |+3.3V | 27 | 28 | +3.3V| | | |
33+
| | |PWM7_IR_M0 |GPIO0_D0 | 29 | 30 | GND| | | |
34+
| | |PWM6_M0 |GPIO0_C7 | 31 | 32 | GPIO1_B7| PWM13_M2| | |
35+
| | | |GPIO1_C1 | 33 | 34 | GND| | | |
36+
| | | |GPIO3_C0 | 35 | 36 | GPIO1_C6| PWM15_IR_M2| | |
37+
| | | |SARADC_VIN4| 37 | 38 | GPIO1_D2| PWM0_M1| | |
38+
| | | |GND | 39 | 40 | GPIO0_D3| | | |
39+
40+
Resources
41+
---------
42+
43+
You can find additional product support in the following channels:
44+
45+
- [Product Info](https://docs.radxa.com/compute-module/cm5)
46+
- [Forums](https://forum.radxa.com/c/rock5)
47+
- [Github](https://github.com/radxa)

include/arm/radxa_cm5_io.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_CM5_IO_GPIO_COUNT 25
17+
#define MRAA_RADXA_CM5_IO_I2C_COUNT 4
18+
#define MRAA_RADXA_CM5_IO_SPI_COUNT 1
19+
#define MRAA_RADXA_CM5_IO_UART_COUNT 2
20+
#define MRAA_RADXA_CM5_IO_PWM_COUNT 7
21+
#define MRAA_RADXA_CM5_IO_AIO_COUNT 1
22+
#define MRAA_RADXA_CM5_IO_PIN_COUNT 40
23+
#define PLATFORM_NAME_RADXA_CM5_IO "Radxa CM5 IO"
24+
25+
mraa_board_t *
26+
mraa_radxa_cm5_io();
27+
28+
#ifdef __cplusplus
29+
}
30+
#endif

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ set (mraa_LIB_ARM_SRCS_NOAUTO
112112
${PROJECT_SOURCE_DIR}/src/arm/radxa_cm3.c
113113
${PROJECT_SOURCE_DIR}/src/arm/radxa_rock_5a.c
114114
${PROJECT_SOURCE_DIR}/src/arm/radxa_rock_5b.c
115+
${PROJECT_SOURCE_DIR}/src/arm/radxa_cm5_io.c
115116
${PROJECT_SOURCE_DIR}/src/arm/rockpi4.c
116117
${PROJECT_SOURCE_DIR}/src/arm/adlink_ipi.c
117118
${PROJECT_SOURCE_DIR}/src/arm/siemens/iot2050.c

src/arm/arm.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "arm/radxa_rock_3c.h"
1616
#include "arm/radxa_rock_5a.h"
1717
#include "arm/radxa_rock_5b.h"
18+
#include "arm/radxa_cm5_io.h"
1819
#include "arm/rockpi4.h"
1920
#include "arm/de_nano_soc.h"
2021
#include "arm/banana.h"
@@ -109,6 +110,8 @@ mraa_arm_platform()
109110
platform_type = MRAA_RADXA_ROCK_5A;
110111
else if (mraa_file_contains("/proc/device-tree/model", PLATFORM_NAME_RADXA_ROCK_5B))
111112
platform_type = MRAA_RADXA_ROCK_5B;
113+
else if (mraa_file_contains("/proc/device-tree/model", PLATFORM_NAME_RADXA_CM5_IO))
114+
platform_type = MRAA_RADXA_CM5_IO;
112115
else if (mraa_file_contains("/proc/device-tree/model", "ROCK Pi 4") ||
113116
mraa_file_contains("/proc/device-tree/model", "ROCK PI 4") ||
114117
mraa_file_contains("/proc/device-tree/model", "ROCK 4")
@@ -155,6 +158,9 @@ mraa_arm_platform()
155158
case MRAA_RADXA_ROCK_5B:
156159
plat = mraa_radxa_rock_5b();
157160
break;
161+
case MRAA_RADXA_CM5_IO:
162+
plat = mraa_radxa_cm5_io();
163+
break;
158164
case MRAA_ROCKPI4:
159165
plat = mraa_rockpi4();
160166
break;

0 commit comments

Comments
 (0)