在下學習使用 微控制器 及 開發板 已經一段時間
但在下認為使用 微控制器 或 開發板 都不能即使互動設定訊號非常不方便
每次修改操作內容,除了修改程式碼,還要編譯及寫入韌體到微控制器,需要一些時間
因此在下尋找一些可以直接控制訊號的開發板
外觀
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 實作了 UART 、 I2C 及 SPI
當中 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 的官方網站,找不到相關的資料
還有很多資料需要自己測試
沒有留言 :
張貼留言