blob: 79c1d1d336e89e051449416ff32c140536c3ea9e [file] [log] [blame]
This is a KiCad project allowing to control an Apple M1/M2. It started
its life as "m1-ubmc", but its real name is "Central Scrutinizer".
Basically a FUSB302, a couple of level shifters and a RPi Pico. The
project has the component references for JLCPCB except for the Pico,
and is (at the time of writing), pretty cheap to build. Gives you
serial, reboot control and USB passthrough over a micro-USB connector.
Someone who knows what they are doing could surely do much better. It
works well enough for me.
Each produced revision corresponds to a tag:
- v0: First produced version. Ignore it, it's a dud.
- v1: It's alive! Works as well as expected.
- v2: Supports SBU pin swapping. Fully functionnal, but only a
stepping stone towards v3.
- v3: Supports USB2.0 lines being routed as serial lines, meaning you
can use cheap USB-C cables as long as you don't need USB2.0
pass-through. Also comes with UART1 pins routed out, which could be
used as non-USB control channel (old fashioned console server, for
example).
Be careful though, the USB switches used here are so small that
JLCPCB couldn't properly solder them, resulting in an embarrassing
80% defect rate... You've been warned.
- v3.1: Exactly the same as v3, only with switches that are physically
larger, meaning the assembly is much easier.
- v3.2: Limited improvements on v3.1:
* a 1.2v LDO as the supply for the level shifters (instead of the
simplistic voltage divider),
* Molex connectors instead of the LCSC-supplied connectors that are
hard to source anywhere else,
* Nexperia's 74AVC1T45 instead of Diode's, for smaller footprint and
lower minimal voltage
* ... and a new silkscreen, which makes everything better!
Anything else is probably even worse than the above.
* Building your own:
This is the preferred option, really. I've used JLCPCB for all the
revisions above, both good and bad. If you're not good at soldering
very small stuff, get them to do the heavy lifting. The process is
very straightforward, but you will have to produce at least 5
boards. Find some fellow hackers and share the costs!
Of course, JLCPCB isn't the only game in town. If you know of a decent
PCB+assembly shop and can help with making the PCB easy to get
produced, let me know.
* Final assembly:
If you managed to get your hands on a bare CS board and not a fully
assembled device, you must first solder a Pico to it. Make sure that:
- the two boards are back to back (components are outside of the
board sandwich).
- the two micro-USB connectors on the same end of the assembly -- if
you have the USB-C and Pico micro-USB close to each other, you're
doing it wrong.
- the two boards are far apart enough that the two micro-USB
connectors can be plugged without interfering with one another.
- you use a bog standard RPi Pico. Not a Pico W, not a one of the
many variants with a creative pinout... It may work, it may
not. Be cheap, don't use anything fancy.
* Dual board configuration:
So you have a pair of Apple machines, two CS boards, but only a single
Pico? Guess what, that's everything you need. Each CS board can use
two different configurations that can work together:
- the default configuration is to use UART0, I2C0, and a defined set
of GPIOs,
- and there is an alternate setup using UART1, I2C1, and another set
of GPIOs.
v0 and v1 use a set of 0R resistors that need to be painfully moved
(see the schematics to identify the resistors and their landing spot).
v2+ use a set of PCB jumpers that are easier to modify: for each of
JP1 to JP8, cut the trace between pads 1 and 2, and place a blob of
solder across pads 2 and 3.
To assemble the whole thing, I use long wrapping connectors that allow
all three boards (one Pico and 2 CS) to be stacked. The SW will
automatically detect which board is present and use the right
configuration.
* Software:
For the SW that runs on the RPi Pico and how to use the damn thing,
head to
https://git.kernel.org/pub/scm/linux/kernel/git/maz/cs-sw.git