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 操作する方法はどこに書いてあるんだろうか…