The example code to work with SD cards is using automatic variables (uint8_t buffer;) for DMA buffers. Of course, when the stack is in the scratchpad memory, that can't work.
Since the example code is very likely to be used as a basis for other applications, you might want to consider either making the buffer global or at least putting a big fat warning about the necessity to keep all DMA buffers out of automatic variables. I can also recommend adding a runtime assertion to ensure the address passed is in the right range.
It's likely that other drivers might suffer from similar problems so a more thorough investigation might be necessary.