Crucial Bug Discovered in Raspberry Pi’s New RP2350 Microcontroller: Causing unexpected GPIO Behaviour

Published  August 27, 2024   0
RP2350 Bug

After a few days of release, a crucial bug was discovered for the RP2350 microcontroller. The Raspberry Pi Foundation released their new and improved in-house designed microcontroller RP2350 along with their new Raspberry Pi Pico 2 development board featuring the same SoC a few days back. Raspberry Pi has confirmed that the bug causes pins to freeze outputting 2.15V when configured as inputs using the internal pull-down resistors. As per the errata, this unexpected latching behaviour of GPIO is caused by a faulty fault-tolerant pad IP block. The bug was discovered by Ian Lesnet, the creator of Bus Pirate.

The RP2350 is the first of its kind from Raspberry Pi featuring a dual architecture design featuring both Arm Cortex-M33 and RISC-V Hazard3 cores. While the ARM Coretx-M33 is an off-the-shelf solution the Hazard3 RISC-V core is developed by developed by Raspberry Pi’s principal hardware engineer Luke Wren. As per Waren, they have relied on an external IP vendor for the design of the pad IP block. He confirmed the source of the problem, which was traced to the analog circuitry of a particular fault tolerant (FT) pad. He explained further that "There was one particular structure on the RP2040 FT pad that limited its tolerance, but on inspection, the modified layout we got back was a completely different circuit. It was a bit of a blind spot for us in simulation because the supplied simulation model obviously does not have this issue." The bug is documented on the RP2350 datasheet as erratum RP2350-E9.

RP2350-E9

Since this is the design flow there is no easy fix for it. The Raspberry Pi team naked it as fixed by documentation and recommends enabling the input buffer immediately before reading, and then re-disable immediately afterwards as a workaround. We could also use the inputs with internal pullup resistors instead of pull-down resistors as a workaround. More details about the bug can be found on page 1340 of the RP2350 datasheet.