/wiringOP-for-MangoPi-H616

Primary LanguageCGNU Lesser General Public License v3.0LGPL-3.0

说明

本仓库是将 wiringOP 移植到 MangoPi(H616) 上。需要使用 Orange Pi Zero2的对应的系统镜像。

下载

apt-get update
apt-get install -y git
git clone https://github.com/liuls2002/wiringOP-for-MangoPi-H616.git

编译安装

cd wiringOP
./build clean
./build 

Python版本

# 下载 orangepi 提供的代码
git clone --recursive https://github.com/orangepi-xunlong/wiringOP-Python.git
cd wiringOP-Python

# 使用本工程中的代码替换 wiringOP-Python 目录下的 wiringOP
cp -r ./wiringOP ./wiringOP-Python

# 安装tools
sudo apt-get install swig python3-dev python3-setuptools

# Build & install with
python3 generate-bindings.py > bindings.i
sudo python3 setup.py install

Mango Pi的官方网站

Mango Pi official website | Tiny and Elegant SBC | mqquad


相较于 Orange Pi 提供的代码的改动

Mango Pi(h616) 与 Orange Pi Zero2 使用相同的soc(全志H616),所以基于 Orange Pi Zero2 进行移植修改比较方便。

Mango Pi(h616) 引脚对应关系如下:

pins

总共有3种编号:board引脚编号,芯片引脚编号,逻辑引脚编号。控制gpio时一般采用逻辑引脚编号。

==我们需要修改这3者的映射关系。为了简便,我将逻辑引脚编号与board的引脚编号保持一致,使用时需要注意。==

1 修改 gpio/OrangPi.c

#ifdef CONFIG_ORANGEPI_ZERO2包含的代码替换为如下代码:

#ifdef CONFIG_ORANGEPI_ZERO2
int pinToGpioOrangePi [64] =
{
    -1,  // 0
    -1 , -1 ,
    264 , -1 ,
    263 , -1 ,
    256 , 224 ,
    -1 , 225 ,
    226 , 257 ,
    227 , -1 ,
    269 , 270 ,
    -1 , 228 ,
    231 , -1 ,
    232 , 262 ,
    230 , 229 ,
    -1 , 233 ,
    266 , 265 ,
    267 , -1 ,
    268 , 261 ,
    271 , -1 ,
    258 , 234 ,
    272 , 260 ,
    -1 , 259 , // 40
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
    -1, -1, -1, -1,-1, // 63
};

int physToWpi[64] =
{
	-1,		// 0
	-1, -1,	// 1, 2
	3, -1,  //3, 4
	5, -1,  //5, 6
	7, 8,  //7, 8
	-1, 10, //9,10
	11, 12, //11,12
	13, -1, //13,14
	15, 16, //15,16
	-1, 18, //17,18
	19, -1, //19,20
	21, 22, //21,22
	23, 24, //23, 24
	-1, 26,	// 25, 26
	27, 28,   //27, 28
	29, -1,	//29, 30
	31, 32,	//31, 32
	33, -1, //33, 34
	35, 36, //35, 36
	37, 38, //37, 38
	-1, 40, //39, 40
	// Padding:
	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 56
	-1, -1, -1, -1, -1, -1, -1,	// ... 63
};

char *physNames[64] =
{
  NULL,
  "     3.3V", "5V      ",
  " TWI1_SDA", "5V      ",
  " TWI1_SCL", "GND     ",
  "I2S0_MCLK", "TX0",
  "      GND", "RX0",
  "      TX5", "I2S_CLK",
  "      RX5", "GND     ",
  " TX4/PWM3", "RX4/PWM4",
  "     3.3V", "PH4",
  "SPI1_MOSI", "GND     ",
  "SPI1_MISO", "RX2",
  " SPI1_CLK", "SPI1_CS0 ",
  "      GND", "SPI1_CS1",
  " TWI2_SDA", "TWI2_SCL",
  "     PI11", "GND     ",
  "     PI12", "LEDC/TX2",
  "     PI15", "GND     ",
  "I2S0_LRCK", "PH10",
  "     PI16", "I2S0_DOUT",
  "      GND", "I2S0_DIN",
       NULL, NULL,
       NULL, NULL,
       NULL, NULL,
       NULL, NULL,
       NULL, NULL,
  	   NULL, NULL,
       NULL, NULL,
       NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
};
#endif

替换 void OrangePiReadAll(void)函数中的部分代码

// 替换前
#elif CONFIG_ORANGEPI_ZERO2
	for (pin = 1 ; pin <= 34; pin += 2)   // orangepi zero2 引出34pin
// 替换后
#elif CONFIG_ORANGEPI_ZERO2
	for (pin = 1 ; pin <= 40; pin += 2)   // mangopi 引出40pin

2 修改 wiringPi/OrangePi.c

#ifdef CONFIG_ORANGEPI_ZERO2包含的代码替换为如下代码:

#ifdef CONFIG_ORANGEPI_ZERO2
int pinToGpioOrangePi [64] =
{
    -1,  // 0
    -1 , -1 ,
    264 , -1 ,
    263 , -1 ,
    256 , 224 ,
    -1 , 225 ,
    226 , 257 ,
    227 , -1 ,
    269 , 270 ,
    -1 , 228 ,
    231 , -1 ,
    232 , 262 ,
    230 , 229 ,
    -1 , 233 ,
    266 , 265 ,
    267 , -1 ,
    268 , 261 ,
    271 , -1 ,
    258 , 234 ,
    272 , 260 ,
    -1 , 259 , // 40
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1,  -1, -1, -1, // 63
};

int physToGpioOrangePi [64] =
{
    -1,  // 0
    -1 , -1 ,
    264 , -1 ,
    263 , -1 ,
    256 , 224 ,
    -1 , 225 ,
    226 , 257 ,
    227 , -1 ,
    269 , 270 ,
    -1 , 228 ,
    231 , -1 ,
    232 , 262 ,
    230 , 229 ,
    -1 , 233 ,
    266 , 265 ,
    267 , -1 ,
    268 , 261 ,
    271 , -1 ,
    258 , 234 ,
    272 , 260 ,
    -1 , 259 , // 40
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1,  -1, -1, -1, // 63
} ;

int physToPinOrangePi [64] = 
{
	-1,		// 0
	-1, -1,	// 1, 2
	3, -1,  //3, 4
	5, -1,  //5, 6
	7, 8,  //7, 8
	-1, 10, //9,10
	11, 12, //11,12
	13, -1, //13,14
	15, 16, //15,16
	-1, 18, //17,18
	19, -1, //19,20
	21, 22, //21,22
	23, 24, //23, 24
	-1, 26,	// 25, 26
	27, 28,   //27, 28
	29, -1,	//29, 30
	31, 32,	//31, 32
	33, -1, //33, 34
	35, 36, //35, 36
	37, 38, //37, 38
	-1, 40, //39, 40
	// Padding:
	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	// ... 56
	-1, -1, -1, -1, -1, -1, -1,	// ... 63
};

int ORANGEPI_PIN_MASK[12][32] =  //[BANK]  [INDEX]
{
{-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,},//PA
	{-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,},//PB
	{-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,},//PC
	{-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,},//PD
	{-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,},//PE
	{-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,},//PF
	{-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,},//PG
	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PH
	{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PI
	{-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,},//PJ
	{-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,},//PK
	{-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,},//PE
};
#endif

结果展示

执行gpio readall

readall