← index #18076PR #12417
Off-topic · high · value 1.087
QUERY · ISSUE

RP2: ADC pins does not work properly in XIAO RP2350

openby Lesordsopened 2025-09-15updated 2025-10-06
bug

Port, board and/or hardware

XIAO RP2350

MicroPython version

MicroPython v1.26.1 on 2025-09-11; Seeed XIAO RP2350 with RP2350

Reproduction

  1. Use the firmware in this interface XIAO_RP2350
  2. Use the following test code
import machine
machine.ADC(29).read_u16()

Expected behaviour

Using my own compiled firmware

MicroPython v1.27.0-preview.135.gd28844d11b.dirty on 2025-09-15; Seeed XIAO RP2350 with RP2350

Type "help()" for more information.

>>> import machine
>>> machine.ADC(4).read_u16()
13955

Observed behaviour

MicroPython v1.26.1 on 2025-09-11; Seeed XIAO RP2350 with RP2350

Type "help()" for more information.

>>> import machine
>>> machine.ADC(29).read_u16()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Pin doesn't have ADC capabilities
>>> 

Additional Information

The reason is that pico-sdk is not the latest.

The ADC function modified the judgment logic after this submission, and changed the range of the ADC pin to be specified by macro(ADC_BASE_PIN and NUM_ADC_CHANNELS).
See: https://github.com/micropython/micropython/commit/34e463d861c5ebb33ec317749a008d461616cfbc

These two macros were not used in pico-sdk until after this commit.
See: https://github.com/raspberrypi/pico-sdk/commit/c88bd53a68fe2199fa4a5e6473ba88278f339a2b

The following file is the xiao rp2350 header file in the pico-sdk used by the current version of micropython. This file does not include the changes submitted above.
See: https://github.com/raspberrypi/pico-sdk/blob/9a4113fbbae65ee82d8cd6537963bc3d3b14bcca/src/boards/include/boards/seeed_xiao_rp2350.h

Please update pico-sdk and release a new firmware version as soon as possible.

Code of Conduct

Yes, I agree

CANDIDATE · PULL REQUEST

rp2/boards/ARDUINO_NANO_RP2040_CONNECT: Add support for reading the Nina ADC pins.

mergedby iabdalkaderopened 2023-09-11updated 2023-10-25
port-rp2

This PR provides access to the ADC pins controlled by the Nina module, which couldn't be used before by machine.ADC. With this change it's now possible to use those pins as regular ADC GPIOs:

import time
from machine import ADC

adc = ADC("A4")
while True:
    print(adc.read_u16())
    time.sleep_ms(10)

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied