Luckfox Pico を使ってみた その1
安価な Linux SBC をゲットしたので、いろいろ試してみました。
Luckfox Pico とは
Luckfox Pico とは中国の Luckfoxが作っている、低価格 Linux SBC です。 Raspberry Pi Pico とほぼ同じ大きさのボード上で Linux が動作します。
CPU とメモリサイズによって4種類があります。(値段は公式ショップの価格
| Model | CPU | DRAM | Flash | Ethernet | Price | 
|---|---|---|---|---|---|
| Pico | RV1103 | 64MiB | none | no | $11.99 | 
| Pico Plus | RV1103 | 64MiB | yes | yes | $14.99 | 
| Pico Pro | RV1106G2 | 128MiB | yes | yes | $12.99 | 
| Pico MAX | RV1106G3 | 256MiB | yes | yes | $14.99 | 
無印 Pico はボードだけです。フラッシュもないので別途用意したマイクロ SD カードに OS を乗せる必要があります。 ほかの製品にはフラッシュメモリと Ethernet ポートがついています。 また、それぞれの製品にはピンヘッダがはんだ付け済みのものとそうでないものがあります。
Pro と MAX は最近発売されたものです。 無印 Pico や Pico Plus は公式の値段だと全然優位性ないのですが、 アリエクだと安く売られているので、値段によってはアリかと思います。

今回は Pico Plus を入手したので、いろいろ試してみたいと思います。 私が買ったときは送料込みで 1400 円ほどでした。
特徴
RockChip の RV1103(または RV1106) を使った超小型マイコンボードです。 メイン CPU は Cortex-A7 の 1.2 GHz なので、無印 Raspberry Pi 並みの能力はあります。 これに加えて RISC-V のサブプロセッサ、AI 用途の NPU、動画処理エンジンなどがついています。 カメラ画像を AI 処理するような用途を想定しているようです。
ペリフェラルなどの数が違うので完全には一致していませんが、ピン配置などを Raspberry Pi pico に似せててあります。(すくなくとも電源は完全に一致)
Luckfox Pico のピン配置

Raspberry Pi Pico のピン配置

設定をがんばれば、Rasberry Pi Pico 用の周辺機器が使えるということのようです。
また、Raspberry Pi Pico にない機能として以下の物があります。
- CSI カメラインターフェース
- Ethernet
無印 Pico にも Ethernet 用の信号は引き出されているので、外部にパルストランス付き RJ-45 コネクタを接続すれば、Ethernet を使うことができます。 なお HDMI はついていませんので、ディスプレイが必要であれば、SPI などで接続&制御する必要があります。
Getting Started
公式 Wiki に開始手順があるのですが、 Plus はフラッシュに Linux のイメージが書き込まれて出荷されているので、 シリアルポートを接続して電源を入れればプロンプトまで立ち上がります。(115200bps に設定)


ユーザ名もパスワードも要求されないので、このままインターネットにつなぐのは超危険ですね。 sshd とかはインストールされていないようなので、とりあえずは大丈夫そうですが。
Ethernet をつなぐと普通に認識されます。

Windows PC からはドライバ不要で RNDIS デバイスとして見えるので、 Ethernet ポートのない無印 Pico でも Windows PC 側の IP アドレスを手動設定することで通信できるようになります。
インストール内容確認
フラッシュの容量は 128MiB あるようです。 RTC がついていませんので、時刻は別途 ntp などで合わせる必要がありそうです。
# uname -a
Linux Rockchip 5.10.110 #1 Thu Aug 24 18:38:22 CST 2023 armv7l GNU/Linux
# date
Thu Jan  1 00:10:36 UTC 1970
# df -h
Filesystem                Size      Used Available Use% Mounted on
ubi0:rootfs              24.2M      6.9M     17.3M  29% /
devtmpfs                 16.8M         0     16.8M   0% /dev
tmpfs                    16.8M         0     16.8M   0% /dev/shm
tmpfs                    16.8M      4.0K     16.8M   0% /tmp
tmpfs                    16.8M    116.0K     16.7M   1% /run
/dev/ubi5_0              38.5M     17.1M     21.4M  44% /oem
/dev/ubi6_0              24.2M     32.0K     24.2M   0% /userdata
また /oem 配下にいろんなデモプログラムがインストールされているようです。 (使い方が不明なんだが…)
# ls -l /oem/usr/bin/
-rwxr-xr-x    1 1002     1002         34548 rk_mpi_ai_test
-rwxrwxr-x    1 1002     1002         18480 simple_vi_rockiva
-rwxrwxr-x    1 1002     1002        110860 sample_demo_multi_camera_eptz
-rwxrwxr-x    1 1002     1002         27520 simple_vi_venc_combo
-rwxrwxr-x    1 1002     1002         40972 sample_mulit_isp_stresstest
-rwxrwxr-x    1 1002     1002         30160 rk_gpio_test
-rwxrwxr-x    1 1002     1002          9668 mpp_info_test
-rwxrwxr-x    1 1002     1002        142660 sample_vi_vpss_osd_venc
-rwxr-xr-x    1 1002     1002         17952 rk_mpi_af_test
-rwxrwxr-x    1 1002     1002        175164 rkisp_demo
-rwxrwxr-x    1 1002     1002         14352 simple_venc_jpeg
-rwxr-xr-x    1 1002     1002         13796 rk_mpi_avio_test
-rwxrwxr-x    1 1002     1002         14272 simple_adec_ao
-rwxrwxr-x    1 1002     1002         28100 sample_multi_vi
-rwxrwxr-x    1 1002     1002         30156 rk_adc_test
-rwxrwxr-x    1 1002     1002         14424 simple_vi_venc_change_resolution
-rwxrwxr-x    1 1002     1002         30156 rk_system_test
-rwxrwxr-x    1 1002     1002         19320 simple_vi_rkaiq
-rwxr-xr-x    1 1002     1002         17920 rk_mpi_sys_test
-rwxrwxr-x    1 1002     1002         14336 simple_vi_venc_wrap
-rwxrwxr-x    1 1002     1002         89160 simple_vi_venc_rtsp
-rwxrwxr-x    1 1002     1002         30156 rk_led_test
-rwxrwxr-x    1 1002     1002         36876 sample_isp_stresstest
-rwxr-xr-x    1 1002     1002         55108 rk_mpi_vpss_test
-rwxr-xr-x    1 1002     1002        600796 rkipc
-rwxr-xr-x    1 1002     1002         13896 rk_mpi_mb_test
-rwxrwxr-x    1 1002     1002        123756 sample_venc_stresstest
-rwxrwxr-x    1 1002     1002         30156 rk_time_test
-rwxrwxr-x    1 1002     1002         22124 rkaiq_3A_server
-rwxrwxr-x    1 1002     1002         34300 luckfox_adc_test
-rwxrwxr-x    1 1002     1002         30164 rk_pwm_test
-rwxrwxr-x    1 1002     1002         34340 luckfox_uart_test
-rwxr-xr-x    1 1002     1002         67628 rk_mpi_rgn_test
-rwxrwxr-x    1 1002     1002         34312 luckfox_i2c_test
-rwxrwxr-x    1 1002     1002        115528 simple_dual_camera
-rwxrwxr-x    1 1002     1002         14296 simple_vi_get_frame
-rwxrwxr-x    1 1002     1002         30176 rk_watchdog_test
-rwxr-xr-x    1 1002     1002         30424 rk_mpi_vi_dup_test
-rwxrwxr-x    1 1002     1002         13696 vpu_api_test
-rwxr-xr-x    1 1002     1002         18020 rk_mpi_adec_test
-rwxrwxr-x    1 1002     1002         38740 test_all
-rwxrwxr-x    1 1002     1002         23428 simple_vi_tde
-rwxrwxr-x    1 1002     1002         10116 simple_vi_ivs
-rwxrwxr-x    1 1002     1002         84176 mpi_enc_test
-rwxrwxr-x    1 1002     1002         34364 luckfox_pwm_test
-rwxr-xr-x    1 1002     1002         13792 rk_mpi_amix_test
-rwxr-xr-x    1 1002     1002          2737 RkLunch.sh
-rwxrwxr-x    1 1002     1002         50428 sample_camera_stresstest
-rwxr-xr-x    1 1002     1002         26288 rk_mpi_ao_test
-rwxrwxr-x    1 1002     1002        141504 sample_rgn_stresstest
-rwxr-xr-x    1 1002     1002         13888 rk_mpi_mmz_test
-rwxrwxr-x    1 1002     1002         34408 luckfox_spi_test
-rwxrwxr-x    1 1002     1002         10148 simple_ao
-rwxrwxr-x    1 1002     1002         14268 simple_ai
-rwxr-xr-x    1 1002     1002         54936 modetest
-rwxrwxr-x    1 1002     1002         14332 simple_vi_venc
-rwxr-xr-x    1 1002     1002         63352 rk_mpi_vi_test
-rwxr-xr-x    1 1002     1002         42740 rk_mpi_dup_venc_test
-rwxrwxr-x    1 1002     1002         17972 rgaImDemo
-rwxr-xr-x    1 1002     1002         55156 rk_mpi_venc_test
-rwxrwxr-x    1 1002     1002         28108 sample_vi
-rwxrwxr-x    1 1002     1002         14804 sample_ai
-rwxr-xr-x    1 1002     1002         21812 rk_rve_sample_test
-rwxrwxr-x    1 1002     1002        176080 sample_demo_vi_venc
-rwxrwxr-x    1 1002     1002         14360 simple_vi_vpss_venc
-rwxr-xr-x    1 1002     1002         22124 rk_mpi_tde_test
-rwxr-xr-x    1 1002     1002         38656 dumpsys
-rwxrwxr-x    1 1002     1002         18448 simple_venc_osd
-rwxr-xr-x    1 1002     1002           671 RkLunch-stop.sh
-rwxr-xr-x    1 1002     1002         18024 rk_mpi_aenc_test
-rwxrwxr-x    1 1002     1002         38740 luckfox_gpio_test
-rwxrwxr-x    1 1002     1002        942872 simple_fast_client
-rwxrwxr-x    1 1002     1002         93336 simple_vi_eptz_test
-rwxrwxr-x    1 1002     1002         20160 sample_ai_aenc
-rwxrwxr-x    1 1002     1002         30168 rk_event_test
-rwxrwxr-x    1 1002     1002         14272 simple_ai_aenc
-rwxrwxr-x    1 1002     1002         38720 t
Lチカをしてみる
とりあえず、GPIO を /sys 経由で操作して見たいと思います。 GPIO と /sys の対応は公式 Wiki にありますので、 ここで使用したい GPIO に対応する番号を確認します。
GPIO1_C7 (4番ピン)を使用する場合は、例のように 55 となりますので、/sys/class/gpio/gpio55 を使うことになります。
シェルスクリプトで書くとこんな感じですかね。
#!/bin/sh
echo 55 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio55/direction 
while true
do
        echo 1 > /sys/class/gpio/gpio55/value
        sleep 1
        echo 0 > /sys/class/gpio/gpio55/value
        sleep 1
done

プログラムで書くときは、使い終わったら GPIO を unexport します。
echo 55 > /sys/class/gpio/unexport
実は User LED はすでにこの方法によって点滅制御されているのですが…
まとめ
とりあえず、電源投入から Lチカまで簡単に試してみましたが、 まだまだ能力的には 1% も使っていないので、SDk をつかっていろいろ試してみたいと思います。 というか、MCU から IO 操作する方法はどこに書いてあるんだろうか…