You already know how to call spi_transceive() in Zephyr. But when the 100Hz bridge drops frames at 40MHz SPI, you need to know WHY — and the answer is in the analog world: signal integrity, impedance mismatches, capacitive loading on CS lines, or a slave DMA that arms too late. These notes build you up from electrons to frames.
┌──────────────────┐
│ 07-CAN Bus │ ← differential signaling,
│ (standalone) │ arbitration, error handling
└──────────────────┘
┌─────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ 01-Passive │────→│ 02-Semiconductors│────→│ 03-OpAmps/ADC/ │
│ Components │ │ Diodes, BJTs, │ │ Sampling Theory│
│ R, C, L │ │ MOSFETs │ │ │
└─────┬───────┘ └────────┬─────────┘ └──────────────────┘
│ │
│ ┌──────────────────┘
│ │ (MOSFETs unlock open-drain → unlocks I2C pull-ups)
│ │ (RC time constants unlock pull-up calculations)
│ │
▼ ▼
┌─────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ 04-UART │ │ 05-SPI │ │ 06-I2C │
│ Serial Deep │ │ Deep Dive │ │ Deep Dive │
│ Dive │ │ (YOUR BRIDGE) │ │ (sensor config) │
└─────────────┘ └──────────────────┘ └──────────────────┘
Reading order: 01 → 02 → 03 → then 04/05/06/07 in any order (though 02 before 06 is strongly recommended for open-drain).
| # | Topic | Est. Time | Prerequisites | What It Unlocks |
|---|---|---|---|---|
| 01 | Passive Components (R, C, L) | 3-4 hrs | Basic algebra | Pull-ups, decoupling, RC filters, voltage dividers, power dissipation, everything |
| 02 | Semiconductors (Diodes, BJTs, MOSFETs) | 3-4 hrs | 01 (Ohm’s law, RC) | Level shifting, open-drain, motor drivers, ESD protection, power switching |
| 03 | Op-Amps, ADC, Sampling Theory | 3-4 hrs | 01 + 02 | Signal conditioning, Nyquist, anti-aliasing, understanding IMU data paths |
| 04 | UART Serial Deep Dive | 2-3 hrs | 01 (basic) | Debug console, GPS modules, RS-485 industrial sensors, DMA patterns |
| 05 | SPI Deep Dive | 3-4 hrs | 01 + 02 (MOSFET) | Your 100Hz bridge, IMU reads, flash memory, display drivers |
| 06 | I2C Deep Dive | 3-4 hrs | 01 + 02 (MOSFET, open-drain) | EEPROM, temperature sensors, IO expanders, multi-sensor buses |
| 07 | CAN Bus Deep Dive | 2-3 hrs | 01 + 02 (differential) | Automotive comms, industrial sensors, robot actuator buses |
Total: ~20-26 hours of focused study
Read with a multimeter and a dev board at hand. Measure the voltage divider you designed — seeing 2.47V instead of 2.5V teaches you more than any textbook.
Use an oscilloscope or logic analyzer. A $15 Saleae clone lets you SEE SPI/I2C/UART waveforms. Match what you see to the ASCII diagrams in these notes.
Build the simplest possible circuit for each concept. An LED + resistor teaches Ohm’s law. A 10kΩ + 100nF RC filter with a function generator teaches time constants.
When you read a datasheet, start with page 1. The first page has: max voltage, max current, pin count, package, and the key parameter (bandwidth, slew rate, Rds_on, etc.). You can ignore 90% of the datasheet until you need it.
Everything is Ohm’s law. V=IR is the most powerful equation in electronics. If something isn’t working, measure V, measure I, calculate R — the mismatch tells you what’s wrong.
| Symbol | Unit | What It Measures | “Feel” for the Value |
|---|---|---|---|
| V | Volts | Electrical pressure | 3.3V = MCU logic, 5V = USB, 12V = motors, 120/240V = wall |
| A | Amps | Current flow | 10mA = LED, 500mA = USB, 2A = motor, 15A = circuit breaker |
| Ω | Ohms | Resistance | 100Ω = current limit, 10kΩ = pull-up, 1MΩ = high-Z input |
| F | Farads | Capacitance | 100pF = tiny, 100nF = decoupling, 10µF = bulk, 1000µF = power supply |
| H | Henrys | Inductance | 10µH = DC-DC, 100µH = filter, 1mH = relay coil |
| Hz | Hertz | Frequency | 100Hz = your bridge, 1kHz = audio, 1MHz = I2C fast, 40MHz = SPI |
| W | Watts | Power | 0.25W = resistor limit, 1W = small heatsink, 10W = needs cooling |