Symptom: SPI flash read returns shifted/garbage data. Same flash chip works with external debugger.
Verify CPOL/CPHA match device datasheet.
Scope CS timing: setup before first clock, hold after last clock.
Check MSB/LSB first setting.
Compare clock speed — too fast for board routing?
If MISO floats while no target is selected, check whether the board/controller requires a defined idle bias; do not add a pull-up without the electrical contract.
Changing clock speed without checking CPOL/CPHA.
CS deassert one cycle too early relative to device hold time.
Assuming Mode 0 without checking device datasheet.