Skip to content

Commit 32eebc2

Browse files
Support Orange Pi AI MAX
1 parent e305edf commit 32eebc2

File tree

5 files changed

+147
-0
lines changed

5 files changed

+147
-0
lines changed

examples/blink.c

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ unsigned char getGpioNum(void)
4242
case PI_MODEL_5_MAX:
4343
case PI_MODEL_5_ULTRA:
4444
case PI_MODEL_5_PLUS:
45+
case PI_MODEL_AI_MAX:
4546
case PI_MODEL_900:
4647
case PI_MODEL_CM4:
4748
case PI_MODEL_3B:

examples/pwm.c

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ static void set_pwm_info(int pin)
7171
}
7272
break;
7373
case PI_MODEL_5_PLUS:
74+
case PI_MODEL_AI_MAX:
7475
if (pin != 0 && pin != 1 && pin != 2 && pin != 6 && pin != 9 && pin != 10 && pin != 13 && pin != 17 && pin != 20 && pin != 21 && pin != 22) {
7576
fprintf (stderr, "the pin you choose doesn't support hardware PWM\n") ;
7677
exit(1);

gpio/readall.c

+64
Original file line numberDiff line numberDiff line change
@@ -1015,6 +1015,35 @@ static int physToWpi_5PLUS[64] =
10151015
-1, -1, -1, -1, -1, -1, -1, // ... 63
10161016
};
10171017

1018+
static int physToWpi_AIMAX[64] =
1019+
{
1020+
-1, //0
1021+
-1, -1, //1,2
1022+
0, -1, //3,4
1023+
1, -1, //5,6
1024+
2, 3, //7,8
1025+
-1, 4, //9,10
1026+
5, 6, //11,12
1027+
7, -1, //13,14
1028+
8, 9, //15,16
1029+
-1, 10, //17,18
1030+
11, -1, //19,20
1031+
12, 13, //21,22
1032+
14, 15, //23,24
1033+
-1, 16, //25,26
1034+
17, 18, //27,28
1035+
19, -1, //29,30
1036+
20, 21, //31,32
1037+
22, -1, //33,34
1038+
23, 24, //35,36
1039+
25, 26, //37,38
1040+
-1, 27, //39,40
1041+
1042+
// Padding:
1043+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56
1044+
-1, -1, -1, -1, -1, -1, -1, // ... 63
1045+
};
1046+
10181047
static char * physNames_5MAX[64] =
10191048
{
10201049
NULL,
@@ -1287,6 +1316,31 @@ static char * physNames_5PLUS[64] =
12871316
" GND", "GPIO3_A3",
12881317
};
12891318

1319+
static char * physNames_AIMAX[64] =
1320+
{
1321+
NULL,
1322+
" 3.3V", "5V ",
1323+
" SDA.2", "5V ",
1324+
" SCL.2", "GND ",
1325+
" PWM14", "GPIO1_A1",
1326+
" GND", "GPIO1_A0",
1327+
"GPIO1_A4", "GPIO3_A1",
1328+
"GPIO1_A7", "GND ",
1329+
"GPIO1_B0", "GPIO3_B5",
1330+
" 3.3V", "GPIO3_B6",
1331+
"SPI0_TXD", "GND ",
1332+
"SPI0_RXD", "GPIO1_A2",
1333+
"SPI0_CLK", "SPI0_CS0",
1334+
" GND", "SPI0_CS1",
1335+
"GPIO1_B7", "GPIO1_B6",
1336+
"GPIO1_D7", "GND ",
1337+
"GPIO3_A0", "GPIO1_A3",
1338+
"GPIO3_C2", "GND ",
1339+
"GPIO3_A2", "GPIO3_A5",
1340+
"GPIO3_C1", "GPIO3_A4",
1341+
" GND", "GPIO3_A3",
1342+
};
1343+
12901344
static int physToWpi_900[64] =
12911345
{
12921346
-1, //0
@@ -1883,6 +1937,12 @@ void OrangePiReadAll(int model)
18831937
physNames = physNames_5PLUS;
18841938
alts = alts_rk3588;
18851939
break;
1940+
case PI_MODEL_AI_MAX:
1941+
printf (" +------+-----+----------+--------+---+ AI MAX +---+--------+----------+-----+------+\n");
1942+
physToWpi = physToWpi_AIMAX;
1943+
physNames = physNames_AIMAX;
1944+
alts = alts_rk3588;
1945+
break;
18861946
case PI_MODEL_900:
18871947
printf (" +------+-----+----------+--------+---+ PI 900 +---+--------+----------+-----+------+\n");
18881948
physToWpi = physToWpi_900;
@@ -1954,6 +2014,7 @@ void OrangePiReadAll(int model)
19542014
case PI_MODEL_5_MAX:
19552015
case PI_MODEL_5_ULTRA:
19562016
case PI_MODEL_5_PLUS:
2017+
case PI_MODEL_AI_MAX:
19572018
case PI_MODEL_900:
19582019
case PI_MODEL_CM4:
19592020
case PI_MODEL_3B:
@@ -2064,6 +2125,9 @@ void OrangePiReadAll(int model)
20642125
case PI_MODEL_5_PLUS:
20652126
printf (" +------+-----+----------+--------+---+ PI5 PLUS +---+--------+----------+-----+------+\n");
20662127
break;
2128+
case PI_MODEL_AI_MAX:
2129+
printf (" +------+-----+----------+--------+---+ AI MAX +---+--------+----------+-----+------+\n");
2130+
break;
20672131
case PI_MODEL_900:
20682132
printf (" +------+-----+----------+--------+---+ PI900 +---+--------+----------+-----+------+\n");
20692133
break;

wiringPi/wiringPi.c

+80
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,15 @@ static int ORANGEPI_PIN_MASK_5PLUS[5][32] = //[BANK] [INDEX]
360360
{-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO4
361361
};
362362

363+
static int ORANGEPI_PIN_MASK_AIMAX[5][32] = //[BANK] [INDEX]
364+
{
365+
{-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1, 5, 6, 7, 0,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO0
366+
{-1,-1, 2, 3, 4,-1,-1, 7, 0, 1, 2, 3, 4, 5, 6, 7, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1, 6, 7,},//GPIO1
367+
{-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO2
368+
{ 0, 1, 2, 3, 4, 5,-1,-1, -1,-1,-1,-1,-1, 5, 6,-1, -1, 1, 2,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO3
369+
{-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO4
370+
};
371+
363372
static int ORANGEPI_PIN_MASK_900[5][32] = //[BANK] [INDEX]
364373
{
365374
{-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO0
@@ -1134,6 +1143,29 @@ int pinToGpio_5PLUS[64] =
11341143
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,// ... 63
11351144
};
11361145

1146+
int pinToGpio_AIMAX[64] =
1147+
{
1148+
16, 15, // 0, 1
1149+
62, 13, // 2, 3
1150+
14, 36, // 4 5
1151+
97, 39, // 6, 7
1152+
40, 109, // 8, 9
1153+
110, 42, //10,11
1154+
41, 34, //12,13
1155+
43, 44, //14,15
1156+
45, 47, //16,17
1157+
46, 63, //18,19
1158+
96, 35, //20,21
1159+
114, 98, //22,23
1160+
101,113, //24,25
1161+
100, 99, //26,27
1162+
-1, -1, //28,29
1163+
-1, -1, //30,31
1164+
1165+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 47
1166+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,// ... 63
1167+
};
1168+
11371169
int pinToGpio_900[64] =
11381170
{
11391171
34, 35, // 0, 1
@@ -1928,6 +1960,35 @@ int physToGpio_5PLUS[64] =
19281960
-1, -1, -1, -1, -1, -1, -1, // ... 63
19291961
};
19301962

1963+
int physToGpio_AIMAX[64] =
1964+
{
1965+
-1, // 0
1966+
-1, -1, // 1, 2
1967+
16, -1, // 3, 4
1968+
15, -1, // 5, 6
1969+
62, 13, // 7, 8
1970+
-1, 14, // 9, 10
1971+
36, 97, // 11, 12
1972+
39, -1, // 13, 14
1973+
40, 109, // 15, 16
1974+
-1, 110, // 17, 18
1975+
42, -1, // 19, 20
1976+
41, 34, // 21, 22
1977+
43, 44, // 23, 24
1978+
-1, 45, // 25, 26
1979+
47, 46, // 27, 28
1980+
63, -1, // 29, 30
1981+
96, 35, // 31, 32
1982+
114, -1, // 33, 34
1983+
98, 101, // 35, 36
1984+
113,100, // 37, 38
1985+
-1, 99, // 39, 40
1986+
1987+
//Padding:
1988+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56
1989+
-1, -1, -1, -1, -1, -1, -1, // ... 63
1990+
};
1991+
19311992
int physToGpio_900[64] =
19321993
{
19331994
-1, // 0
@@ -2473,6 +2534,7 @@ void piBoardId (int * model)
24732534
else if (strncmp(revision, "orangepi5max.", 13) == 0) { *model = PI_MODEL_5_MAX; }
24742535
else if (strncmp(revision, "orangepi5ultra.", 15) == 0) { *model = PI_MODEL_5_ULTRA; }
24752536
else if (strncmp(revision, "orangepi5plus.", 14) == 0) { *model = PI_MODEL_5_PLUS; }
2537+
else if (strncmp(revision, "orangepiaimax.", 14) == 0) { *model = PI_MODEL_AI_MAX; }
24762538
else if (strncmp(revision, "orangepi900.", 12) == 0) { *model = PI_MODEL_900; }
24772539
else if (strncmp(revision, "orangepicm5.", 12) == 0) { *model = PI_MODEL_CM5; }
24782540
else if (strncmp(revision, "orangepicm5-tablet.", 19) == 0) { *model = PI_MODEL_CM5_TABLET; }
@@ -2718,6 +2780,7 @@ void orangepi_pwm_set_tone(int pin,int freq)
27182780
case PI_MODEL_5_MAX:
27192781
case PI_MODEL_5_ULTRA:
27202782
case PI_MODEL_5_PLUS:
2783+
case PI_MODEL_AI_MAX:
27212784

27222785
rk3588_set_pwm_reg(pin, &rk3588_soc_info_t);
27232786

@@ -2945,6 +3008,7 @@ void orangepi_pwm_set_clk(int pin,int clk)
29453008
case PI_MODEL_5_MAX:
29463009
case PI_MODEL_5_ULTRA:
29473010
case PI_MODEL_5_PLUS:
3011+
case PI_MODEL_AI_MAX:
29483012

29493013
if ((clk < 2) || (clk > 512)) {
29503014
fprintf (stderr, "gpio: clock must be between 2 and 512\n") ;
@@ -3166,6 +3230,7 @@ void orangepi_pwm_set_period(int pin, unsigned int period_cys)
31663230
case PI_MODEL_5_MAX:
31673231
case PI_MODEL_5_ULTRA:
31683232
case PI_MODEL_5_PLUS:
3233+
case PI_MODEL_AI_MAX:
31693234

31703235
rk3588_set_pwm_reg(pin, &rk3588_soc_info_t);
31713236

@@ -3329,6 +3394,7 @@ void orangepi_pwm_set_act(int pin, int act_cys)
33293394
case PI_MODEL_5_MAX:
33303395
case PI_MODEL_5_ULTRA:
33313396
case PI_MODEL_5_PLUS:
3397+
case PI_MODEL_AI_MAX:
33323398

33333399
rk3588_set_pwm_reg(pin,&rk3588_soc_info_t);
33343400

@@ -4778,6 +4844,11 @@ int wiringPiSetup (void)
47784844
physToGpio = physToGpio_5PLUS;
47794845
ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_5PLUS;
47804846
break;
4847+
case PI_MODEL_AI_MAX:
4848+
pinToGpio = pinToGpio_AIMAX;
4849+
physToGpio = physToGpio_AIMAX;
4850+
ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_AIMAX;
4851+
break;
47814852
case PI_MODEL_900:
47824853
pinToGpio = pinToGpio_900;
47834854
physToGpio = physToGpio_900;
@@ -4903,6 +4974,7 @@ int wiringPiSetup (void)
49034974
case PI_MODEL_CM5:
49044975
case PI_MODEL_CM5_TABLET:
49054976
case PI_MODEL_5_ULTRA:
4977+
case PI_MODEL_AI_MAX:
49064978

49074979
/* GPIO Register */
49084980
rk3588_soc_info_t.gpio0_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_GPIO0_BASE);
@@ -5316,6 +5388,7 @@ unsigned int readR(unsigned int addr)
53165388
case PI_MODEL_900:
53175389
case PI_MODEL_CM5:
53185390
case PI_MODEL_CM5_TABLET:
5391+
case PI_MODEL_AI_MAX:
53195392

53205393
mmap_base = (addr & (0xfffff000));
53215394
mmap_seek = (addr - mmap_base);
@@ -5546,6 +5619,7 @@ void writeR(unsigned int val, unsigned int addr)
55465619
case PI_MODEL_900:
55475620
case PI_MODEL_CM5:
55485621
case PI_MODEL_CM5_TABLET:
5622+
case PI_MODEL_AI_MAX:
55495623

55505624
mmap_base = (addr & (~0xfff));
55515625
mmap_seek = (addr - mmap_base);
@@ -5795,6 +5869,7 @@ int orangepi_get_gpio_mode(int pin)
57955869
case PI_MODEL_900:
57965870
case PI_MODEL_CM5:
57975871
case PI_MODEL_CM5_TABLET:
5872+
case PI_MODEL_AI_MAX:
57985873

57995874
rk3588_bus_ioc_phyaddr = RK3588_BUS_IOC_BASE + (0x20 * bank) + ((index >> 2) << 2);
58005875
if(bank == 0){
@@ -6298,6 +6373,7 @@ void rk3588_set_pwm_reg(int pin, rk3588_soc_info * rk3588_soc_info_ptr)
62986373
printf("You can select wiringPi pin 0/2/5/13 for PWM pin.\n");
62996374
break;
63006375
case PI_MODEL_5_PLUS:
6376+
case PI_MODEL_AI_MAX:
63016377
printf("You can select wiringPi pin 0/1/2/6/9/10/13/17/20/21/22 for PWM pin.\n");
63026378
break;
63036379
case PI_MODEL_5:
@@ -6372,6 +6448,7 @@ int orangepi_set_gpio_mode(int pin, int mode)
63726448
case PI_MODEL_900:
63736449
case PI_MODEL_CM5:
63746450
case PI_MODEL_CM5_TABLET:
6451+
case PI_MODEL_AI_MAX:
63756452

63766453
rk3588_bus_ioc_phyaddr = RK3588_BUS_IOC_BASE + (0x20 * bank) + ((index >> 2) << 2);
63776454
if(bank == 0){
@@ -7393,6 +7470,7 @@ int orangepi_digitalWrite(int pin, int value)
73937470
case PI_MODEL_900:
73947471
case PI_MODEL_CM5:
73957472
case PI_MODEL_CM5_TABLET:
7473+
case PI_MODEL_AI_MAX:
73967474

73977475
if(bank == 0){
73987476
dr_phyaddr = RK3588_GPIO0_BASE + RK3588_GPIO_SWPORT_DR_L_OFFSET + ((index / 16) << 2);
@@ -7761,6 +7839,7 @@ int orangepi_digitalRead(int pin)
77617839
case PI_MODEL_900:
77627840
case PI_MODEL_CM5:
77637841
case PI_MODEL_CM5_TABLET:
7842+
case PI_MODEL_AI_MAX:
77647843

77657844
if(bank == 0)
77667845
phyaddr = RK3588_GPIO0_BASE + RK3588_GPIO_EXT_PORT_OFFSET;
@@ -7895,6 +7974,7 @@ void OrangePi_set_gpio_pullUpDnControl (int pin, int pud)
78957974
case PI_MODEL_900:
78967975
case PI_MODEL_CM5:
78977976
case PI_MODEL_CM5_TABLET:
7977+
case PI_MODEL_AI_MAX:
78987978

78997979
if(bank == 0 && index < 12)
79007980
phyaddr = RK3588_PMU1_IOC_BASE + RK3588_PMU1_IOC_GPIO0A_P + ((index >> 3) << 2);

wiringPi/wiringPi.h

+1
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,7 @@ extern int wiringPiDebug;
750750
#define PI_MODEL_CM5 29
751751
#define PI_MODEL_CM5_TABLET 39
752752
#define PI_MODEL_5_ULTRA 40
753+
#define PI_MODEL_AI_MAX 41
753754

754755
/* Rockchip RK3566 */
755756
#define PI_MODEL_CM4 50

0 commit comments

Comments
 (0)