OrangePi One Plusを使ってみる

ArmbianがようやくH6を正式サポートしたので、OrangePi One Plusを入手しました。
ねじ穴や外部I/Fの位置はH3のOrangePi Oneと全く同じです。
1番ピンの位置は矢印の場所です。


SOCとGPIOコネクター以外にOneとの違いが幾つかあります。

1.MicroUSBポート
OneのMicroUSBポートはUSB-OTG専用でしたが、One PlusのMicroUSBポートは電源供給が可能なUSB-OTGになっています。
One PlusはEIAJ2プラグ、MicroUSBのどちらで給電しても起動します。
1AのACアダプターでは起動できません。最低でも2A、できれば3AのACアダプターが必要です。

2.IR受信機
Oneには有りませんが、One PlusにはMicroUSBポートの後ろに付きました。
LFN製のVS838です。

3.Microphone
OneのPowerSwitchの箇所に、One PlusではMicrophoneが付いています。
CUI環境でのオンボードマイクの使い方(使い道)が分かりません。

4.Memory
Oneでは256MBのDDRが表と裏に実装されていますが、One Plusでは1GBのDDR3が表だけに実装されています。

5.PMIC
OneにはPMIC(電源管理IC)は有りませんが、One PlusではAXP805が実装されています。

6.Ethernet
Oneは100Mですが、One Plusは1000Mに高速化されています。



armbianmonitorでCPU温度を確認してみましたが、CPU温度は結構高温になります。


これが同じタイミング、同じ場所で測定したOrangePi PCのCPU温度です。




One Plus(H6)のピンアウトはこちらに 公開され ています。
GPIOは26ピン仕様でピンアサインは以下の様になっています。
GPIO番号
ピン位置
GPIO番号

3.3V 1 2 5V
GPIO230 TWI1-SDA 3 4 5V
GPIO229 TWI1-SCK 5 6 GND
GPIO228 PWM1
7 8 PD21
GPIO117

GND 9 10 PD22
GPIO118
GPIO120 UART3_RX 11 12 PC09
GPIO73
GPIO119 UART3_TX 13 14 GND
GPIO122 UART3_CTS 15 16 PC08
GPIO72

3.3V 17 18 PC07
GPIO71
GPIO66 SPI0_MOSI
19 20 GND
GPIO67 SPI0_MISO
21 22 UART3_RTS GPIO121
GPIO64 SPI0_CLK
23 24 SPI0_CS0
GPIO69

GND 25 26 PH03
GPIO227

OrangePi Oneでは、Pin#38/40にUART1のTX/RXが出ていましたが、One Plusにはこれらが有りません。



こちらに xunlongが提供するWiringOPライブラリが公開されています。
ほとんどのOrangeシリーズをサポートしていますが、nextブランチにはバグが有り、masterブランチを使う必要が有ります。
H6で使えるWiringPi互換C言語ライブラリはこれ以外になさそうです。
$ git clone -b master https://github.com/orangepi-xunlong/wiringOP
$ cd wiringOP/
$ ./build
$ gpio readall
 +------+-----+----------+------+---+  OPi H6  +---+------+----------+-----+------+
 | GPIO | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | GPIO |
 +------+-----+----------+------+---+----++----+---+------+----------+-----+------+
 |      |     |     3.3V |      |   |  1 || 2  |   |      | 5V       |     |      |
 |  230 |   0 |    SDA.1 |  OFF | 0 |  3 || 4  |   |      | 5V       |     |      |
 |  229 |   1 |    SCL.1 |  OFF | 0 |  5 || 6  |   |      | GND      |     |      |
 |  228 |   2 |      PH4 |  OFF | 0 |  7 || 8  | 0 | OFF  | PD21     | 3   | 117  |
 |      |     |      GND |      |   |  9 || 10 | 0 | OFF  | PD22     | 4   | 118  |
 |  120 |   5 |    RXD.3 |  OFF | 0 | 11 || 12 | 0 | OFF  | PC9      | 6   | 73   |
 |  119 |   7 |    TXD.3 |  OFF | 0 | 13 || 14 |   |      | GND      |     |      |
 |  122 |   8 |    CTS.3 |  OFF | 0 | 15 || 16 | 0 | OFF  | PC8      | 9   | 72   |
 |      |     |     3.3V |      |   | 17 || 18 | 0 | OFF  | PC7      | 10  | 71   |
 |   66 |  11 |   MOSI.0 |  OFF | 0 | 19 || 20 |   |      | GND      |     |      |
 |   67 |  12 |   MISO.0 |  OFF | 0 | 21 || 22 | 0 | OFF  | RTS.3    | 13  | 121  |
 |   64 |  14 |   SCLK.0 |  OFF | 0 | 23 || 24 | 0 | OFF  | CE.0     | 15  | 69   |
 |      |     |      GND |      |   | 25 || 26 | 0 | OFF  | PH3      | 16  | 227  |
 +------+-----+----------+------+---+----++----+---+------+----------+-----+------+
 | GPIO | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | GPIO |
 +------+-----+----------+------+---+  OPi H6  +---+------+----------+-----+------+

WiringPiでは以下のいずれかの方法でGPIOを初期化します。
@ int wiringPiSetup (void) ;
A int wiringPiSetupGpio (void) ;
B int wiringPiSetupPhys (void) ;
C int wiringPiSetupSys (void) ;

違いはこ ちらに詳しく紹介されていま すが、SetupSysは事前にGPIOをエクスポートしておく必要があるので、ほとんど使われていません。

xunlongが提供するWiringOPライブラリでは、Aをサポートしていません。
関数は定義されていますが、wiringPiSetup() を呼び出していて、さらにモードの設定が不適切なので正しく動きません。
@で初期化した場合、ピン番号はRaspberryPiと互換性が有りません。
@で初期した時のピン番号は、こ ちらのwPi番号になります。
従って、RaspberryPiのWiringPiを使って作られたアプリを、このボードで動かすためには、ピン番号の変更が必要になります。



H3で使える開発ライブラリは、ほとんどH6に移植されていません。
C言語では、先ほど紹介したxunlongが提供するWiringOPライブラリ、
pythonではsmbus、spidev、SPI-Py、OPi.GPIO、python-periphery、 Adafruit_Blinkaが使えます。
こちらで各ライブラリの互換性を紹介 しています。



Stretch以降のArmbianは完成度が上がり、ほとんど書くことが有りません。
Linuxサーバーとして普通に使えます。
気になったのは、オンボードのパワーLEDの点灯タイミングが、電源投入直後ではなく、カーネル起動時なので、少し遅れて点灯します。