spi: Split SPI bus state from SPI chip selects
authorPhilip Withnall <philip@tecnocode.co.uk>
Sun, 9 Dec 2012 12:31:02 +0000 (12:31 +0000)
committerPhilip Withnall <philip@tecnocode.co.uk>
Sun, 9 Dec 2012 12:31:02 +0000 (12:31 +0000)
commit4439556dcf460b2771beb38a6e9528d1d22843f0
tree6153251665a76bef652cfcaa93d8347f4c5872eb
parent0894ed7f7a97288102ee2eedf3c3382d65c0aefa
spi: Split SPI bus state from SPI chip selects

It turns out that the FatFs MMC/SPI code wasn’t enabling the SPI bus in
CS_LOW(), so when the bus was disabled by spi_disable() at the end of some
flash-rom.c code, the FatFs code would stall and go into an infinite loop
in rcvr_spi() because the bus wasn’t enabled.

Enabling the bus in CS_LOW() doesn’t work for some reason (possibly a timing
issue, or perhaps a bug in simavr — I haven’t tried it with actual hardware).

The tidiest solution is to split the SPI bus enabled/disabled state from the
state of any of the chip selects, so that the bus is only disabled at the
end of a large transaction, potentially involving multiple slaves.
flash-rom.c
main.c
spi.c
spi.h