-
Notifications
You must be signed in to change notification settings - Fork 7.3k
TaskList for Supporting RaspberryPi Pico peripherals #53810
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
@yonsch @andrei-edward-popa @burumaj @petejohanson |
And this PR I opened last night: #53811 for reboot support into bootloader. |
I've been working on adding support for |
Hi, @ajf58
Thank you for your interest. The best way is creating PR as draft and add the the number of it to this list. |
I created a PR to fix the issue. |
@soburi Thank you for this list. I've edited this list to add a few items, but mainly to remove entries that seemed redundant. Here are the ones removed with the reasons for the removal:
|
Possibilities to add:
I found pico_base, not sure if it is really useful. |
As far as I can tell this is a pure software implementation (the RP2040 does not have and RNG). The only thing about it that is "optimized" to the Pico is that it uses the flash's unique ID for generating numbers (as far as I can tell). So in that case I think we would better stick to Zephyr's implementation.
No, but I agree that it might be useful so I'll add it |
@yonsch The pico version seems to make use of the ROSC as an entropy source as well as the Bus Performance Counter. I'm not certain if the latter is pico-specific or an M0+ feature. I agree that the Zephyr implementation is probably best, but I do wonder if there is a way to input additional sources of entropy to the Zephyr methods. At a quick glance, it doesn't seem like the Zephyr version has a way to make use of that as a source of entropy (this was a very surface level check). I can look into this more later if there is interest. |
Thank you for updating this list. We got many functions are now available. |
Are there any plans to support bluetooth functionality on the pi pico wireless? |
@rp1231 Once the interface to the cyw43 (SPI over PIO) is supported, support for both wifi and Bluetooth will be possible. |
Hey everyone, I'm also interested in both Zephyr and Pico W support. I jumped over a few steps in creating proper support and wrote a small wifi driver using the cyw43-driver library from pico sdk (via the hal module). I say jumped over since I mostly ported the SPI over PIO from pico sdk. This is all working, at least in some sense. Running the I would be happy to contribute to this in any way for proper support. I'm completely new to Zephyr, my main experience is not mainly embedded but I have a few years of professional embedded on FreeRTOS and many years C programming. Can anyone point me in a good direction forward? Should I push my early driver as a draft PR, or begin switching to @ThreeEights SPI over PIO implementation? Thanks |
Hi, @PatrickE94 - Of course, I'd be most pleased if you work with my SPI via PIO implementation. :-) You should know that it currently doesn't support the 3-wire SPI configuration needed to access the WiFi chip on the Pico W. I'm trying to debug that today. We also have a project in our team to complete a Zephyr driver for the CYW43439 chip, though that's still some weeks away from being ready. Meanwhile ... welcome to Zephyr! |
Neat, then perhaps I will start at the other end :-)
I found that out a few hours ago. Since that's the Infineon guys doing a more generic implementation (with more features, AMDPU etc) than the one in pico sdk, I agree that's the right way! Quickly checking their wifi-host-driver concept, it doesn't look to intimidating to implement a SPI HAL layer which should enable their driver on the pico.
Many thanks! |
Hi @ThreeEights, @PatrickE94, I'm also interested in WiFi support on Pico W. What's the current state of play? |
@JohnConnett - I have a PIO SPI driver that works on everything except the Pico W, for some reason I'm trying to debug, and a pull request is pending for the CYW43xxx WiFi driver. We're trying to pull it all together. |
@JohnConnett I have just put together some glue for the cyw driver and the PIO SPI. It looks like it should work, given that @ThreeEights gets three wire SPI to work. But I haven't tested anything since I have no communication... I have an old branch where I've mashed in the official pico sdk driver which works, but it's not very neat. I've been pretty busy with life recently, but I might just take a slow evening to see if I can support @ThreeEights. Let me know if there's anything you'd like me to take a peek at. I have access to Salae logic analysers and some other fine equipment at work. |
I currently have a single Pico W (no headers), with a Pico WH and Pi Debug Probe on order. The plan is to use a Pico W with a PicoADC16 and Photo Transistor Light Sensors to monitor the state of LEDs on an underfloor heating controller and report them using MQTT to OpenEnergyMonitor. The LEDs indicate if the electrothermal actuators and circulation pump are energized. We will probably use MicroPython initially. I was interested in Zephyr as a possible alternative. Thanks for the comments. I might be interested in exploring Zephyr on Pico W for other things when WiFi is available. |
any evolving of Zephyr driver for the CYW43439 chip? I can't wait for btstack to support bluetooth le audio. |
Something to potentially add to the list: PIO-based Ethernet MAC |
The "binary info" feature was I think completed through here: #54464 (can be checked off). |
Would be great if @soburi can update this list to reflect the recently merged SPI support for the AIROC WiFi driver and the RP2350 support. |
@vulpes2 |
The cyw43439 wifi module on the pico 2 w still doesn't works fine. It is failed to set country code to cyw43439. When country code is WHD_COUNTRY_UNITED_STATES, the set IOVAR command failed with timeout. When country code is WHD_COUNTRY_UNITED_STATES_REV4, the set IOVAR command failed with return status -2. I also try set country code with WHD_COUNTRY_WORLD_WIDE_XX and WHD_COUNTRY_WORLD_WIDE_XX_REV17, the set IOVAR command also failed with timeout or return status -2. |
At this time, Zephyr has not provided any support for Pico2W. |
Hi, @soburi I have already worked a port of pico 2 w by myself. I will create a PR to zephyr project. And by use third-party wifi driver of cyw43 from beechwoods-software, I get the wifi support in pico 2 w, it work well. |
Simply put, just because it works on Pico1W doesn't mean it will work on Pico2W. Unless someone investigates, we won't know why. |
Just asking because neither the docs nor this issue explicitly mention this: There is Wifi support for the Pico W (Version 1) but not BLE, right? What would be needed to make that work? Edit: Looks like in theory there are BLE drivers for that chip: https://docs.zephyrproject.org/latest/build/dts/api/bindings/bluetooth/infineon%2Ccyw43xxx-bt-hci.html#dtbinding-infineon-cyw43xxx-bt-hci9 |
At least from the zephyr pico documentation page, the bluetooth is not mentioned. @keks You are right, there is a driver for the cyw43xx-bt, but from that page it looks like it is on UART, whilst that chip on the RPi seems to be on a different bus. I am also interested to know more about enabling the bluetooth on the pico. |
I haven't heard of anyone working on it yet. It might be a lot of work, as it will require some changes to the bus, just like @ThreeEights did. |
Thanks very much for your reply. I don't consider myself an expert, so I guess I will have fun reading datasheet and documentation, but, from a first glance, I am concerned about the connections. For this reason, please, correct me if I get something wrong, I don't want to mislead anyone here ;-). The RPi Pico datasheet , page 4, reports about it:
Looking at the CW43439 datasheet v3.0 (I don't understand why the link to the v5.0 on the Infineon site is broken...) it seems that that device has different buses for the two subsystems. The WLAN communicates via SPI and the Bluetooth is via UART. If the RPi Pico has only the SPI connection with the CW43439, how to manage the Bluetooth? Would this problem be addressed with the "some changes to the bus" you were referring to? Best |
There has been some confusion about Bluetooth on the Pico W so I'll attempt to provide some details on the hardware and explain what's required to make Bluetooth support (the controller is dual mode) happen. On this board the only available HCI transport is SPI, and the same SPI bus is already used by the AIROC WiFi driver. UART on the cypress chip is not connected to the micro and you cannot use it. This HCI over SPI transport is completely undocumented in the datasheet, and from what I can tell the RPi Pico W (and the Pico 2 W) are the only boards that use it. The packet format is pretty standard as far as I can tell. To add Bluetooth support someone needs to come up with a way to multiplex the SPI bus and make it usable for both the WiFi and HCI driver simultaneously. There is currently no mechanism in Zephyr to facilitate that so a new shim driver is likely required. pico-sdk has such a driver and parts of it is within pico-sdk (BSD-3-Clause license), the other part (cyw43-driver) is proprietary source-available software so porting portions of it is not possible. |
A task list for hardware support for the RaspberryPi Pico. (Inspired by #38657.)
Peripherals
drivers: adc: Add support for RaspberryPi Pico ADC #45363
drivers: sensors: Add support for RaspberryPi Pico CPU temperature #53591
drivers: dma: rpi_pico: add support for RaspberryPi Pico DMA #53892
rpi_pico: Added flash support #47806
rpi_pico: Fix DTC warnings #53431
boards: Add support for the raspberrypi pico #34835
drivers: grio: Pull ups and disabling interrupts. #42495
Designware (DW) I2C Slave Support and Raspberry Pi Pico I2C Support #42513
boards: arm: rpi_pico: Fix I2C compatible in docs #44046
drivers: i2c: i2c_dw: Add capability for handling reset device. #62445
rp2040: Added PIO support #44316
docs: Raspberry Pi Pico board page document fix for pwm #47578
drivers: pwm: Channel > 1 not working on rp2040 (Raspberry Pi Pico) #50876
drivers: pwm: Use a common initialization priority #50877
The blinky_pwm sample does not work on raspberry pi pico #51546
rp2040: Bugfix UART initialisation: Mixup of Zephyr constants and rpi-hal constants #52348
PWM related fixes for rpi_pico board #52692
Raspberry Pi Pico RTC Driver #52312
drivers: rtc: rpi_pico: Add support for the Raspberry Pi Pico RTC #64939
drivers: spi: Add basic support rpi-pico SPI (PrimeCell SSP PL022) #45131
drivers: spi: pl022: Add support DMA transfer #54195
drivers: counter: Add support for rpi_pico timer #57134
boards: Add support for the raspberrypi pico #34835
drivers: serial: added UART interrupts for Raspberry Pi Pico board #42421
drivers: serial: rpi_pico: added functions for runtime uart configuration #49883
drivers: watchdog: Add Raspberry Pi Pico watchdog driver #43393
drivers: usb: Add RP2040 USB device support. #42506
drivers: usb: create thread and connect IRQ during init #49772
drivers: usb_dc_rpi_pico: fixed buffer status handling #52145
Adding new support
drivers: counter: Add RPI Pico Programmable Interval Timer #85618
Peripherals RP2350
Supporting Pimoroni Pico Plus2 #77859 Included in Pimoroni Pico Plus2 support
entropy: rpi_pico: implement entropy driver for RP2350 #83346
drivers: crypto: Add initial support for rpi_pico sha256 accelerator #85036
drivers: flash: rpi_pico: Modifications to support rp2350 #86292
Adding new support
Adding new support
Adding new support
PIO
rp2040: Added PIO support #44316
rpi_pico: Added Generic PIO support and a PIO based UART driver #56678
drivers: spi: spi_pico_pio: Add basic support for SPI via PIO #60395
drivers: spi: spi_pico_pio: Add support for SPI mode 1 (CPOL=0, CPHA=1) #85034
drivers: spi: spi_pico_pio: Implement DMA support for 4-wire operation #85807
rpi_pico: Add PIO based WS2812 LED strip driver #55226
drivers: i2c: add i2c controller implementation using rp2040 pio #81183
System
soc: rpi_pico: Add restart to bootloader support. #53811
Raspberry Pi Pico Clock Control Driver #52901
clock_control: Added clock controller driver for Raspberry Pi Pico #62186
rpi_pico: Add hwinfo support #42558
Reset Controller Driver #43073
Reset controller bug #46057
drivers: reset: Update Kconfig #48969
drivers: regulator: add support for RaspberryPi Pico regulator. #54456
soc: arm: rpi_pico: Add support for binary info feature #54290
Cortex-M SMP support for Raspberry Pi Pico #59826
System: RP2040
rpi_pico: Add support for ROM math functions #52896
System: RP2350
Adding new supports
Adding new supports
Adding new supports
Boards: RP2040
boards: Add support for the raspberrypi pico #34835
boards: arm: rpi_pico: add openocd runner configuration #45137
boards: arm: rpi_pico: add jlink runner conf #49563
boards: arm: rpi_pico: add blackmagicprobe runner configuration #49944
rpi_pico: Added v3.2 release notes and improved docs #50772
boards: arm: Add adafruit_kb2040 board #51098
boards: arm: sparkfun_pro_micro_rp2040: rename board directory #53600
boards: Adding board definition for rpi_pico_w #57437
boards: add support for QT Py RP2040 #63554
board: Adding Adafruit QT PY RP2040 Support #66603
board: Adding support for W5500 Eval Board. #66523
Boards: RP2350
RaspberryPi Pico2
Add initial support for the Raspberry Pi Pico 2 #77368
Initial support for Pico 2 (squashed version of PR 77368) #83343
Pimoroni Pico Plus2
Supporting Pimoroni Pico Plus2 #77859
WizNet W5500 EVB Pico2
boards: Add support WizNet W5500 EVB Pico2 #84834
Wifi/Bluetooth support
drivers: wifi: add Infineon AIROC WIFI driver #63721
drivers: wifi: infineon: Add SPI support to AIROC WiFi driver #78773
drivers: spi: spi_pico_pio: Add basic support for SPI via PIO #60395
The text was updated successfully, but these errors were encountered: