Arduino Nano RP2040 Connect¶
Warning
บอร์ดนี้ไม่ได้รับการสนับสนุนอีกต่อไป เวอร์ชัน OpenMV เฟิร์มแวร์สุดท้ายสำหรับ Arduino Nano RP2040 Connect คือ 4.7.0 จะไม่มีการอัปเดตเฟิร์มแวร์ แก้ไขบัก หรือเพิ่มฟีเจอร์ใหม่สำหรับเป้าหมายนี้อีก ข้อมูลด้านล่างนี้เก็บรักษาไว้สำหรับผู้ใช้ที่ใช้เวอร์ชัน 4.7.0 หรือต่ำกว่า
Arduino Nano RP2040 Connect เป็นบอร์ดรูปแบบ Arduino Nano ขนาด 45 × 18 มม. ที่สร้างบน Raspberry Pi RP2040 ซึ่งเป็น ARM Cortex‑M0+ แบบดูอัลคอร์ทำงานที่ 133 MHz พร้อม SRAM ภายใน 264 KB Wi-Fi และ BLE มาจากโมดูล U‑blox NINA‑W102 และบอร์ดมี IMU 6 แกน LSM6DSOX และไมโครโฟน PDM MP34DT06 OpenMV เฟิร์มแวร์ขับเคลื่อนทั้งหมดนี้ผ่าน MicroPython
สำหรับข้อมูล datasheet ฉบับเต็ม รูปภาพ และขนาด ดูที่ หน้าสินค้า Arduino Nano RP2040 Connect
จุดเด่น¶
Raspberry Pi RP2040 ARM Cortex‑M0+ แบบดูอัลคอร์ที่ 133 MHz พร้อม SRAM ภายใน 264 KB
แฟลช QSPI ภายนอก 16 MB
โมดูล U‑blox NINA‑W102 ที่รองรับ Wi‑Fi 2.4 GHz b/g/n และ Bluetooth 4.2 (BR/EDR + LE)
LSM6DSOX IMU 6 แกน และไมโครโฟน PDM MP34DT06
ขั้วต่อ Micro USB สำหรับจ่ายไฟ โปรแกรม และ CDC REPL
พิน I/O ของผู้ใช้ 22 พิน บนเฮดเดอร์ Nano มาตรฐาน —
TX/RX,D2–D13(ดิจิทัล),A0–A7(อนาล็อก)
ผังพิน¶
ตารางอ้างอิงพิน¶
ชื่อพิน |
อ้างอิง |
ฟังก์ชัน |
|---|---|---|
TX |
3.3 V |
UART0 TX / SPI0 RX / I2C0 SDA / PWM0 A |
RX |
3.3 V |
UART0 RX / SPI0 CS / I2C0 SCL / PWM0 B |
D2 |
3.3 V |
SPI1 CS / UART1 RX / I2C0 SCL / PWM4 B |
D3 |
3.3 V |
SPI1 TX / UART0 RTS / I2C1 SCL / PWM7 B |
D4 |
3.3 V |
SPI0 RX / UART0 TX / I2C0 SDA / PWM0 A |
D5 |
3.3 V |
SPI0 CS / UART0 RX / I2C0 SCL / PWM0 B |
D6 |
3.3 V |
SPI0 SCK / UART0 CTS / I2C1 SDA / PWM1 A |
D7 |
3.3 V |
SPI0 TX / UART0 RTS / I2C1 SCL / PWM1 B |
D8 |
3.3 V |
SPI0 RX / UART1 TX / I2C0 SDA / PWM2 A |
D9 |
3.3 V |
SPI0 CS / UART1 RX / I2C0 SCL / PWM2 B |
D10 |
3.3 V |
SPI0 CS / UART1 RX / I2C0 SCL / PWM2 B |
D11 |
3.3 V |
SPI0 TX / UART1 RTS / I2C1 SCL / PWM3 B |
D12 |
3.3 V |
SPI0 RX / UART1 TX / I2C0 SDA / PWM2 A |
D13 |
3.3 V |
SPI0 SCK / UART1 CTS / I2C1 SDA / PWM3 A |
D14 / A0 |
3.3 V |
ADC / SPI1 SCK / UART1 CTS / I2C1 SDA / PWM5 A |
D15 / A1 |
3.3 V |
ADC / SPI1 TX / UART1 RTS / I2C1 SCL / PWM5 B |
D16 / A2 |
3.3 V |
ADC / SPI1 RX / UART0 TX / I2C0 SDA / PWM6 A |
D17 / A3 |
3.3 V |
ADC / SPI1 CS / UART0 RX / I2C0 SCL / PWM6 B |
D18 / A4 / SDA |
3.3 V |
ADC / I2C0 SDA / SPI1 RX / UART0 TX / PWM6 A |
D19 / A5 / SCL |
3.3 V |
ADC / I2C0 SCL / SPI1 CS / UART0 RX / PWM6 B |
D20 / A6 |
3.3 V |
ADC / GPIO |
D21 / A7 |
3.3 V |
ADC / GPIO |
RESET |
3.3 V |
กดปุ่ม RESET บนบอร์ดหรือดึงลง GND เพื่อรีเซ็ต |
REC |
3.3 V |
BOOTSEL — ดึงขึ้น HIGH ขณะเปิดเครื่องเพื่อเข้าสู่ ROM bootloader ของ RP2040 |
LED_BUILTIN |
— |
LED ผู้ใช้สีส้มบน |
LED_RED |
— |
ช่องสีแดงของ RGB LED |
LED_GREEN |
— |
ช่องสีเขียวของ RGB LED |
LED_BLUE |
— |
ช่องสีน้ำเงินของ RGB LED |
Warning
พิน I/O ของ Nano RP2040 Connect เป็น 3.3 V เท่านั้น — ไม่รองรับ 5 V การจ่าย 5 V เข้าไปจะทำให้ RP2040 เสียหาย
พินจ่ายไฟ¶
VIN — อินพุต 4 – 20 V จ่ายไฟให้บอร์ดผ่านตัวควบคุมแบบสวิตชิ่งบนบอร์ด นอกจากนี้ยังได้รับไฟจากไดโอดจากราง USB 5 V ดังนั้น USB และ
VINสามารถมีไฟพร้อมกันได้โดยไม่ทำให้กระแสไฟไหลย้อน+5V — ไม่ต่อไว้โดยค่าเริ่มต้น
+3V3 — เอาต์พุตของตัวควบคุม 3.3 V
AREF — พินอ้างอิงอนาล็อก ไม่ได้ต่อกับ RP2040 บนบอร์ดนี้ — ADC อ้างอิงกับ 3.3 V เสมอ
GND — กราวด์ร่วม
Nano RP2040 Connect สามารถจ่ายไฟได้สองทาง:
Micro USB — จ่าย 5 V ให้ตัวควบคุมบนบอร์ด
พิน VIN — จ่ายแรงดันไฟที่ควบคุมแล้ว 4 – 20 V
Note
มี solder jumper ที่ด้านล่างของบอร์ดเชื่อม +5V เข้ากับราง USB 5 V ปิดเพื่อให้พินเฮดเดอร์ +5V มีไฟ 5 V จริง
Note
มี solder jumper แบบปกติปิด (normally‑closed) ที่เอาต์พุตของตัวควบคุมแบบสวิตชิ่ง 4–20 V บนบอร์ด สามารถตัดเพื่อปิดใช้งานตัวควบคุม เพื่อให้บอร์ดรับไฟโดยตรงจากแหล่งจ่าย 3.3 V ภายนอกที่ +3V3
พินรีคัฟเวอรีและดีบัก¶
RESET — ทั้งแผ่น pad ที่เปิดเผยและปุ่ม RESET แบบ momentary บนด้านบนของบอร์ด ต่อกับสาย NRST ของ RP2040 ดึงลง GND หรือกดปุ่มเพื่อรีเซ็ต
REC — แผ่น pad ที่เปิดเผย การดึง
RECขึ้น HIGH ขณะเปิดเครื่อง (หรือขณะกด RESET) จะนำ RP2040 เข้าสู่ ROM bootloader โดยบอร์ดจะ re-enumerate เป็นไดรฟ์ USB mass-storage ที่ชื่อRPI-RP2และยอมรับไฟล์เฟิร์มแวร์.uf2
Nano RP2040 Connect ใช้ double‑tap reset มาตรฐานของ Arduino เพื่อเข้าสู่ Arduino's bootloader กดปุ่ม RESET สองครั้งอย่างรวดเร็ว — บอร์ดจะ re-enumerate ผ่าน USB เป็นอุปกรณ์ UF2 และ OpenMV IDE สามารถแฟลชเฟิร์มแวร์ใหม่ได้
สัญญาณ SWD ของ RP2040 เปิดเผยอยู่บน pad ที่ชุบแล้วที่ด้านหลังของบอร์ด ใต้โมดูล NINA สัญญาณดีบักทั้งหมดอ้างอิงกับ 3.3 V
อุปกรณ์ต่อพ่วงบนบอร์ด¶
LED¶
Nano RP2040 Connect มี RGB LED สำหรับผู้ใช้ — ขับผ่านช่อง LED_RED, LED_GREEN, และ LED_BLUE ที่พิมพ์ไว้บนบอร์ด — รวมถึง LED_BUILTIN สีส้มแยกต่างหากบน D13 ทั้งสี่ตัวสามารถควบคุมผ่านซอฟต์แวร์ได้ผ่าน machine.LED
from machine import LED
LED("LED_RED").on()
LED("LED_GREEN").on()
LED("LED_BLUE").on()
LED("LED_BUILTIN").on()
LED พาวเวอร์ สีเขียวแยกต่างหากบนบอร์ดจะติดทุกครั้งที่ราง +3.3 V ทำงาน และผู้ใช้ไม่สามารถควบคุมได้
เซนเซอร์กล้อง¶
OpenMV เฟิร์มแวร์บน Nano RP2040 Connect รองรับ เซนเซอร์ CMOS แบบพาราเลล OmniVision OV7670 บอร์ดไม่มี image sensor บนบอร์ด — ต่อโมดูล OV7670 เข้ากับพินเฮดเดอร์ที่พิมพ์ไว้ด้านล่าง และขับเคลื่อนผ่านโมดูล csi --- เซ็นเซอร์กล้อง
import csi
cam = csi.CSI()
cam.reset()
cam.pixformat(csi.RGB565)
cam.framesize(csi.QVGA)
cam.snapshot(time=2000) # let auto‑exposure settle
while True:
img = cam.snapshot()
Note
OV7670 ใช้ 14 พิน เฟิร์มแวร์ต่อสายดังนี้:
สัญญาณเซนเซอร์ |
พิน Nano RP2040 |
|---|---|
D0 |
|
D1 |
|
D2 |
|
D3 |
|
D4 |
|
D5 |
|
D6 |
|
D7 |
|
HSYNC |
|
VSYNC |
|
PXCLK |
|
MXCLK |
|
POWER |
|
RESET |
|
SCL |
|
SDA |
|
บัส I²C สำหรับควบคุม OV7670 ใช้ร่วมกับ IMU และ ATECC608A บนบอร์ดบน I²C 0 เซนเซอร์อยู่ที่แอดเดรส 7 บิต 0x21 — อุปกรณ์ของผู้ใช้บนบัส 0 ต้องหลีกเลี่ยงแอดเดรสนี้เมื่อต่อกล้องไว้
IMU¶
LSM6DSOX 6 แกน (accelerometer + gyroscope) บนบอร์ดอยู่บน I2C0 พอร์ต rp2 ของ machine.I2C(0) ค่าเริ่มต้นใช้ชุดพินอื่น ดังนั้นต้องส่งแผ่น pad SDA/SCL ที่พิมพ์ไว้อย่างชัดเจน ใช้ไดรเวอร์ frozen lsm6dsox.LSM6DSOX
import time
from machine import I2C, Pin
from lsm6dsox import LSM6DSOX
bus = I2C(0, scl=Pin("SCL"), sda=Pin("SDA"))
imu = LSM6DSOX(bus)
while True:
print(imu.accel()) # (x, y, z) in g
print(imu.gyro()) # (x, y, z) in deg/s
time.sleep_ms(100)
ไมโครโฟน¶
ไมโครโฟน PDM MP34DT06 บนบอร์ดถูกบันทึกผ่าน audio --- โมดูล Audio โดยใช้บล็อก PIO ของ RP2040:
import audio
from ulab import numpy as np
def loudness(pcmbuf):
samples = np.array(np.frombuffer(pcmbuf, dtype=np.int16), dtype=np.float)
rms = np.sqrt(np.mean(samples ** 2))
if rms > 10000:
print("Loud!", int(rms))
audio.init(channels=1, frequency=16000, gain_db=24)
audio.start_streaming(loudness)
while True:
pass
Wi‑Fi¶
โมดูล NINA‑W102 บนบอร์ดเปิดเผยผ่าน network --- การกำหนดค่าเครือข่าย เป็น station interface:
import network, time
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("ssid", "password")
while not wlan.isconnected():
time.sleep(1)
print("Wi‑Fi IP:", wlan.ipconfig("addr4")[0])
Bluetooth¶
โมดูล NINA เดียวกันยังเปิดเผย Bluetooth 4.2 LE ด้วย ใช้ aioble --- Async BLE สำหรับ BLE ที่รองรับ asyncio — ตัวอย่างเช่น โฆษณาเป็น peripheral และรอให้ central เชื่อมต่อ:
import asyncio
import aioble
async def run():
while True:
conn = await aioble.advertise(250_000, name="Nano-RP2040")
print("Connected:", conn.device)
await conn.disconnected()
asyncio.run(run())
ตารางอ้างอิงบัส¶
GPIO¶
ใช้ machine.Pin เพื่ออ่านหรือขับพินใดก็ได้ที่พิมพ์ไว้บนบอร์ด เอาต์พุตเป็น 3.3 V CMOS กระแสรวม 50 mA สำหรับ GPIO ทั้งหมด
from machine import Pin
out = Pin("D2", Pin.OUT)
out.on()
out.off()
out.value(1)
inp = Pin("D3", Pin.IN, Pin.PULL_UP)
print(inp.value())
พินอินพุตใดก็ได้สามารถเรียกอินเทอร์รัปต์บนการเปลี่ยนขอบ (edge transition) ได้:
def handler(pin):
print("triggered:", pin)
Pin("D3", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
บัส |
TX |
RX |
|---|---|---|
UART0 |
TX |
RX |
ใช้ชื่อบนบอร์ด TX/RX กับ machine.UART
from machine import UART
uart = UART(0, baudrate=115200)
uart.write("hello")
uart.read(5)
Note
machine.UART(1) มีอยู่แต่สงวนไว้สำหรับโมดูล NINA‑W102 บนบอร์ด (ลิงก์ BLE) อย่าใช้โดยตรง
I²C¶
บัส |
SDA |
SCL |
|---|---|---|
I2C0 |
|
|
I2C1 |
|
|
ทั้งสองบัสต้องส่งพินอย่างชัดเจนให้ machine.I2C
from machine import I2C, Pin
bus0 = I2C(0, scl=Pin("SCL"), sda=Pin("SDA"), freq=400_000)
bus0.scan()
bus1 = I2C(1, scl=Pin("A1"), sda=Pin("A0"), freq=400_000)
bus1.scan()
Note
ชิปสองตัวบนบอร์ดใช้ บัส 0 ร่วมกัน — อุปกรณ์ของผู้ใช้บนบัสนี้ต้องหลีกเลี่ยงแอดเดรสของพวกเขา:
0x6A— LSM6DSOX IMU0x60— ATECC608A‑MAHDA‑T
การใช้ A0/A1 เป็น I²C จะใช้พินเหล่านั้นสำหรับบัส ดังนั้นไม่สามารถใช้เป็นอินพุต ADC ได้ในเวลาเดียวกัน
Note
แผ่น pad SDA / SCL (บัส 0) มีตัวต้านทาน pull-up ขึ้น 3.3 V บนบอร์ด จึงไม่จำเป็นต้องใช้ pull-up ภายนอกสำหรับอุปกรณ์บนบัสนั้น A0 / A1 (บัส 1) ไม่มี — ต้องเพิ่ม pull-up ภายนอกเมื่อใช้บัส 1
ฮาร์ดแวร์เดียวกันยังสามารถใช้ในโหมด target (slave) ผ่าน machine.I2CTarget เพื่อเปิดเผยพื้นที่หน่วยความจำให้กับ I²C controller อื่น:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(0, addr=0x42, mem=buf)
SPI¶
บัส |
MOSI |
MISO |
SCK |
CS |
|---|---|---|---|---|
SPI0 |
D11 |
D12 |
D13 |
D10 |
พอร์ต rp2 ไม่ได้กำหนดค่าพิน SPI0 บนบอร์ดนี้ไว้ล่วงหน้า ดังนั้นต้องส่ง pad ที่พิมพ์ไว้อย่างชัดเจนเมื่อสร้างบัส:
from machine import SPI, Pin
spi = SPI(0, baudrate=10_000_000,
sck=Pin("D13"), mosi=Pin("D11"), miso=Pin("D12"))
cs = Pin("D10", Pin.OUT, value=1) # CS is not driven by the SPI peripheral
cs.value(0)
spi.write(b"hello")
cs.value(1)
Note
D13 ทำหน้าที่เป็น LED_BUILTIN สีส้มด้วย — การขับ SPI บนบัสนี้จะทำให้ LED กะพริบตามจังหวะ clock ของบัส
Note
machine.SPI(1) มีอยู่แต่สงวนไว้สำหรับโมดูล NINA‑W102 บนบอร์ด (ลิงก์ SPI สำหรับ Wi-Fi/BLE) อย่าใช้โดยตรง
ADC¶
RP2040 มีช่อง ADC 12 บิต 4 ช่องเปิดเผยบน A0–A3 ทั้งหมด อ้างอิงกับ 3.3 V — read_u16 คืนค่า 0–65535 สำหรับ 0–3.3 V ที่พิน พิน AREF ของบอร์ดไม่ได้ต่อ ดังนั้นอ้างอิงเป็น 3.3 V เสมอ:
from machine import ADC
import time
adc = ADC("A0")
while True:
voltage = adc.read_u16() * 3.3 / 65535
print(voltage)
time.sleep_ms(100)
PWM¶
พิน |
Slice / channel |
|---|---|
TX |
PWM0 A |
RX |
PWM0 B |
D2 |
PWM4 B |
D3 |
PWM7 B |
D4 |
PWM0 A |
D5 |
PWM0 B |
D6 |
PWM1 A |
D7 |
PWM1 B |
D8 |
PWM2 A |
D9 |
PWM2 B |
D10 |
PWM2 B |
D11 |
PWM3 B |
D12 |
PWM2 A |
D13 |
PWM3 A |
D14 / A0 |
PWM5 A |
D15 / A1 |
PWM5 B |
D16 / A2 |
PWM6 A |
D17 / A3 |
PWM6 B |
D18 / A4 / SDA |
PWM6 A |
D19 / A5 / SCL |
PWM6 B |
ขับพินเหล่านั้นผ่าน machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("D3"), freq=1_000, duty_u16=32768)
Note
พินหลายตัวใช้ช่อง PWM slice ร่วมกัน:
PWM0 A อยู่บน
TXและD4PWM0 B อยู่บน
RXและD5PWM2 A อยู่บน
D8และD12PWM2 B อยู่บน
D9และD10PWM6 A อยู่บน
D16/A2และD18/A4/SDAPWM6 B อยู่บน
D17/A3และD19/A5/SCL
เลือก consumer หนึ่งตัวต่อ slice channel ช่อง A และ B ภายใน slice เดียวกันใช้ period (ความถี่) ร่วมกัน แต่แต่ละตัวมี duty cycle ของตัวเอง
บัสแบบ software bit‑bang¶
machine.SoftI2C และ machine.SoftSPI ทำงานบน GPIO ใดก็ได้หากต้องการบัสเพิ่มเติม
เซนเซอร์ความร้อน (ภายนอกบอร์ด)¶
เฟิร์มแวร์รวมไดรเวอร์ fir --- ไดรเวอร์เซนเซอร์ความร้อน (fir == far infrared) สำหรับ AMG8833 thermal imager แบบ 8×8 ที่ต่อสายภายนอก ต่อโมดูลเข้ากับบัส I²C ด้านล่าง จากนั้นอ่านเฟรมด้วย fir.init() + fir.snapshot()
import time
import image
import fir
fir.init() # auto‑detects the sensor
clock = time.clock()
while True:
clock.tick()
try:
img = fir.snapshot(x_scale=5, y_scale=5,
color_palette=image.PALETTE_IRONBOW,
hint=image.BICUBIC,
copy_to_fb=True)
except OSError:
continue
print(clock.fps())
ไดรเวอร์ fir สื่อสารกับเซนเซอร์ผ่าน I²C 0 เท่านั้น — ต่อโมดูลเข้ากับแผ่น pad SCL / SDA ที่พิมพ์ไว้ แอดเดรส 7 บิตของเซนเซอร์ (0x69) ต้องไม่ถูกใช้โดยอุปกรณ์อื่นบนบัสนั้น
การจับเวลา¶
time¶
โมดูล time ครอบคลุมการหน่วงเวลาแบบบล็อก, ticks แบบ monotonic และการวัดเวลาที่ผ่านไป:
import time
time.sleep(1) # seconds
time.sleep_ms(500)
time.sleep_us(10)
start = time.ticks_ms()
# ...do work...
elapsed = time.ticks_diff(time.ticks_ms(), start)
Virtual timers¶
machine.Timer กำหนดเวลาคอลแบ็กแบบ periodic หรือ one‑shot โดยไม่ใช้ hardware timer slot ส่ง -1 เป็น id เพื่อใช้ virtual (software) timer:
from machine import Timer
one_shot = Timer(-1)
one_shot.init(period=5_000, mode=Timer.ONE_SHOT,
callback=lambda t: print("once"))
periodic = Timer(-1)
periodic.init(period=2_000, mode=Timer.PERIODIC,
callback=lambda t: print("tick"))
ค่า Period เป็นมิลลิวินาที เรียก deinit() เพื่อหยุดและคืน slot
Real‑time clock¶
machine.RTC รักษาเวลาแบบ wall‑clock ข้ามการรีเซ็ต RTC ของ RP2040 ผูกกับออสซิลเลเตอร์บนชิปและไม่รอดจากการตัดไฟทั้งหมด — ตั้งเวลาทุกครั้งที่บูตเย็นหากแอปพลิเคชันของคุณต้องการ:
from machine import RTC
rtc = RTC()
rtc.datetime((2026, 4, 30, 4, 12, 0, 0, 0)) # Y, M, D, weekday, h, m, s, subsec
print(rtc.datetime())
Watchdog¶
machine.WDT รีเซ็ตบอร์ดหากแอปพลิเคชันค้าง เมื่อเริ่มแล้วไม่สามารถหยุดหรือกำหนดค่าใหม่ได้ — ต้องป้อนเป็นระยะๆ ภายใน main loop:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
ข้อมูลการบูตและ runtime¶
การอัปเดตเฟิร์มแวร์ (UF2)¶
Nano RP2040 Connect ใช้ double‑tap reset มาตรฐานของ Arduino เพื่อเข้าสู่ Arduino's bootloader กดปุ่ม reset สองครั้งอย่างรวดเร็ว — บอร์ดจะ re-enumerate ผ่าน USB เป็นอุปกรณ์ UF2 และ OpenMV IDE สามารถแฟลชเฟิร์มแวร์ใหม่ได้
สคริปต์ที่กำลังทำงานสามารถกลับเข้าสู่ bootloader ได้ตามต้องการโดยเรียก machine.bootloader()
import machine
machine.bootloader()
ระบบไฟล์และลำดับการบูต¶
เฟิร์มแวร์ Nano RP2040 Connect เมาท์ระบบไฟล์เดียวเมื่อบูต:
แฟลชภายใน — เมาท์ที่
/flashเสมอและใช้เป็น working directory เก็บmain.pyและREADME.txtโดยค่าเริ่มต้น สร้างขึ้นในการบูตครั้งแรก
หลังจากเมาท์แล้ว interpreter จะรันสคริปต์จาก /flash:
boot.pyถูกรัน ทุกครั้ง ที่รีเซ็ตแบบ softmain.pyถูกรัน เฉพาะการบูตเย็น เท่านั้น ทันทีหลังจากboot.py
main.py เริ่มต้นที่จัดส่งบนบอร์ดที่แฟลชใหม่จะกะพริบช่อง blue ของ RGB LED ของผู้ใช้เป็น heartbeat (สองพัลส์สั้น ช่องว่างสั้น) เพื่อให้รู้ว่าเฟิร์มแวร์บูตสำเร็จโดยไม่มี host ต่อ
เมื่อเชื่อมต่อผ่าน USB /flash จะ enumerate เป็น USB mass‑storage drive บน host ทำให้สามารถแก้ไข boot.py, main.py และไฟล์อื่นๆ ได้โดยตรง ดีด drive ออกก่อนรีเซ็ตบอร์ด เพื่อให้ host flush การเขียนที่ cache ไว้
Note
เนื่องจาก OS จัดการ drive เป็น passive block device ไฟล์ที่สร้างหรือแก้ไขโดยโค้ดที่รันบนกล้องจะไม่ปรากฏจนกว่า host จะ re-mount drive ถ้าทั้ง OS และกล้องเขียน filesystem เดียวกันในเวลาเดียวกัน OS จะชนะและเขียนทับการเปลี่ยนแปลงของกล้อง ใช้ SD card สำหรับข้อมูลที่สคริปต์เขียนกลับ และ re-mount ก่อนอ่านไฟล์เหล่านั้นจาก host
Note
ช่อง red ของ RGB LED ของผู้ใช้อาจติดสั้นๆ ในขณะที่ host กำลังอ่านจากหรือเขียนไปยัง USB mass‑storage drive — นี่เป็นตัวบ่งชี้กิจกรรมที่ขับเคลื่อนโดยเฟิร์มแวร์ ไม่ใช่ข้อผิดพลาด
ขนาด storage¶
Nano RP2040 Connect มาพร้อมกับ:
/flash— FAT filesystem ขนาด 14 MB อ่าน/เขียนได้
Nano RP2040 build ไม่รวม ROMFS ให้จัดส่ง Python modules และ ML models บน /flash โดยตรง
ไลบรารีซอฟต์แวร์¶
ดู ดัชนีไลบรารี สำหรับรายการโมดูลทั้งหมด — รวมถึงโมดูลที่เฉพาะเจาะจงสำหรับ Nano RP2040 Connect build