M0: the strobe on every power edge

/ UniDisk 3.5 controller / updated 2026-10-10 m0 rp2350 8t245 bring-up oscilloscope

The bench rig is up. A Pico 2 talks to the Sony 800K mechanism out of one of the dead-board drives through two SN74LVC8T245 boards. The scaffold firmware is flashed and answers on USB. A reset over SWD leaves the mechanism lines alone. Pulling the Pico’s USB with the mechanism powered does not: the shifter drives LSTRB to 5 V for about 1.5 ms. The mechanism shrugs it off because /ENBL never goes low, but that margin is thinner than I’d like.

The M0 rig. A dead UniDisk's mechanism on the left, ribbon into the breadboard with the Pico 2 and two 8T245 boards, bench supply leads coming in from the shelf.
The M0 rig. A dead UniDisk’s mechanism on the left, ribbon into the breadboard with the Pico 2 and two 8T245 boards, bench supply leads coming in from the shelf.

LSTRB fires when the Pico loses power

I’d assumed the 8T245’s /OE pin plus a 10k pull-up would keep the mechanism side quiet through anything the Pico does. That holds for a reset, where 3V3 stays up. It doesn’t hold while 3V3 itself is ramping.

When I unplugged USB, the Pico’s 3V3 fell to about 1.3 V in 3 ms and then sagged. Around 0.8 V the shifter woke up and drove LSTRB and CA1 to a full 5 V for about 1.5 ms. Plugging back in did the same thing for about 1.3 us as 3V3 came up through roughly 1 V.

Pico USB unplugged with the mechanism powered, 5 ms/div. Yellow: U2 /OE (Pico 3V3). Magenta: LSTRB, driven to 5 V for about 1.5 ms. Cyan: /ENBL, dips to 3.64 V and stays high.
Pico USB unplugged with the mechanism powered, 5 ms/div. Yellow: U2 /OE (Pico 3V3). Magenta: LSTRB, driven to 5 V for about 1.5 ms. Cyan: /ENBL, dips to 3.64 V and stays high.
Pico USB plugged back in, 2 us/div. LSTRB goes to 5 V for about 1.3 us as 3V3 passes about 1 V, then decays through the 10k pull-down. /ENBL stays high.
Pico USB plugged back in, 2 us/div. LSTRB goes to 5 V for about 1.3 us as 3V3 passes about 1 V, then decays through the 10k pull-down. /ENBL stays high.

If you’re using an 8T245 with one rail already up, the outputs aren’t guaranteed Hi-Z while the other rail is between 0 V and its 1.65 V minimum. /OE doesn’t help there. The isolation in the datasheet is for a supply sitting at 0 V.

LSTRB is the line the mechanism latches commands on, so a stray rising edge could step the head or eject the disk. It didn’t, because commands only count while /ENBL is low, and /ENBL has its own 10k to +5V. On the unplug it dipped to 3.64 V. That’s fine for a TTL input and only just over 3.5 V if the CX23077A has CMOS inputs, which I don’t know.

EventLSTRB/ENBL minMechanism
SWD reset (x3)quiet5 Vsilent
USB unplug (x2)5 V for ~1.5 ms3.64 Vsilent
USB replug5 V for ~1.3 us4.76 Vsilent

For now the bench rule is mechanism supply off before I touch the Pico’s USB. On the real board 3V3 comes off the host’s +5V, so the two rails fall together and this mostly goes away. I still want a 3V3 supervisor holding the shifters off before this turns into a PCB.

Reset is clean

The plan’s actual M0 test passed. With the mechanism powered, I armed the scope on a falling edge of the shifter /OE, then a rising edge on LSTRB, then on CA1, with one make reset each. None of them triggered, and the Pico’s USB port re-enumerated every time, so the resets really happened. /OE sat at 3.21 V with about 400 mV of noise on it.

Wiring and power came up first try

I beeped out the 20-pin mechanism header before powering anything: pin 1 to GND, pin 8 to the LSTRB test point, pin 11 to 5VF. No shorts between rails. Pin 16 (RD) read 3.3k to +5V instead of 10k, which is my 10k in parallel with about 4.9k that lives on the mechanism.

With the Pico unplugged and the mechanism powered on its own:

RailLimitIdle currentAt the connector
+5V1.0 A0.01 A4.90 V
+12V1.5 A0.00 A11.94 V
Mechanism powered with the Pico unplugged: 12.00 V at 0.00 A and 5.00 V at 0.01 A.
Mechanism powered with the Pico unplugged: 12.00 V at 0.00 A and 5.00 V at 0.01 A.

The supply says 5.00 V and the connector says 4.90 V, so 0.1 V goes missing in the leads and breadboard at only 10 mA. I want to know where before the motor starts pulling real current.

The firmware flashed over SWD on the first go with Raspberry Pi’s OpenOCD and a Debug Probe, and the console prints OK a2m_bringup (scaffold).

Still open