Rise time for 2 MHz SPI clock signal driven by an Arduino Micro
Some MPU output drivers have controlled-slew-rates that are set by configuration bits.

ICs can easily produce 100 picosecond edges. But 100pS and 100 picoFarad loads will produce, given 5 volt edges, using Iout = C * dV/dT, I = 100pF * 5v/100pS = 5 ampere currents. Thus controlled slew is required to avoid collapsing the MCU rails and upsetting the internal state (flipflops getting trashed).

Thus 1/100th of that, or 50 milliAmps, will be a typical maximum output current. That will produce 10 nanosecond edges into 100pF loads, or 1 nanosecond edge into 10pF loads.
Controlled-slew output drivers can reduce this Cload-dependent behavior to about 3:1 behavior over process and temperature and (moderate) CLoad values. Examine the USB waveform specifications, for how controlled a slewrate is possible; note the USB has maximum length limits and maximum # of nodes.

On an SPI, select  the slew-rate if possible, and use moderate capacitive loads. And then consider inserting 100 ohm resistors at the signal sources, for "source terminated" behavior. 

The minimum capacitance on a line, composed of the reversed-bias drain-bulk diodes and the ESD structures of the output, and similar ESD structures and FET gate-bulk (and Miller effect of gate-drain overlap capacitance), will be approximately 10pF.