Skip to content

Commit 651131b

Browse files
nascsRadxaYuntian
authored andcommitted
platform: add Radxa CM3 platform support
Signed-off-by: Nascs <[email protected]> Co-authored-by: ZHANG Yuntian <[email protected]>
1 parent 81ece69 commit 651131b

File tree

10 files changed

+332
-1
lines changed

10 files changed

+332
-1
lines changed

README.md

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

api/mraa/types.h

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ typedef enum {
7474
MRAA_RADXA_ROCK_5A = 29, /**< Radxa ROCK 5 Model A */
7575
MRAA_RADXA_ROCK_5B = 30, /**< Radxa ROCK 5 Model B */
7676
MRAA_ORANGE_PI_PRIME = 31, /**< Orange Pi Prime board */
77-
MRAA_RADXA_ROCK_3B = 32, /**< Radxa ROCK 3 Model B */
77+
MRAA_RADXA_ROCK_3B = 32, /**< Radxa ROCK 3 Model B */
78+
MRAA_RADXA_CM3 = 33, /**< Radxa CM3 */
7879

7980
// USB platform extenders start at 256
8081
MRAA_FTDI_FT4222 = 256, /**< FTDI FT4222 USB to i2c bridge */
@@ -316,6 +317,39 @@ typedef enum {
316317
MRAA_RADXA_ROCK_3C_PIN40 = 40
317318
} mraa_radxa_rock_3c_wiring_t;
318319

320+
/**
321+
* Radxa CM3 IO GPIO numbering enum
322+
*/
323+
typedef enum {
324+
MRAA_RADXA_CM3_IO_PIN3 = 3,
325+
MRAA_RADXA_CM3_IO_PIN5 = 5,
326+
MRAA_RADXA_CM3_IO_PIN7 = 7,
327+
MRAA_RADXA_CM3_IO_PIN8 = 8,
328+
MRAA_RADXA_CM3_IO_PIN10 = 10,
329+
MRAA_RADXA_CM3_IO_PIN11 = 11,
330+
MRAA_RADXA_CM3_IO_PIN12 = 12,
331+
MRAA_RADXA_CM3_IO_PIN13 = 13,
332+
MRAA_RADXA_CM3_IO_PIN15 = 15,
333+
MRAA_RADXA_CM3_IO_PIN16 = 16,
334+
MRAA_RADXA_CM3_IO_PIN18 = 18,
335+
MRAA_RADXA_CM3_IO_PIN19 = 19,
336+
MRAA_RADXA_CM3_IO_PIN21 = 21,
337+
MRAA_RADXA_CM3_IO_PIN22 = 22,
338+
MRAA_RADXA_CM3_IO_PIN23 = 23,
339+
MRAA_RADXA_CM3_IO_PIN24 = 24,
340+
MRAA_RADXA_CM3_IO_PIN27 = 27,
341+
MRAA_RADXA_CM3_IO_PIN28 = 28,
342+
MRAA_RADXA_CM3_IO_PIN29 = 29,
343+
MRAA_RADXA_CM3_IO_PIN31 = 31,
344+
MRAA_RADXA_CM3_IO_PIN32 = 32,
345+
MRAA_RADXA_CM3_IO_PIN33 = 33,
346+
MRAA_RADXA_CM3_IO_PIN35 = 35,
347+
MRAA_RADXA_CM3_IO_PIN36 = 36,
348+
MRAA_RADXA_CM3_IO_PIN37 = 37,
349+
MRAA_RADXA_CM3_IO_PIN38 = 38,
350+
MRAA_RADXA_CM3_IO_PIN40 = 40
351+
} mraa_radxa_cm3_io_wiring_t;
352+
319353
/**
320354
* ROCKPI4 GPIO numbering enum
321355
*/

api/mraa/types.hpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ typedef enum {
6969
RADXA_ROCK_5B = 30, /**< Radxa ROCK 5 Model B */
7070
ORANGE_PI_PRIME = 31, /**< Orange Pi Prime board */
7171
RADXA_ROCK_3B = 32, /**< Radxa ROCK 3 Model B */
72+
RADXA_CM3 = 33, /**< Radxa CM3 */
7273

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

@@ -306,6 +307,39 @@ typedef enum {
306307
RADXA_ROCK_3C_PIN40 = 40
307308
} RadxaRock3CWiring;
308309

310+
/**
311+
* Radxa CM3 IO GPIO numbering enum
312+
*/
313+
typedef enum {
314+
RADXA_CM3_IO_PIN3 = 3,
315+
RADXA_CM3_IO_PIN5 = 5,
316+
RADXA_CM3_IO_PIN7 = 7,
317+
RADXA_CM3_IO_PIN8 = 8,
318+
RADXA_CM3_IO_PIN10 = 10,
319+
RADXA_CM3_IO_PIN11 = 11,
320+
RADXA_CM3_IO_PIN12 = 12,
321+
RADXA_CM3_IO_PIN13 = 13,
322+
RADXA_CM3_IO_PIN15 = 15,
323+
RADXA_CM3_IO_PIN16 = 16,
324+
RADXA_CM3_IO_PIN18 = 18,
325+
RADXA_CM3_IO_PIN19 = 19,
326+
RADXA_CM3_IO_PIN21 = 21,
327+
RADXA_CM3_IO_PIN22 = 22,
328+
RADXA_CM3_IO_PIN23 = 23,
329+
RADXA_CM3_IO_PIN24 = 24,
330+
RADXA_CM3_IO_PIN27 = 27,
331+
RADXA_CM3_IO_PIN28 = 28,
332+
RADXA_CM3_IO_PIN29 = 29,
333+
RADXA_CM3_IO_PIN31 = 31,
334+
RADXA_CM3_IO_PIN32 = 32,
335+
RADXA_CM3_IO_PIN33 = 33,
336+
RADXA_CM3_IO_PIN35 = 35,
337+
RADXA_CM3_IO_PIN36 = 36,
338+
RADXA_CM3_IO_PIN37 = 37,
339+
RADXA_CM3_IO_PIN38 = 38,
340+
RADXA_CM3_IO_PIN40 = 40
341+
} RadxaCM3IOWiring;
342+
309343
/**
310344
* ROCKPI4 GPIO numbering enum
311345
*/

docs/index.java.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ Specific platform information for supported platforms is documented here:
5454
- @ref iei-tank
5555
- @ref up-xtreme
5656
- @ref _orange_pi_prime
57+
- @ref radxa_cm3
58+
- @ref radxa_rock_3b
59+
- @ref radxa_rock_3c
60+
- @ref radxa_rock_5a
61+
- @ref radxa_rock_5b
62+
- @ref rockpi4
5763

5864
## DEBUGGING
5965

docs/index.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ Specific platform information for supported platforms is documented here:
6262
- @ref iei-tank
6363
- @ref upXtreme
6464
- @ref _orange_pi_prime
65+
- @ref radxa_cm3
66+
- @ref radxa_rock_3b
67+
- @ref radxa_rock_3c
68+
- @ref radxa_rock_5a
69+
- @ref radxa_rock_5b
70+
- @ref rockpi4
6571

6672
## DEBUGGING
6773

docs/radxa_cm3.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
Radxa CM3 {#_Radxa}
2+
=========
3+
4+
The Radxa CM3 is a System on Module (SoM) based on the Rockchip RK3566 System on Chip (SoC). CM3 integrates the Central Process Unit (CPU), Power Management Unit (PMU), DRAM memory, flash storage and wireless connectivity (WiFi 5 and BT 5.0) in a small form factor of just 55mm x 40mm. CM3 uses 3x 100P 0.4mm-pitch Board-to-Board connectors to export various features, and can be combined with the customer's baseboard to build complete products, thereby speeding up the research and development process.
5+
Currently, CM3 is compatible with Radxa CM3 IO Board and Raspberry Pi CM4 IO Board.
6+
7+
Interface notes
8+
---------------
9+
10+
- UART2 is enabled as the default console.
11+
- All UART ports support baud up to 1500000.
12+
13+
Pin Mapping
14+
-----------
15+
16+
Radxa CM3 IO Board and Raspberry Pi CM4 IO Baseboard's 40-pin expansion header are compatible. The following pinout applies to both products:
17+
18+
| Function3| Function3| Function2| Function1| PIN | PIN | Function1| Function2| Function3|
19+
|-------------|------------|-------------|----------|:------|------:|-----------|-------------|----------|
20+
| | | | 3V3| 1 | 2 | +5.0V| | |
21+
| PWM2_M1|SPI0_MOSI_M0| I2C2_SDA_M0| GPIO0_B6| 3 | 4 | +5.0V| | |
22+
| PWM1_M1| SPI0_CLK_M0| I2C2_SCL_M0| GPIO0_B5| 5 | 6 | GND| | |
23+
| | | | GPIO3_D5| 7 | 8 | GPIO0_D1| UART2_TX_M0| |
24+
| | | | GND| 9 | 10 | GPIO0_D0| UART2_RX_M0| |
25+
| | | PWM0_M1| GPIO0_C7| 11 | 12 | GPIO3_C7| | |
26+
| | | PWM0_M0| GPIO0_B7| 13 | 14 | GND| | |
27+
| | | PWM4| GPIO0_C3| 15 | 16 | GPIO3_D4| | |
28+
| | | | +3.3V| 17 | 18 | GPIO3_D3| | |
29+
| | I2C4_SDA_M0| SPI3_MOSI_M0| GPIO4_B2| 19 | 20 | GND| | |
30+
| | | SPI3_MISO_M0| GPIO4_B0| 21 | 22 | GPIO3_C6| | |
31+
| | I2C4_SCL_M0| SPI3_CLK_M0| GPIO4_B3| 23 | 24 | GPIO4_A6| SPI3_CS0_M0| |
32+
| | | | GND| 25 | 26 |SARADC_VIN3| | |
33+
| | | I2C2_SDA_M1| GPIO4_B4| 27 | 28 | GPIO4_B5| I2C2_SCL_M1| |
34+
| | | | GPIO4_B1| 29 | 30 | GND| | |
35+
| | PWM6| SPI0_MISO_M0| GPIO0_C5| 31 | 32 | GPIO4_C0| UART5_TX_M1| |
36+
| | PWM7_IR| SPI0_CS0_M0| GPIO0_C6| 33 | 34 | GND| | |
37+
| | | | GPIO3_D0| 35 | 36 | GPIO4_A7| SPI3_CS1_M0| |
38+
| | | PWM3_IR| GPIO0_C2| 37 | 38 | GPIO3_D2| | |
39+
| | | | GND| 39 | 40 | GPIO3_D1| | |
40+
41+
Supports
42+
--------
43+
44+
You can find additional product support in the following channels:
45+
46+
- [Product Info](https://docs.radxa.com/en/compute-module/cm3)
47+
- [Forums](https://forum.radxa.com/c/rock3)
48+
- [Github](https://github.com/radxa)

include/arm/radxa_cm3.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Author: Nascs <[email protected]>
3+
* Copyright (c) 2023 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_CM3_GPIO_COUNT 28
17+
#define MRAA_RADXA_CM3_I2C_COUNT 3
18+
#define MRAA_RADXA_CM3_SPI_COUNT 2
19+
#define MRAA_RADXA_CM3_UART_COUNT 1
20+
#define MRAA_RADXA_CM3_PWM_COUNT 9
21+
#define MRAA_RADXA_CM3_AIO_COUNT 1
22+
#define MRAA_RADXA_CM3_PIN_COUNT 40
23+
#define PLATFORM_NAME_RADXA_CM3_IO "Radxa Compute Module 3(CM3) IO Board"
24+
#define PLATFORM_NAME_RADXA_CM3_IO_2 "Radxa CM3 IO Board"
25+
#define PLATFORM_NAME_RADXA_CM3_RPI_CM4_IO "Radxa CM3 RPI CM4 IO" // The core board of the Radxa CM3 is compatible with the RPI CM4 IO backplane.
26+
27+
mraa_board_t *
28+
mraa_radxa_cm3();
29+
30+
#ifdef __cplusplus
31+
}
32+
#endif

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ set (mraa_LIB_ARM_SRCS_NOAUTO
109109
${PROJECT_SOURCE_DIR}/src/arm/de_nano_soc.c
110110
${PROJECT_SOURCE_DIR}/src/arm/radxa_rock_3b.c
111111
${PROJECT_SOURCE_DIR}/src/arm/radxa_rock_3c.c
112+
${PROJECT_SOURCE_DIR}/src/arm/radxa_cm3.c
112113
${PROJECT_SOURCE_DIR}/src/arm/radxa_rock_5a.c
113114
${PROJECT_SOURCE_DIR}/src/arm/radxa_rock_5b.c
114115
${PROJECT_SOURCE_DIR}/src/arm/rockpi4.c

src/arm/arm.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <string.h>
1111

1212
#include "arm/96boards.h"
13+
#include "arm/radxa_cm3.h"
1314
#include "arm/radxa_rock_3b.h"
1415
#include "arm/radxa_rock_3c.h"
1516
#include "arm/radxa_rock_5a.h"
@@ -96,6 +97,10 @@ mraa_arm_platform()
9697
platform_type = MRAA_96BOARDS;
9798
else if (mraa_file_contains("/proc/device-tree/model", "Avnet Ultra96 Rev1"))
9899
platform_type = MRAA_96BOARDS;
100+
else if (mraa_file_contains("/proc/device-tree/model", PLATFORM_NAME_RADXA_CM3_IO) ||
101+
mraa_file_contains("/proc/device-tree/model", PLATFORM_NAME_RADXA_CM3_IO_2) ||
102+
mraa_file_contains("/proc/device-tree/model", PLATFORM_NAME_RADXA_CM3_RPI_CM4_IO))
103+
platform_type = MRAA_RADXA_CM3;
99104
else if (mraa_file_contains("/proc/device-tree/model", PLATFORM_NAME_RADXA_ROCK_3B))
100105
platform_type = MRAA_RADXA_ROCK_3B;
101106
else if (mraa_file_contains("/proc/device-tree/model", PLATFORM_NAME_RADXA_ROCK_3C))
@@ -135,6 +140,9 @@ mraa_arm_platform()
135140
case MRAA_96BOARDS:
136141
plat = mraa_96boards();
137142
break;
143+
case MRAA_RADXA_CM3:
144+
plat = mraa_radxa_cm3();
145+
break;
138146
case MRAA_RADXA_ROCK_3B:
139147
plat = mraa_radxa_rock_3b();
140148
break;

0 commit comments

Comments
 (0)