Kendryte K210搭載ボードの選び方


Kendyte K210は、低価格ながら、RISC-V CPUを搭載していてそこそこRAMもあることと、ニューラルネットワーク演算のできるKPUを搭載していることで、人気のチップになってきています。

Kendyte K210や、それと他チップをまとめたMaix M1を搭載したボードが増えてきたので、自分のやりたいことをやるにはどのボードを選んだらよいか分かるようにボードを比べてみました。

# おおまかな分類

Kendryte K210を直接ボードに搭載している……
- Sipeed Maix Bit
- M5StickV

Maix M1をボードに搭載している……
- Sipeed Maix M1 Dock
- Sipeed Maixduino

以下のボードは無線LAN機能を実現しているチップ（ESP8285）に技適マークが見当たらないため、ここでは比較の対象外とします（技適を通っているかといえば006-000737がそれに該当しそうなのですが、少なくともチップにマークが見当たりません）。

- Sipeed Maix M1W Dock
- Sipeed Maix Go

これらのボードの基本機能はいずれもKendryte K210の回路を使用しているため、CPUやKPUの性能に違いはありません。

# 形状の違い

Maix Bitは、外部ピンが2列になっていますので、ブレッドボード上で使用するのに便利です。

Maixduinoは、外部ピンがArduinoシールド向けの形状になっています（使用したいシールドと電圧がマッチしているかは確認してください）。

M5StickVはとても小さく、またバッテリを内蔵しているため電源供給しなくても動作できます。

ピン割り当ては一部が固定になっていますが、FPIOAピンは内部でJTAG/SPI/UART/GPIO/I2S/I2C/CMOS（カメラ出力）などに割り当てられます。LCD出力はSPIを使います。

# 使用できるI/Oの違い

||Maix Bit|Maix M1 Dock|Maixduino|M5StickV|
|---|---|---|---|---|
|カメラ入力|1|1|1|1|
|LCD出力|1|1|1|1|
|マイク入力|新バージョンのみ1|1|1|使用不可|
|スピーカ出力|なし|2ch|1ch|1ch|
|加速度センサ入力|なし|なし|なし|1|
|LED出力|フルカラー×1|フルカラー×1|なし|フルカラー×1|
|ボタン入力|RST/BOOT|RST/BOOT|RST/BOOT|A/B|
|TFカード|1|1|1(K210とESP32で共用)|1|
|無線LAN/Bluetooth|なし|なし|あり(ESP32)|なし|

# ボード上に出ているI/Oピン

購入したボードに何か接続したい、空いているI/Oピンの数が気になります。K210のデータシートの2.2項「Pin Description」から、K210のピンのうちデータ入出力用のピンを抽出し、ボードの回路図などを参照して各ピンがどこにつながっているかをまとめると、下表のようになります。ただしボードによっては回路図の情報が足りないため、一部想像で補っています。

■□はボード外部と接続しやすいピンであることを示し、□はボード内I/Oとの共用ピン、■は共用していないピンであることを示します。

FPIOAは割り当てを変更可能なI/Oピンです、そのうちIO_0～IO_3はリセット直後JTAG、IO_4～IO_5はリセット直後ISPです。IO_16はブートモード選択に使われます。

|ピン名|方向|用途|Maix Bit|Maix M1 Dock|Maixduino|M5StickV|
|---|---|---|---|---|---|---|
|DVP_D0|I|DVP専用|CSI_24P Y2|□DVP_D0 / CSI_24P Y2|CAMERA_24P D0|OV7740 D0|
|DVP_D1|I|DVP専用|CSI_24P Y3|□DVP_D1 / CSI_24P Y3|CAMERA_24P D1|OV7740 D1|
|DVP_D2|I|DVP専用|CSI_24P Y4|□DVP_D2 / CSI_24P Y4|CAMERA_24P D2|OV7740 D2|
|DVP_D3|I|DVP専用|CSI_24P Y5|□DVP_D3 / CSI_24P Y5|CAMERA_24P D3|OV7740 D3|
|DVP_D4|I|DVP専用|CSI_24P Y6|□DVP_D4 / CSI_24P Y6|CAMERA_24P D4|OV7740 D4|
|DVP_D5|I|DVP専用|CSI_24P Y7|□DVP_D5 / CSI_24P Y7|CAMERA_24P D5|OV7740 D5|
|DVP_D6|I|DVP専用|CSI_24P Y8|□DVP_D6 / CSI_24P Y8|CAMERA_24P D6|OV7740 D6|
|DVP_D7|I|DVP専用|CSI_24P Y9|□DVP_D7 / CSI_24P Y9|CAMERA_24P D7|OV7740 D7|
|F_CLK|O|SPI GPIO専用|（Flash）|W25N1 CLK|W25N1 CLK||
|F_CS|O|SPI GPIO専用|（Flash）|W25N1 ~CS|W25N1 ~CS||
|F_D0|I/O|SPI GPIO専用|（Flash）|W25N1 SI/IO0|W25N1 SI/IO0||
|F_D1|I/O|SPI GPIO専用|（Flash）|W25N1 SO/IO1|W25N1 SO/IO1||
|F_D2|I/O|SPI GPIO専用|（Flash）|W25N1 ~WP/IO2|W25N1 ~WP/IO2||
|F_D3|I/O|SPI GPIO専用|（Flash）|W25N1 ~HOLD/IO3|W25N1 ~HOLD/IO3|| 
|IO_0|I/O|FPIOA|■0 (JTAG_TCK)|■0 (JTAG_TCK)|(JTAG_TCK)||
|IO_1|I/O|FPIOA|■1 (JTAG_TDI)|■1 (JTAG_TDI)|(JTAG_TDI)||
|IO_2|I/O|FPIOA|■2 (JTAG_TMS)|■2 (JTAG_TMS)|□P5-6 / NS4150 CTRL (JTAG_TDO)||
|IO_3|I/O|FPIOA|■3 (JTAG_TDO)|■3 (JTAG_TDO)|(JTAG_TDO)||
|IO_4|I/O|FPIOA|□4 / CH340C TX (ISP_RX)|□4 / CH340C TX (ISP_RX)|□P2-1 / CH552 TX0 (ISP_RX)|USB RX|
|IO_5|I/O|FPIOA|□5 / CH340C RX (ISP_TX)|□5 / CH340C RX (ISP_TX)|□P2-2 / CH552 RX0 (ISP_TX)|USB TX|
|IO_6|I/O|FPIOA|■6|■6 (WIFI_TX MCU_RX)|ESP32 U0TXD (ESP32_TX)|LED R|
|IO_7|I/O|FPIOA|■7|■7 (WIFI_RX MCU_TX)|ESP32 U0RXD (ESP32_RX)|LED W|
|IO_8|I/O|FPIOA|■8|■8　(WIFI_EN)|ESP32 CHP-PU (ESP32_EN) 3.3Vプルアップ|LED B|
|IO_9|I/O|FPIOA|■9|■9|ESP32 GPIO25 (ESP32_READY)|LED G|
|IO_10|I/O|FPIOA|■10|■10|■P5-5||
|IO_11|I/O|FPIOA|×|■11|■P5-4||
|IO_12|I/O|FPIOA|LED_G|□12 / LED_G|■P5-3 / LED_G||
|IO_13|I/O|FPIOA|LED_R|□13 / LED_R|■P5-2 / LED_R||
|IO_14|I/O|FPIOA|LED_B|□14 / LED_B|■P5-1 / LED_B|MAX98357 LRCLK|
|IO_15|I/O|FPIOA|■15|■15|■P2-8|MAX98357 BCLK|
|IO_16|I/O|FPIOA|□16 / スイッチBOOT(押すとGNDプルダウン)|□16 / スイッチBOOT(押すとGNDプルダウン)|スイッチBOOT(押すとGNDプルダウン)|BOOT|
|IO_17|I/O|FPIOA|■17|■17|LCD_BL|MAX98357 DIN|
|IO_18|I/O|FPIOA|□18 / MSM261S SCK (MIC_BCK) 新バージョンのみ|■18 (MIC_BCK)|MSM261S SCK (MIC_BCK)|ST7789 SDA|
|IO_19|I/O|FPIOA|□19 / MSM261S WS (MIC_WS) 新バージョンのみ|■19 (MIC_WS)|MSM261S WS (MIC_WS)|ST7789 SCL|
|IO_20|I/O|FPIOA|□20 / MSM261S SD (MIC_DAT3) 新バージョンのみ|■20 (MIC_DAT3)|MSM261S SD (MIC_DAT3)|ST7789 RS|
|IO_21|I/O|FPIOA|■21|■21 (MIC_DAT2)|■P2-3|ST7789 RST|
|IO_22|I/O|FPIOA|■22|■22 (MIC_DAT1)|■P2-4|ST7789 CS|
|IO_23|I/O|FPIOA|■23|■23 (MIC_DAT0)|■P2-5|6軸センサ INT|
|IO_24|I/O|FPIOA|■24|■24 (MIC_LED_DAT)|■P2-6||
|IO_25|I/O|FPIOA|■25|■25 (SPI0_CS1)|ESP32 GPIO5 (ESP32_CS)|MAX98357 SD|
|IO_26|I/O|FPIOA|□26 / TF DAT0/MISO (SPI0_MISO) 3.3Vプルアップ|□26 / TF DAT0/MISO (SPI0_MISO) 3.3Vプルアップ|TF DAT0/MISO / ESP32 GPIO23 (SPI0_MISO) 3.3Vプルアップ||
|IO_27|I/O|FPIOA|□27 / TF CLK (SPI0_SCLK)|□27 / TF CLK (SPI0_SCLK)|TF CLK  / ESP32 GPIO18 (SPI0_SCLK)||
|IO_28|I/O|FPIOA|□28 / TF CMD/MOSI (SPI0_MOSI) 3.3Vプルアップ|□28 / TF CMD/MOSI (SPI0_MOSI) 3.3Vプルアップ|TF CMD/MOSI / ESP32 GPIO14 (SPI0_MOSI) 3.3Vプルアップ|6軸センサ SCL|
|IO_29|I/O|FPIOA|□29 / TF DAT3/CS (SPI0_CS0)|□29 / TF DAT3/CS (SPI0_CS0)|TF DAT3/CS (SPI0_CS0)|6軸センサ SDA|
|IO_30|I/O|FPIOA|■30|□30 / MSM261S WS (MIC0_WS)|■P5-10 (I2C1_SCL) 3.3Vプルアップ|TF SCK|
|IO_31|I/O|FPIOA|■31|□31 / MSM261S SD (MIC0_DAT3)|■P5-9 (I2C1_SDA) 3.3Vプルアップ|TF MI|
|IO_32|I/O|FPIOA|■32|□32 / MSM261S SCK (MIC0_BCK)|■P2-7|TF CS|
|IO_33|I/O|FPIOA|■33|□33 / PT8211 WS (I2S_WS)|PT8211 WS (I2S_WS)|TF MO|
|IO_34|I/O|FPIOA|■34|□34 / PT8211 DA (I2S_DIN)|PT8211 DA (I2S_DIN)|■34|
|IO_35|I/O|FPIOA|■35|□35 / PT8211 BCK (I2S_BCK)|PT8211 BCK (I2S_BCK)|■35|
|IO_36|I/O|FPIOA|LCD_24pin CS (LCD_CS)|□36 / LCD_24pin CS (LCD_CS)|LCD_24pin CS (LCD_CS)|Button A|
|IO_37|I/O|FPIOA|LCD_24pin RST (LCD_RST)|□37 / LCD_24pin RST (LCD_RST)|LCD_24pin RST (LCD_RST)|Button B|
|IO_38|I/O|FPIOA|LCD_24pin RS (LCD_DC)|□38 / LCD_24pin RS (LCD_DC)|LCD_24pin RS (LCD_DC)||
|IO_39|I/O|FPIOA|LCD_24pin ~WR (LCD_WR)|□39 / LCD_24pin ~WR (LCD_WR)|LCD_24pin ~WR (LCD_WR)||
|IO_40|I/O|FPIOA|SCI_24P SIO_D (DVP_SDA) 1.8Vプルアップ|□40 / SCI_24P SIO_D (DVP_SDA) 1.8Vプルアップ|SCI_24P SIO_SDA (DVP_SDA)|OV7740 SIOD|
|IO_41|I/O|FPIOA|SCI_24P SIO_C (DVP_SCL) 1.8Vプルアップ|□41 / SCI_24P SIO_C (DVP_SCL) 1.8Vプルアップ|SCI_24P SIO_SCL (DVP_SCL) 1.8Vプルアップ|OV7740 SIOC|
|IO_42|I/O|FPIOA|SCI_24P RESET (DVP_RST)|□42 / SCI_24P RESET (DVP_RST)|SCI_24P RESET (DVP_RST)|OV7740 RSTn|
|IO_43|I/O|FPIOA|SCI_24P VSYNC (DVP_VSYNC)|□43 / SCI_24P VSYNC (DVP_VSYNC)|SCI_24P VSYNC (DVP_VSYNC)|OV7740 VSYN|
|IO_44|I/O|FPIOA|SCI_24P PWDN (DVP_PWDN)|□44 / SCI_24P PWDN (DVP_PWDN)|SCI_24P PWDN (DVP_PWDN)|OV7740 PWDN|
|IO_45|I/O|FPIOA|SCI_24P HREF (DVP_HSYNC)|□45 / SCI_24P HREF (DVP_HSYNC)|SCI_24P HSYNC (DVP_HSYNC)|OV7740 HREF|
|IO_46|I/O|FPIOA|SCI_24P XCLK (DVP_XCLK)|□46 / SCI_24P XCLK (DVP_XCLK)|SCI_24P MCLK (DVP_XCLK)|OV7740 XCLK|
|IO_47|I/O|FPIOA|SCI_24P PCLK (DVP_PCLK)|□47 / SCI_24P PCLK (DVP_PCLK)|SCI_24P PCLK (DVP_PCLK)|OV7740 PCLK|
|SPI0_D0|O|SPI0専用|LCD_24pin DB0|□LCD_D0 / LCD_24pin DB0|LCD_24pin DB0|||
|SPI0_D1|O|SPI0専用|LCD_24pin DB1|□LCD_D1 / LCD_24pin DB1|LCD_24pin DB1|||
|SPI0_D2|O|SPI0専用|LCD_24pin DB2|□LCD_D2 / LCD_24pin DB2|LCD_24pin DB2|||
|SPI0_D3|O|SPI0専用|LCD_24pin DB3|□LCD_D3 / LCD_24pin DB3|LCD_24pin DB3|||
|SPI0_D4|O|SPI0専用|LCD_24pin DB4|□LCD_D4 / LCD_24pin DB4|LCD_24pin DB4|||
|SPI0_D5|O|SPI0専用|LCD_24pin DB5|□LCD_D5 / LCD_24pin DB5|LCD_24pin DB5|||
|SPI0_D6|O|SPI0専用|LCD_24pin DB6|□LCD_D6 / LCD_24pin DB6|LCD_24pin DB6|||
|SPI0_D7|O|SPI0専用|LCD_24pin DB7|□LCD_D7 / LCD_24pin DB7|LCD_24pin DB7|||
||||■=22ピン|■=20ピン|■=13ピン|■=2ピン|

- CH340CはUSBシリアル
- LCD_BLはLCDバックライト
- MAX98357はスピーカ出力
- MSM261Sはマイク
- NS4150はオーディオアンプ
- OV7740はカメラ
- PT8211はスピーカ出力
- SCIはカメラ接続用端子
- ST7789はLCD
- W25N1はNAND Flash

Maix M1搭載ボードのIO_6～IO_8は、M1WであればK210とESP8285の通信に使われるピンですが、ESP8285をもたないM1では自由に使えそうです。

全ピンが出ているMaix M1 Dockの方が自由に使えるピンが多いかと思いましたが、Maix Bitの方が空きピンが多いという意外な結果でした。スピーカの有無が影響した感じです。

# まとめ

- カメラ画像から機械学習で画像認識して結果をLCDに表示したいだけならどれでもOKです。
- 多くのピンを要する回路を繋ぎたい場合や、JTAGデバッガを繋ぎたい場合はBitかDockがよいでしょう。ただし、Maixduinoでもそこそこのピン数は確保されています。
- Wi-FiやBluetoothを使いたいならMaxduinoがよいでしょう。
- 音声を使いたいならDockかMaxduinoがよいでしょう。スピーカがなくてもよいならBitの新バージョンも候補に入ります。

# 参考資料

- Kendryte K210 datasheet https://kendryte.com/downloads/
- Sipeed Maix HDK http://dl.sipeed.com/MAIX/HDK
- M5StickV Docs https://docs.m5stack.com/#/en/core/m5stickv