RP235x

A microcontroller
by Raspberry Pi

Colophon

© 2023-2025 Raspberry Pi Ltd

This documentation is licensed under a Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND).

Portions Copyright © 2019 Synopsys, Inc.

All rights reserved. Used with permission. Synopsys & DesignWare are registered trademarks of Synopsys, Inc.

Portions Copyright © 2000-2001, 2005, 2007, 2009, 2011-2012, 2016 Arm Limited.

All rights reserved. Used with permission.

build-date: 2025-07-29

build-version: d126e9e-clean

TECHNICAL AND RELIABILITY DATA FOR RASPBERRY PI PRODUCTS (INCLUDING DATASHEETS) AS MODIFIED FROM TIME TO TIME ("RESOURCES") ARE PROVIDED BY RASPBERRY PI LTD ("RPL") "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW IN NO EVENT SHALL RPL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE RESOURCES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

RPL reserves the right to make any enhancements, improvements, corrections or any other modifications to the RESOURCES or any products described in them at any time and without further notice.

The RESOURCES are intended for skilled users with suitable levels of design knowledge. Users are solely responsible for their selection and use of the RESOURCES and any application of the products described in them. User agrees to indemnify and hold RPL harmless against all liabilities, costs, damages or other losses arising out of their use of the RESOURCES.

RPL grants users permission to use the RESOURCES solely in conjunction with the Raspberry Pi products. All other use of the RESOURCES is prohibited. No licence is granted to any other RPL or other third party intellectual property right.

HIGH RISK ACTIVITIES. Raspberry Pi products are not designed, manufactured or intended for use in hazardous environments requiring fail safe performance, such as in the operation of nuclear facilities, aircraft navigation or communication systems, air traffic control, weapons systems or safety-critical applications (including life support systems and other medical devices), in which the failure of the products could lead directly to death, personal injury or severe physical or environmental damage ("High Risk Activities"). RPL specifically disclaims any express or implied warranty of fitness for High Risk Activities and accepts no liability for use or inclusions of Raspberry Pi products in High Risk Activities.

Raspberry Pi products are provided subject to RPL's Standard Terms . RPL's provision of the RESOURCES does not expand or otherwise modify RPL's Standard Terms including but not limited to the disclaimers and warranties expressed in them.

Table of contents

Colophon1
Legal disclaimer notice1
1. Introduction13
1.1. The chip14
1.2. Pinout reference15
1.2.1. Pin locations15
1.2.2. Pin descriptions16
1.2.3. GPIO functions (Bank 0)17
1.2.4. GPIO functions (Bank 1)21
1.3. Why is the chip called RP2350?22
1.4. Version History23
2. System bus24
2.1. Bus fabric24
2.1.1. Bus priority25
2.1.2. Bus security filtering25
2.1.3. Atomic register access26
2.1.4. APB bridge26
2.1.5. Narrow IO register writes27
2.1.6. Global Exclusive Monitor28
2.1.7. Bus performance counters30
2.2. Address map30
2.2.1. ROM30
2.2.2. XIP30
2.2.3. SRAM31
2.2.4. APB registers31
2.2.5. AHB registers33
2.2.6. Core-local peripherals (SIO)33
2.2.7. Cortex-M33 private peripherals34
3. Processor subsystem35
3.1. SIO36
3.1.1. Secure and Non-secure SIO37
3.1.2. CUID38
3.1.3. GPIO control39
3.1.4. Hardware spinlocks41
3.1.5. Inter-processor FIFOs (Mailboxes)42
3.1.6. Doorbells42
3.1.7. Integer divider43
3.1.8. RISC-V platform timer43
3.1.9. TMDS encoder44
3.1.10. Interpolator44
3.1.11. List of registers54
3.2. Interrupts82
3.2.1. Non-maskable interrupt (NMI)83
3.2.2. Further reading on interrupts83
3.3. Event signals (Arm)84
3.4. Event signals (RISC-V)84
3.5. Debug84
3.5.1. Connecting to the SW-DP85
3.5.2. Arm debug86
3.5.3. RISC-V debug86
3.5.4. Debug power domains87
3.5.5. Software control of SWD pins87
3.5.6. Self-hosted debug87
3.5.7. Trace88
3.5.8. Rescue reset90
3.5.9. Security91
3.5.10. RP-AP93
3.6. Cortex-M33 coprocessors100
3.6.1. GPIO coprocessor (GPIOC)101
3.6.2. Double-precision coprocessor (DCP)104
3.6.3. Redundancy coprocessor (RCP)112
3.6.4. Floating point unit123
3.7. Cortex-M33 processor123
3.7.1. Features124
3.7.2. Configuration124
3.7.3. Compliance128
3.7.4. Programmer's model131
3.7.5. List of registers148
3.8. Hazard3 processor233
3.8.1. Instruction set reference233
3.8.2. Memory access278
3.8.3. Memory protection279
3.8.4. Interrupts and exceptions282
3.8.5. Debug285
3.8.6. Custom extensions286
3.8.7. Instruction cycle counts296
3.8.8. Configuration302
3.8.9. Control and status registers304
3.9. Arm/RISC-V architecture switching335
3.9.1. Automatic switching335
3.9.2. Mixed architecture combinations336
4. Memory337
4.1. ROM337
4.2. SRAM337
4.2.1. Other on-chip memory338
4.3. Boot RAM339
4.3.1. List of registers339
4.4. External flash and PSRAM (XIP)340
4.4.1. XIP cache341
4.4.2. QSPI Memory Interface (QMI)345
4.4.3. Streaming DMA interface345
4.4.4. Performance counters346
4.4.5. List of XIP_CTRL registers346
4.4.6. List of XIP_AUX registers350
4.5. OTP352
5. Bootrom353
5.1. Bootrom concepts354
5.1.1. Secure and Non-secure354
5.1.2. Partition tables354
5.1.3. Flash permissions355
5.1.4. Image definitions355
5.1.5. Blocks and block loops356
5.1.6. Block versioning357
5.1.7. A/B versions357
5.1.8. Hashing and signing357
5.1.9. Load maps358
5.1.10. Packaged binaries358
5.1.11. Anti-rollback protection359
5.1.12. Flash image boot359
5.1.13. Flash partition boot360
5.1.14. Partition-Table-in-Image boot360
5.1.15. Flash boot slots360
5.1.16. Flash update boot and version downgrade361
5.1.17. Try before you buy362
5.1.18. UF2 targeting362
5.1.19. Address translation363
5.1.20. Automatic architecture switching364
5.2. Processor-controlled boot sequence365
5.2.1. Boot outcomes365
5.2.2. Sequence366
5.2.3. POWMAN boot vector371
5.2.4. Watchdog boot vector371
5.2.5. RAM image boot372
5.2.6. OTP boot373
5.2.7. Flash boot373
5.2.8. BOOTSEL (USB/UART) boot374
5.2.9. Boot configuration (OTP)375
5.3. Launching code on Processor Core 1375
5.4. Bootrom APIs376
5.4.1. Locating the API functions376
5.4.2. API function availability378
5.4.3. API function return codes378
5.4.4. API functions and exclusive access379
5.4.5. SDK access to the API380
5.4.6. Categorised list of API functions and ROM data380
5.4.7. Alphabetical list of API functions and ROM data382
5.4.8. API function listings383
5.5. USB mass storage interface399
5.5.1. The RP2350 drive399
5.5.2. UF2 format details400
5.5.3. UF2 targeting rules401
5.6. USB PICOBOT interface403
5.6.1. Identifying the device403
5.6.2. Identifying the interface404
5.6.3. Identifying the endpoints404
5.6.4. PICOBOT Commands405
5.6.5. Control requests410
5.7. USB white-labelling412
5.7.1. USB device descriptor413
5.7.2. USB device strings413
5.7.3. USB configuration descriptor413
5.7.4. MSD drive413
5.7.5. UF2 INDEX.HTM file413
5.7.6. UF2 INFO_UF2.TXT file414
5.7.7. SCSI Inquiry414
5.7.8. Volume label simple example414
5.7.9. Volume label in-depth example415
5.8. UART boot416
5.8.1. Baud rate and clock requirements416
5.8.2. UART boot shell protocol416
5.8.3. UART boot programming flow417
5.8.4. Recovering from a stuck interface417
5.8.5. Requirements for UART boot binaries418
5.9. Metadata block details418
5.9.1. Blocks and block loops418
5.9.2. Common block items419
5.9.3. Image definition items421
5.9.4. Partition table items425
5.9.5. Minimum viable image metadata428
5.10. Example boot scenarios429
5.10.1. Secure boot429
5.10.2. Signed images430
5.10.3. Packaged binaries433
5.10.4. A/B booting433
5.10.5. A/B booting with owned partitions435
5.10.6. Custom bootloader437
5.10.7. OTP bootloader439
5.10.8. Rollback versions and bootloaders440
6. Power441
6.1. Power supplies441
6.1.1. Digital IO supply (IOVDD)441
6.1.2. QSPI IO supply (QSPI_IOVDD)441
6.1.3. Digital core supply (DVDD)441
6.1.4. USB PHY and OTP supply (USB_OTP_VDD)442
6.1.5. ADC supply (ADC_AVDD)442
6.1.6. Core voltage regulator input supply (VREG_VIN)442
6.1.7. On-chip voltage regulator analogue supply (VREG_AVDD)442
6.1.8. Power supply sequencing443
6.2. Power management443
6.2.1. Core power domains443
6.2.2. Power states444
6.2.3. Power state transitions445
6.3. Core voltage regulator448
6.3.1. Operating modes448
6.3.2. Software control449
6.3.3. Power Manager control449
6.3.4. Status450
6.3.5. Current limit450
6.3.6. Over temperature protection450
6.3.7. Application circuit450
6.3.8. External components and PCB layout requirements452
6.3.9. List of registers457
6.4. Power management (POWMAN) registers457
6.5. Power reduction strategies488
6.5.1. Top-level clock gates489
6.5.2. SLEEP state489
6.5.3. DORMANT state489
6.5.4. Memory periphery power down490
6.5.5. Full memory power down490
6.5.6. Programmer's model491
7. Resets494
7.1. Overview494
7.2. Changes from RP2040494
7.3. Chip-level resets495
7.3.1. Chip-level reset table495
7.3.2. Chip-level reset destinations496
7.3.3. Chip-level reset sources496
7.4. System resets (Power-on State Machine)497
7.4.1. Reset sequence498
7.4.2. Register control499
7.4.3. Interaction with watchdog499
7.4.4. List of registers499
7.5. Subsystem resets503
7.5.1. Overview503
7.5.2. Programmer's model503
7.5.3. List of Registers505
7.6. Power-on resets and brownout detection508
7.6.1. Power-on reset (POR)509
7.6.2. Brownout detection (BOD)509
7.6.3. Supply monitor512
7.6.4. List of registers512
8. Clocks513
8.1. Overview513
8.1.1. Changes between RP2350 revisions514
8.1.2. Clock sources514
8.1.3. Clock generators518
8.1.4. Frequency counter522
8.1.5. Resus522
8.1.6. Programmer's model523
8.1.7. List of registers529
8.2. Crystal oscillator (XOSC)554
8.2.1. Overview554
8.2.2. Changes from RP2040556
8.2.3. Usage556
8.2.4. Startup delay556
8.2.5. XOSC counter557
8.2.6. DORMANT mode557
8.2.7. Programmer's model558
8.2.8. List of registers559
8.3. Ring oscillator (ROSC)561
8.3.1. Overview561
8.3.2. Changes from RP2040562
8.3.3. Changes between RP2350 revisions562
8.3.4. ROSC/XOSC trade-offs562
8.3.5. Modifying the frequency563
8.3.6. Randomising the frequency563
8.3.7. ROSC divider563
8.3.8. Random number generator564
8.3.9. ROSC counter564
8.3.10. DORMANT mode564
8.3.11. List of registers565
8.4. Low Power oscillator (LPOSC)569
8.4.1. Frequency accuracy and calibration569
8.4.2. Using an external low-power clock570
8.4.3. List of registers570
8.5. Tick generators570
8.5.1. Overview570
8.5.2. List of registers571
8.6. PLL575
8.6.1. Overview575
8.6.2. Changes from RP2040575
8.6.3. Calculating PLL parameters576
8.6.4. Configuration580
8.6.5. List of Registers583
9. GPIO587
9.1. Overview587
9.2. Changes from RP2040588
9.3. Reset state588
9.4. Function select589
9.5. Interrupts594
9.6. Pads595
9.6.1. Bus keeper mode596
9.7. Pad isolation latches596
9.8. Processor GPIO controls (SIO)597
9.9. GPIO coprocessor port597
9.10. Software examples598
9.10.1. Select an IO function598
9.10.2. Enable a GPIO interrupt603
9.11. List of registers604
9.11.1. IO - User Bank604
9.11.2. IO - QSPI Bank760
9.11.3. Pad Control - User Bank785
9.11.4. Pad Control - QSPI Bank812
10. Security816
10.1. Overview (Arm)816
10.1.1. Secure boot816
10.1.2. Encrypted boot817
10.1.3. Isolating trusted and untrusted software818
10.2. Processor security features (Arm)819
10.2.1. Background819
10.2.2. IDAU address map820
10.3. Overview (RISC-V)821
10.4. Processor security features (RISC-V)821
10.5. Secure boot enable procedure822
10.6. Access control822
10.6.1. GPIO access control823
10.6.2. Bus access control824
10.6.3. List of registers826
10.7. DMA867
10.7.1. Channel security attributes868
10.7.2. Memory protection unit868
10.7.3. DREQ attributes868
10.7.4. IRQ attributes868
10.8. OTP869
10.9. Glitch detector869
10.9.1. Theory of operation870
10.9.2. Trigger response870
10.9.3. List of registers871
10.10. Factory test JTAG874
10.11. Decommissioning874
11. PIO876
11.1. Overview876
11.1.1. Changes from RP2040877
11.2. Programmer's model878
11.2.1. PIO programs879
11.2.2. Control flow879
11.2.3. Registers881
11.2.4. Autopull881
11.2.5. Stalling884
11.2.6. Pin mapping884
11.2.7. IRQ flags884
11.2.8. Interactions between state machines885
11.3. PIO assembler (pioasm)885
11.3.1. Directives885
11.3.2. Values887
11.3.3. Expressions887
11.3.4. Comments888
11.3.5. Labels888
11.3.6. Instructions888
11.3.7. Pseudo-instructions889
11.4. Instruction Set889
11.4.1. Summary889
11.4.2. JMP890
11.4.3. WAIT891
11.4.4. IN892
11.4.5. OUT893
11.4.6. PUSH894
11.4.7. PULL895
11.4.8. MOV (to RX)896
11.4.9. MOV (from RX)897
11.4.10. MOV898
11.4.11. IRQ900
11.4.12. SET901
11.5. Functional details902
11.5.1. Side-set902
11.5.2. Program wrapping903
11.5.3. FIFO joining905
11.5.4. Autopush and Autopull906
11.5.5. Clock Dividers911
11.5.6. GPIO mapping911
11.5.7. Forced and EXEC'd instructions913
11.6. Examples915
11.6.1. Duplex SPI915
11.6.2. WS2812 LEDs919
11.6.3. UART TX921
11.6.4. UART RX923
11.6.5. Manchester serial TX and RX926
11.6.6. Differential Manchester (BMC) TX and RX929
11.6.7. I2C932
11.6.8. PWM936
11.6.9. Addition938
11.6.10. Further examples939
11.7. List of registers939
12. Peripherals961
12.1. UART961
12.1.1. Overview961
12.1.2. Functional description962
12.1.3. Operation964
12.1.4. UART hardware flow control966
12.1.5. UART DMA interface967
12.1.6. Interrupts969
12.1.7. Programmer's model970
12.1.8. List of registers972
12.2. I2C983
12.2.1. Features984
12.2.2. IP configuration984
12.2.3. I2C overview985
12.2.4. I2C terminology987
12.2.5. I2C behaviour988
12.2.6. I2C protocols989
12.2.7. TX FIFO Management and START, STOP and RESTART Generation993
12.2.8. Multiple master arbitration995
12.2.9. Clock synchronisation995
12.2.10. Operation modes996
12.2.11. Spike suppression1001
12.2.12. Fast mode plus operation1002
12.2.13. Bus clear feature1002
12.2.14. IC_CLK frequency configuration1003
12.2.15. DMA controller interface1007
12.2.16. Operation of interrupt registers1008
12.2.17. List of registers1008
12.3. SPI1046
12.3.1. Changes from RP20401047
12.3.2. Overview1047
12.3.3. Functional description1047
12.3.4. Operation1050
12.3.5. List of registers1060
12.4. ADC and Temperature Sensor1066
12.4.1. Changes from RP20401068
12.4.2. ADC controller1069
12.4.3. SAR ADC1069
12.4.4. ADC ENOB1073
12.4.5. INL and DNL1073
12.4.6. Temperature sensor1073
12.4.7. List of registers1073
12.5. PWM1076
12.5.1. Overview1077
12.5.2. Programmer's model1077
12.5.3. List of registers1086
12.6. DMA1094
12.6.1. Changes from RP20401095
12.6.2. Configuring channels1096
12.6.3. Triggering channels1098
12.6.4. Data request (DREQ)1100
12.6.5. Interrupts1102
12.6.6. Security1102
12.6.7. Bus error handling1105
12.6.8. Additional features1107
12.6.9. Example use cases1108
12.6.10. List of Registers1112
12.7. USB1141
12.7.1. Overview1141
12.7.2. Changes from RP20401142
12.7.3. Architecture1144
12.7.4. Programmer's model1155
12.7.5. List of registers1159
12.8. System timers1182
12.8.1. Overview1182
12.8.2. Counter1183
12.8.3. Alarms1183
12.8.4. Programmer's model1184
12.8.5. List of registers1188
12.9. Watchdog1193
12.9.1. Overview1193
12.9.2. Changes from RP20401193
12.9.3. Watchdog counter1193
12.9.4. Control watchdog reset levels1194
12.9.5. Scratch registers1194
12.9.6. Programmer's model1194
12.9.7. List of registers1196
12.10. Always-on timer1197
12.10.1. Overview1197
12.10.2. Changes from RP20401198
12.10.3. Accessing the AON Timer1198
12.10.4. Using the alarm1198
12.10.5. Selecting the AON Timer tick source1199
12.10.6. Synchronising the AON timer to an external 1Hz clock1201
12.10.7. Using an external clock or tick from GPIO1201
12.10.8. Using a tick faster than 1ms1201
12.10.9. List of registers1202
12.11. HSTX1202
12.11.1. Data FIFO1203
12.11.2. Output shift register1203
12.11.3. Bit crossbar1204
12.11.4. Clock generator1205
12.11.5. Command expander1206
12.11.6. PIO-to-HSTX coupled mode1208
12.11.7. List of control registers1208
12.11.8. List of FIFO registers1212
12.12. TRNG1212
12.12.1. Overview1212
12.12.2. Configuration1213
12.12.3. Operation1213
12.12.4. Caveats1214
12.12.5. List of registers1215
12.13. SHA-256 accelerator1221
12.13.1. Message padding1222
12.13.2. Throughput1222
12.13.3. Data size and endianness1222
12.13.4. DMA DREQ interface1222
12.13.5. List of registers1223
12.14. QSPI memory interface (QMI)1226
12.14.1. Overview1226
12.14.2. QSPI transfers1228
12.14.3. Timing1231
12.14.4. Address translation1234
12.14.5. Direct mode1235
12.14.6. List of registers1236
12.15. System Control Registers1249
12.15.1. SYSINFO1249
12.15.2. SYSCFG1251
12.15.3. TBMAN1254
12.15.4. BUSCTRL1255
13. OTP1268
13.1. OTP address map1268
13.1.1. Guarded reads1269
13.2. Background: OTP IP details1269
13.3. Background: OTP hardware architecture1270
13.3.1. Lock shim1270
13.3.2. External interfaces1271
13.3.3. OTP boot oscillator1272
13.3.4. Power-up state machine1272
13.4. Critical flags1273
13.5. Page locks1274
13.5.1. Lock progression1274
13.5.2. OTP access keys1275
13.5.3. Lock encoding in OTP1276
13.5.4. Special pages1276
13.5.5. Permissions of blank devices1276
13.6. Error Correction Code (ECC)1277
13.6.1. Bit repair by polarity (BRP)1277
13.6.2. Modified Hamming ECC1278
13.7. Device decommissioning (RMA)1279
13.8. Imaging Vulnerability1279
13.8.1. Best Practices1279
13.8.2. Chaff1280
13.9. List of registers1280
13.10. Predefined OTP data locations1292
14. Electrical and mechanical1327
14.1. QFN-60 package1327
14.1.1. Thermal characteristics1328
14.1.2. Recommended PCB footprint1328
14.2. QFN-80 package1328
14.2.1. Thermal characteristics1329
14.2.2. Recommended PCB footprint1329
14.3. Flash in package1330
14.4. Package markings1331
14.5. Storage conditions1331
14.6. Solder profile1331
14.7. Compliance1333
14.8. Pinout1333
14.8.1. Pin locations1333
14.8.2. Pin definitions1335
14.9. Electrical specifications1338
14.9.1. Absolute maximum ratings1338
14.9.2. ESD performance1339
14.9.3. Thermal performance1339
14.9.4. IO electrical characteristics1339
14.9.5. Power supplies1343
14.9.6. Core voltage regulator1344
14.9.7. Power consumption1345
Appendix A: Register field types1349
Changes from RP20401349
Standard types1349
RW:1349
RO:1349
WO:1349
Clear types1349
SC:1349
WC:1349
FIFO types1350
RWF:1350
RF:1350
WF:1350
Appendix B: Units used in this document1351
Memory and storage capacity1351
Transfer Rate1351
Physical Quantities1351
Scale Prefixes1353
Digit Separators1353
Appendix C: Hardware revision history1354
RP2350 A21354
RP2350 A31354
Hardware changes1354
Bootrom changes1355
RP2350 A41355
Hardware Changes1355
Bootrom Changes1356
Appendix E: Errata1357
ACCESSCTRL1357
RP2350-E31357
Bootrom1357
RP2350-E101357
RP2350-E131358
RP2350-E141358
RP2350-E151359
RP2350-E181359
RP2350-E191360
RP2350-E201360
RP2350-E211361
RP2350-E221362
RP2350-E231362
RP2350-E241362
RP2350-E251363
Bus Fabric1363
RP2350-E271363
DMA1364
RP2350-E51364
RP2350-E81365
GPIO1365
RP2350-E91366
Hazard31368
RP2350-E41368
RP2350-E61369
RP2350-E71369

OTP ..... 1370

RP2350-E16 ..... 1370

RP2350-E17 ..... 1371

RP2350-E28 ..... 1371

RCP ..... 1372

RP2350-E26 ..... 1372

SIO ..... 1373

RP2350-E1 ..... 1373

RP2350-E2 ..... 1373

XIP ..... 1374

RP2350-E11 ..... 1374

USB ..... 1375

RP2350-E12 ..... 1375

Appendix H: Documentation release history ..... 1377

29 July 2025 ..... 1377

20 February 2025 ..... 1377

04 December 2024 ..... 1377

16 October 2024 ..... 1377

15 October 2024 ..... 1377

6 September 2024 ..... 1377

8 August 2024 ..... 1378

Chapters