main module#

JS3 Part 1 reference solution: an RP2040 drives an SPI data flash and an I2C accelerometer, with every bus pin left to pin assignment.

Parts and sources:

Legal pin choices: Table 279 gives 113 for one I2C bus (I2C0 8 x 8, I2C1 7 x 7), 400 for one SPI bus with chip select (SPI0 4 x 4 x 4 x 4, SPI1 4 x 4 x 3 x 3), and 34,000 for both at once with no GPIO shared.

Out of scope: power entry. 3V3 is a named net with no regulator.

FLASH_DECOUPLING = <Quantity(1e-07, 'farad')>#

C5, 100 nF on the flash VCC pin.

Type:

Hardware design with RP2040, Figure 7

I2C_PULLUP = <Quantity(10000.0, 'ohm')>#

Rpu = 10 kOhm on SCL and SDA to Vdd_IO.

Type:

LIS3DH datasheet Figure 5

class DataFlash[source]#

Bases: Circuit

A W25Q128JV on standard SPI, /WP and /HOLD held inactive.

spi = SPI(cs=True)#
power = Power()#
class McuMuxingCircuit[source]#

Bases: Circuit

RP2040 with an SPI flash and an I2C accelerometer; the RP2040 chooses the pins.

power = Power()#

3V3 supply for every part.

class McuMuxingDesign(*args, **kwargs)[source]#

Bases: Design

The shipping design: no placement, no routes, so the RP2040 keeps every legal pin choice open for whoever routes the board.

board: Board = HDIBoard()#
substrate: Substrate = HDISubstrate()#
circuit: Circuit = McuMuxingCircuit()#