2024-07-07

試用 LuckFox Pico Mini B

在下學習使用 微控制器 及 開發板 已經一段時間
但在下認為使用 微控制器 或 開發板 都不能即使互動設定訊號非常不方便
每次修改操作內容,除了修改程式碼,還要編譯及寫入韌體到微控制器,需要一些時間
因此在下尋找一些可以直接控制訊號的開發板

外觀

LuckFox Pico Mini 的正面

使用 USB Type-C 插口

正面有一粒起動按鈕,當接通電源時按著按鈕會以起動模式開機

ACT LED 為表示裝置狀態用途,不是表示電源接通

USER LED 為讓使用者作測試用途,與 第34數碼引腳 連接,高電壓亮著

LuckFox Pico Mini 分別有 A型號 及 B型號 , A型號 沒有焊接 儲存晶片
而 B型號 則焊接 Winbond 25N01KVZEIR晶片 ,額外增加 1Gb(128MB) 儲存空間
(A型號 可以自行焊接更高儲存空間的晶片,但必須兼容 25N01KVZEIR晶片引腳 的佈局
在下的沒有焊接 表面黏著零件 的工具,亦沒有足夠的技術焊接,因此在下使用 LuckFox Pico Mini B型號 測試)

正面的末端有 一排20針的 MIPI CSI-2 接口 並 標示著 CAM,可以用來連接到數碼鏡頭

LuckFox Pico Mini 的背面

使用 Rockchip 的 RV1103G1晶片 作為 LuckFox Pico Mini 的 微控制器
RV1103G1 內置 512Mb(64MB) 記憶體

LuckFox Pico Mini 提供 Micro SD 卡插糟,可以額外增加大量儲存空間

LuckFox Pico Mini RJ45(引腳顏色) RJ45(引腳編號)
TXP 白橙 1
TXN 2
G(接地)
RXP 白綠 3
RXN 6

背面的末端標示著 5個半圓焊孔 的描述,用作焊接 RJ45網絡插口

LuckFox Pico Mini 最高支援 100Mb 網絡傳輸速度

引腳

USB正面
左側 右側
引腳 編號 編號 引腳
VCC 1 22 1V8
GND 2 21 GND
3V3 3 20 ADC1
UART2_TX 4 19 ADC0
UART2_RX 5 18 GPIO4
SPI0_SS 6 17 GPIO55
SPI0_SCK 7 16 GPIO54
SPI0_MOSI 8 15 I2C3_SCL
SPI0_MISO 9 14 I2C3_SDA
UART4_RX 10 13 UART3_RX
UART4_TX 11 12 UART3_TX
編號 引腳 方向 功能
1 VBUS 電源供應
2 GND 接地
3 3V3 3.3V 輸出
4 UART2_TX 輸出 第42數碼引腳,第2 UART TX引腳,3.3V 輸出;可作系統偵測
5 UART2_RX 輸入輸出 第43數碼引腳,第2 UART RX引腳,3.3V 輸出;可作系統偵測
6 SPI0_SS 輸出 第48數碼引腳,第0 SPI SS引腳,3.3V 輸出
7 SPI0_SCK 輸出 第49數碼引腳,第0 SPI SCK引腳,3.3V 輸出
8 SPI0_MOSI 輸出 第50數碼引腳,第0 SPI MOSI引腳,3.3V 輸出
9 SPI0_MISO 輸入 第51數碼引腳,第0 SPI MISO引腳,3.3V 輸出
10 UART4_RX 輸入 第52數碼引腳,第4 UART RX引腳,3.3V 輸出
11 UART4_TX 輸出 第53數碼引腳,第4 UART TX引腳,3.3V 輸出
12 UART3_TX 輸出 第56數碼引腳,第3 UART TX引腳,3.3V 輸出
13 UART3_RX 輸入 第57數碼引腳,第3 UART RX引腳,3.3V 輸出
14 I2C3_SDA 輸出 第58數碼引腳,第3 I2C SDA引腳,3.3V 輸出
15 I2C3_SCL 輸出 第59數碼引腳,第3 I2C SCL引腳,3.3V 輸出
16 GPIO54 輸入輸出 第54數碼引腳,3.3V 輸出
17 GPIO55 輸入輸出 第55數碼引腳,3.3V 輸出
18 GPIO4 輸入輸出 第4數碼引腳,3.3V 輸出
19 GPIO144 輸入輸出 第0類比引腳,參考電壓為 1.8V ;第144數碼引腳,1.8V 輸出
20 GPIO145 輸入輸出 第1類比引腳,參考電壓為 1.8V ;第145數碼引腳,1.8V 輸出
21 GND 接地
22 1V8 1.8V 輸出

寫入系統

如果 LuckFox Pico Mini 未寫入系統 或 按著 LuckFox Pico Mini 的 BOOT按鈕
將 LuckFox Pico Mini 經 USB 連接到電腦後,會載入到 起動模式,在 Terminal 輸入

lsusb

會顯示

ID 2207:110c Fuzhou Rockchip Electronics Company

要將系統寫入到 LuckFox Pico Mini ,需要使用由 LuckFox官方 提供的 系統映像檔案(update.img)寫入工具(upgrade_tool)

下載後,將 寫入工具 增加執行權限,輸入

chmod +x "upgrade_tool"

然後輸入

"./upgrade_tool" UF "update.img"

將資料下載及寫入到 LuckFox Pico Mini

寫入資料亦需要一點時間
(寫入過程中會標示 下載 ,但實際與網絡下載無關)

資料寫入後,輸入

lsusb

會顯示

ID 2207:0019 Fuzhou Rockchip Electronics Company rk3xxx

表示系統運作正常

網絡連接

由於 LuckFox Pico Mini 提供 USB網絡連接
但沒有提供 動態主機設定協定(Dynamic Host Configuration Protocol (DHCP))服務
所以 宿主系統 必須手動設計網絡接連才能連接到 LuckFox Pico Mini 的網絡

由於 USB網絡連接 屬於有線網絡,因此宿主系統需要建立 有線網絡

設定 有線網絡裝置
(每次啟動系統,都會改變 網絡名稱 及 硬件地址)

由於 LuckFox Pico Mini 的 預設IP 為 172.32.0.93
因此必須將 宿主系統 的 IP 設定為與 LuckFox Pico Mini 相同的網絡
例如 172.32.0.1 (不能佔用 網絡地址(Network Address)廣播地址(Broadcast Address)
由於 172 屬於 B類別(Class B) ,因此使用 16元位 網絡遮罩(Network Mask) (或 255.255.0.0)
閘道(Gateway) 及 域名系統(Domain Name Server) 使用 LuckFox Pico Mini 的 IP 即可

使用 設定妥當的 有線網絡 連接到 LuckFox Pico Mini

登入系統

SSH 登入

便可以透過 SSH 登入到 LuckFox Pico Mini
LuckFox Pico Mini 允許使用 root帳戶 經 SSH 登入,預設密碼為 luckfox

亦可以使用 Putty 等工具,方便管理 SSH 登入

ADB 登入

除了使用 SSH 登入,還可以使用 ADB 登入

使用 USB 連接後,輸入

adb shell

便可以連接到 LuckFox Pico Mini

但由於 ADB 還可以連接到 Android 裝置
如果超過一個能夠經 ADB 連接的裝置,使用 adb shell 會出錯
需要先輸入

adb devices

顯示已連接的 LuckFox Pico Mini (ADB 還可以顯示已連接的 Android 裝置)

確定連接的裝置後,輸入

adb -s "LuckFox Pico ADB ID" shell

系統設定

修改密碼
passwd

可以將密碼修改為方便使用

設定提示資訊

由於登入 LuckFox Pico Mini 後只有 # 一個符號, 沒有提示資訊
因此修改使用者設定來顯示提示資訊

輸入

nano "${HOME}/.profile"

輸入

PS1='\u@\h:\w$ '

儲存檔案並離開

重新登入後,會顯示提示資訊

查看可用指令

雖然 LuckFox Pico Mini 使用 Linux核心,但支援的指令並不算多,輸入

help
cat /bin
cat /usr/bin

列出所有支援的指令
但即使具備常用的指令,支援的指令都比 一般Linux發行版 的指令的功能少

查看核心資料

輸入

uname -a

顯示 LuckFox Pico 的 Linux核心資料

查看儲存空間

輸入

df;

顯示 LuckFox Pico 的 儲存空間

查看記憶體用量

輸入

free

顯示 LuckFox Pico 的 記憶體空間

GPIO 控制

由於 LuckFox Pico 不是直接將 機器碼(Machine Code) 寫入到 記憶體 再執行
而是將 Linux核心 寫入,再透過 Linux核心 控制 GPIO
因此操作上與過去使用的 Arduino 、 Raspberry Pi Pico 、 ESP 完全不同

輸出控制
使用 Bash

由於 Linux 視 硬件裝置 為 裝置檔案(Device File),而且 Linux 提供 SysFS ,可以將 硬件裝置 輸出到 使用者空間(User Space) 來操作
因此 Linux 可以不需要依賴額外操作便可以直接操作 GPIO

控制 GPIO 的檔案安置在 /sys/class/gpio
在目錄中會發現

  • gpiochip* 為 管理 GPIO群組 的目錄,目錄的數值通常是 GPIO群組 第一支 GPIO 的編號
  • export 為 將指定 GPIO 匯出到 使用者空間
  • unexport 為 將指定 GPIO 從 使用者空間 取消

由於 gpiochip* 的目錄主要是回應 GPIO晶片 的資料,而不是控制,因此在下不詳細列出資料

echo "34" >"/sys/class/gpio/export" # Export GPIO 34 to user space
echo "out" >"/sys/class/gpio/gpio34/direction" # set GPIO 34 as output pin
echo "1" >"/sys/class/gpio/gpio34/value" # set GPIO 34 as logic high
echo "34" >"/sys/class/gpio/unexport" # Unexport GPIO 34 from user space

操作上大致上是透過將 標準輸出(Standard Output (stdout)) 的資料 導向 到 裝置檔案 來控制 GPIO
簡單來說,即是 Linux 不需要額外工具便可以直接控制 GPIO

GPIO_PATH="/sys/class/gpio"
PIN="34"
echo "${PIN}" >"${GPIO_PATH}/export"
echo "out" >"${GPIO_PATH}/gpio${PIN}/direction"
echo "1" >"${GPIO_PATH}/gpio${PIN}/value"
echo "${PIN}" >"${GPIO_PATH}/unexport"

可以將 GPIO 的目錄位置 及 需要使用的 GPIO 以變數保存,方便使用

使用 Python

LuckFox Pico 預載 Python 3.11 ,可以使用 Python 控制 GPIO

#!/usr/bin/python
GPIO_PATH = "/sys/class/gpio"
PIN = "34"
with open(GPIO_PATH + "/export", "w") as file:
	file.write(PIN)
with open(GPIO_PATH + "/gpio" + PIN + "/direction", "w") as file:
	file.write("out")
with open(GPIO_PATH + "/gpio" + PIN + "/value", "w") as file:
	file.write("1")
with open(GPIO_PATH + "/unexport", "w") as file:
	file.write(PIN)

最基本可以使用 Python 的 File IO 功能,模仿 Bash 的 導向操作

亦可以使用 periphery套件GPIO類別

使用 迴圈(Loop) 便可以達到重覆執行的效果
(在 Bash 環境,可以在指令最後加上 & 將腳本以背景執行
亦可以將腳本交由 sbin 以背景執行,輸入)

/sbin/start-stop-daemon --start <Your Script>

亦可以達到背景執行效果

from periphery import GPIO
pin = GPIO(34, "out")
pin.write(True)
pin.close()

使用類似 MicroPython 或 CircuitPython 的 物件導向 方式操作 GPIO

使用 File IO 的最大好處是不需要依靠額外 函式庫 便可以使用

輸入控制

GPIO 除了輸出訊號來控制連接到引腳的裝置,亦可以偵測輸入的訊號
過去使用 Arduino 、 Raspberry Pico Pi 、 ESP 等 微控制器 都有提供上拉電阻
當啟動上拉電阻來偵測訊號時,當引腳懸空時為高電壓,接地時為低電壓

而 LuckFox Pico 的引腳 沒有上拉電阻,因此引腳懸空時為低電壓,即是偵測高電壓必須連接到電壓訊號
但電壓過高,會損壞 LuckFox Pico ,所以必須使用 LuckFox Pico 的 1V8引腳 來避免電壓過大而損壞 LuckFox Pico

使用 Bash
DIR="/sys/class/gpio"
output="34"
echo "${output}" >"${DIR}/export"
echo "out" >"${DIR}/gpio${output}/direction"
input="4"
echo "${input}" >"${DIR}/export"
echo "in" >"${DIR}/gpio${input}/direction"
while [ 1 ]; do
	cat "${DIR}/gpio${input}/value" >"${DIR}/gpio${output}/value"
done

基本上與 輸出控制 相同,只是將 direction 設定為 in 便會設定為 輸入控制

使用 Python
from periphery import GPIO
output = GPIO(34, "out")
input = GPIO(4, "in")
while True:
	output.write(input.read())

同樣將建講 GPIO 類別時設定為 in 便會設定為 輸入控制

PWM 控制

除了 GPIO 能控制開或關的狀態,還有 脈衝寬度調變 (Pulse-width modulation (PWM))
控制 PWM 則需要使用 /sys/class/pwm
PWM 每支引腳還有其專有的 pwmchip 路徑

使用 Bash
PWM_PATH="/sys/class/pwm"
PIN="10"
INDEX="0"
echo "${INDEX}" >"${PWM_PATH}/pwmchip${PIN}/export" # Export PWM 10,0 to user space
echo "1000000" >"${PWM_PATH}/pwmchip${PIN}/pwm${INDEX}/period" # Set PWM 10,0 period to 1000000/1000000000 nanosecond
echo "normal" >"${PWM_PATH}/pwmchip${PIN}/pwm${INDEX}/polarity" # Set PWM 10,0 polarity as normal (or inversed)
echo "1" >"${PWM_PATH}/pwmchip${PIN}/pwm${INDEX}/enable" # Enable PWM 10,0
echo "10000" >"${PWM_PATH}/pwmchip${PIN}/pwm${INDEX}/duty_cycle" # Set PWM 10,0 duty cycle to 10000 per period
echo "0" >"${PWM_PATH}/pwmchip${PIN}/pwm${INDEX}/enable" # Disable PWM 10,0
echo "${INDEX}" >"${PWM_PATH}/pwmchip${PIN}/unexport" # Unexport PWM 10,0 from user space

與 GPIO 的操作相同,但操作的內容則比 GPIO 多
PWM 需要設定

  • period - duty_cycle 的 相隔時間(除以1000000000計算) (數值越小越快)
  • prlority - 可以使用 normal (duty_cycle 為 0 = 0%) 或 inversed (duty_cycle 為 0 = 100%)
  • duty_cycle - 於 period 內的運作數量,數值介乎 0 至 period 之間
  • enable - 啟動(1) 或 關閉(0) PWM ,必須設定 period 及 polarity 才能啟動
使用 Python

使用 Python 控制 PWM 同樣可以使用 File IO 方式,但由於與 GPIO 方法一樣,因此在下不示範
亦可以使用 periphery套件 的 PWM類別

from periphery import PWM
pin = PWM(10, 0)
#pin.period = 0.001
pin.frequency = 1000
pin.polarity = "normal"
pin.enable()
pin.duty_cycle = 0.01
pin.disable()
pin.close()

使用 Python PWM類別 與使用 File IO 稍微不同, PWM 除了能夠使用 period ,還可以使用 frequency
frequency 是以 Hz 計算,即是每秒的執行次數 ,因此數值越大越快
另外 duty_cycle 亦不是直接使用 0 至 period 的數值,而是使用 0 至 1 之間,由 PWM類別 計算比值

ADC 控制

在 Linux核心 中, 類比數碼轉換 (Analog-Digital Convert (ADC)) 屬於 工業輸入輸出 (Industrial I/O (IIO))
在裝置目錄中輸入

ls "/dev/iio"*

顯示所有 ADC裝置

輸入

ls "/sys/bus/iio/devices/iio:device"*"/in_voltage"*

顯示所有 ADC引腳 (in_voltage*_raw) 及 ADC參考電壓 (in_voltage_scale)
例如 LuckFox Pico Mini B型號 有 2支 ADC引腳 , ADC0 為 in_voltage0_raw
雖然參考電壓為 1.8V ,但 in_voltage_scale 通常不會傳回 1.8 ,而是稍有偏差的數值

使用 Bash

輸入

cat "/sys/bus/iio/devices/iio:device"*"/in_voltage"*"_raw"

由於 ADC 必定是讀取的資訊,因此不需要設定資料便可以直接存取

ADC 傳回 0 至 1023 的資料,接地為 0 ,越接近 參考電壓 越接近 1023

使用 Python

Python 並沒有專門支援 ADC 的函式庫,因此必須使用 File IO 的方法存取檔案

def cat(path):
	with open(path, "r") as file:
		return float(file.read())
DIR = "/sys/bus/iio/devices/iio:device*"
aref = cat(DIR + "/in_voltage_scale")
adc0 = cat(DIR + "/in_voltage0_raw")
print("ARef voltage:", aref)
print("ADC0 value:", adc0)
print("ADC0 voltage:", adc0 / 1023 * aref)

UART 控制

除了基本的 GPIO 、 PWM 及 ADC , LuckFox Pico 實作了 UARTI2CSPI
當中 LuckFox Pico Mini B型號 提供 3組 UART ,分別是 UART2, UART3, UART4

輸入

ls "/dev/tty"*

會顯示 LuckFox Pico 的 UART 裝置檔案前綴為 /dev/ttyFIQ*

輸入

stty -F "/dev/ttyFIQ"*

便可以獲取指定 UART 的設定資料

資料輸出

將 LuckFox Pico 的 UART TX引腳 接駁到 從機裝置 的 UART RX引腳 便可以向 從機裝置 以 UART 發送資料

偵測
from machine import UART
uart = UART(1, 115200)
while True:
	if uart.any():
		data = uart.read()
		data = data.decode("UTF-8")
		print(data, end = "")

UART2 是核心系統預設的 UART ,能夠協助 LuckFox Pico 執行系統偵測
在下使用 Raspberry Pi Pico 並以 MicroPython 的 UART1 來接收 LuckFox Pico UART2 的訊號
再使用 screen 指令來偵測 Raspberry Pi Pico UART1 的訊號,便可以間接偵測到 LuckFox Pico 起動時的資料
(在下只是想將效果以 Terminal 展示才使用 screen ,使用 Thonny 的 Shell 或 其他工具 來偵測亦可)

使用 Bash

連接 UART 後,輸入

echo "data" >"/dev/ttyFIQ"*

便可以使用 Bash 經 UART 發送資料只需要將資料輸出到 標準輸出 並導向到 /dev/ttyFIQ* 的裝置裝檔
不過使用 echo 輸出資料到 標準輸出 時要加上 -n ,否則輸出資料會包含 行尾 (End-Of-Line (EOL)) 字元
使用 printf 則沒有 EOL字元
另外如果需要使用更精準的位元資料,則需要使用 \x?? 的十六進制格式
echo 需要加上 -e 才能輸出十六進制格式;使用 printf 則沒不需要
因此在下建議使用 printf 會比較方便; printf 亦較容易輸出格式化資料

使用 Python

輸入

python3

載入到 Python 的 REPL ,然後輸入

from serial import Serial
uart = Serial("/dev/ttyFIQ*", 115200)
uart.write(byte data or byte array)

便可以使用 Python 發送 UART 資料

相比 Bash , 使用 Python 發送文字資料比較方便
只需要可文字資料前加上 b 前綴,便會將文字資料轉換成 位元組陣列

接收訊號

將 LuckFox Pico 的 UART RX引腳 接駁到 從機裝置 的 UART TX引腳 便可以接收 從機裝置 以 UART 發送資料

輸入

cat "/dev/ttyFIQ"*

只需要使用 cat 指令,便可以將 UART 的資料輸出到 標準輸出
不過 LuckFox Pico 的反應比較不穩定,使用 UART 接收資料有時會有資料遺失

I2C 控制

除了 UART ,還有 I2C ,輸入

ls "/dev/i2c"*

便會列出所有 I2C

當中 I2C4 保留給 LuckFox Pico,因此使用者無法使用
因此實際只能使用 I2C3

LuckFox Pico 預載 i2c-tools ,方便控制 I2C 從機裝置 ,輸入

i2cdetect -y <bus>

便會列出對應 I2C 上能夠偵測到的 從機裝置地址
(如果 從機裝置 被系統偵測到並正在被核心使用,地址會顯示 UU)

使用 Bash

在下使用 PCF8574 I2C 擴展板測試

接駁到在下自製的 LED測試板 測試效果

向 I2C 從機裝置 傳送資料,輸入

i2cset -y <bus> <address> <data>

使用 i2cset 便可以直接將資料以 I2C 傳送到 從機裝置

使用 Python
from smbus import SMBus
i2c = SMBus(bus)
i2c.write_byte(address, value)

LuckFox Pico 預載 SMBus 來控制 I2C 從機裝置

SPI 控制

使用 Bash

LuckFox Pico 預設沒有能夠直接控制 SPI 的指令

使用 Python
from spidev import SpiDev
spi = SpiDev()
spi.open(bus, device)
spi.writebytes(byte array)

LuckFox Pico 預載 SpiDev 來控制 SPI 從機裝置

起動執行

過去通常都是由 宿主系統 資料寫入 微控制器,再讓 微控制器 起動後 自動執行 指定操作 及 循環操作
但當 宿主系統 自身成為 微控制器 後,操作的方式則稍有不同

由於 LuckFox Pico 使用 Linux核心 作為 系統
而 Linux核心 起動後 自動執行的程式 需要由 init 管理及執行,因此要將需要 起動後自動執行的程式 以 init服務 方式編寫
不過 LuckFox Pico 使用的 Linux核心 包含 Buildroot ,簡化製作 init服務 的步驟,只需要:

  • 將檔案存放到 /etc/init.d
  • 檔案需要具備執行權限 或 檔案名稱後綴為 .sh
  • 檔案名稱前綴為 S??
    必須大寫 S , 然後 2個 有效的 ASCII字元 ,一般會使用數字,例如 S99
    自動執行程式會按 ASCII字元 順序執行,通常自訂程式次序較後,避免比系統自動執行程式優先執行
  • 執行檔案最少接收一個參數
    第一參數必須接受 start 及 stop (大小寫相乎)
    start 參數為起動完成後自動執行;stop 參數為接收關機訊號後自動執行

init 需要判斷 start 及 stop ,可以使用 if 或 case 來達到效果

使用 Bash if

#!/bin/sh
if [ "${1}" == "start" ]; then
	echo "do something when start"
elif [ "${1}" == "stop" ]; then
	echo "do something when stop"
else
	echo "${0} <start|stop>"
fi

使用 Bash case

#!/bin/sh
case "${1}" in
	"start")
		echo "do something when start"
	;;
	"stop")
		echo "do something when stop"
	;;
	*)
		echo "${0} <start|stop>"
	;;
esac

使用 Python if

#!/usr/bin/python
import sys
if sys.argv[1] == "start":
	print("do something when start")
elif sys.argv[1] == "stop":stop
	print("do something when start")
else:
	print(sys.argv[0] +  "<start|stop>")

使用哪種一種方法並沒有限制

由於 LuckFox Pico Mini 沒有電源提示,無法確定裝置是否已經起動完成
因此在下將 USER LED 當作 電源提示LED ,即是 LuckFox Pico Mini 起動後 自動亮著 USER LED

#!/bin/sh
GPIO_PATH="/sys/class/gpio"
PIN="34"
if [ "${1}" == "start" ]; then
	if ! [ -d "${GPIO_PATH}/gpio${PIN}" ]; then
		echo "${PIN}" >"${GPIO_PATH}/export"
	fi
	echo "out" >"${GPIO_PATH}/gpio${PIN}/direction"
	echo "1" >"${GPIO_PATH}/gpio${PIN}/value"
	echo "LED on"
elif [ "${1}" == "stop" ]; then
	if ! [ -d "${GPIO_PATH}/gpio${PIN}" ]; then
		echo "${PIN}" >"${GPIO_PATH}/export"
	fi
	echo "out" >"${GPIO_PATH}/gpio${PIN}/direction"
	echo "0" >"${GPIO_PATH}/gpio${PIN}/value"
	echo "LED off"
else
	echo "${0} <start|stop>"
fi

在下使用 Bash if 的語法製作能夠讓 USER LED 亮著 的 腳本程式
將檔案儲存為 S99LED.sh 並存放到 /etc/init.d
重新啟動 LuckFox Pico Mini ,完成起動後, USER LED 便會亮著

起動後亮著 LED 亦能夠大概估計 LuckFox Pico Mini 的起動時間大約為 15秒

Micro SD卡

LuckFox Pico Mini 能夠安裝 Micro SD卡,作為額外儲存空間

由於 LuckFox Pico Mini B型號 內置快閃記憶體,因此起動不需要額外儲存裝置

如果 Micro SD卡 在起動前已經安裝,會自動掛載到 /mnt/sdcard 的目錄
正常情況下,即使起動後才安裝 Micro SD卡 亦會自動掛載
但如果安裝 Micro SD卡 後無法自動掛載,輸入

mount "/dev/mmcblk"* "/mnt/sdcard"

Micro SD卡 屬於 多媒體卡區塊裝置 (Multi-Media Card Block Device)
當 Micro SD卡 安裝到 LuckFox Pico Mini 會視為 /dev/mmcblk1
不過在下為了避免編號改變而需要檢視 /dev/mmcblk* 的編號,因此使用 * 代替

如果要卸載 Micro SD卡 則輸入

umount "/mnt/sdcard"

卸載後才拔除 Micro SD卡,避免損壞 LuckFox Pico Mini 或 Micro SD卡
(如果使用者正在 /mnt/sdcard 會無法卸載)

補充資料

總結

雖然電腦可以借助 Arduino 等 微控制器 或 開發板 控制其 GPIO
但每次都需要編寫程式碼、編譯、寫入到微控制器,而且還需要使用特定軟件才能達到效果

MicroPython 及 CircuitPython 能直接在 REPL 上執行
CircuitPython 甚至會被電腦當作 USB儲存裝置 能直接使用 文字編輯器 修改操作檔案並執行
不過仍然需要額外工具執行

而使用 SysFS 的方式,只需要直接在 Terminal 中執行
如果 宿主裝置 能經網絡連接,便不需要 OTA ,只需要使用 SSH 連接,便能直接修改訊號設定

測試時都是使用過去曾經使用的電子產品
由於當時沒有依賴別人開發的函式庫而是理解原理後自行編寫屬於自己的函式庫
因此可以很容易地將過去製作的 Arduino 、 MicroPython 或 CircuitPython 的函式庫移植到 SysFS 上使用

在下覺得 LuckFox Pico 官方教學的內容非常混亂及有很多資訊沒有提供
例如使用 upgrade_tool 其實不需要移至 /usr/local/bin 亦不需要使用 root 或 sudo

在下使用 UART2 偵錯時發現 LuckFox Pico 起動時會偵測 /root/main.py 或 /root/boot.py
會自動執行 /root/main.py ,如果 /root/main.py 不存在便執行 /root/boot.py
但在下在 LuckFox Pico 的官方網站,找不到相關的資料
還有很多資料需要自己測試

參考資料

沒有留言 :

張貼留言