According to the SPI lib reference the usage of SPI.beginTransaction() and SPI.endTransaction() allows to restrict SPI access to a specific device. It seems like the SD lib uses SPI.endTransaction() after init and as part of erase methods only.
Freeing the SPI resource after usage for classes Sd2Card and SdVolume is missing as well. Would it make sense to check if the SD lib frees the SPI resource after usage (e.g. writing, reading, etc.) properly?
I can confirm that the SD card on the shared SPI bus creates a problem and failed to access the card after a while.
For this reason, I had to port to SDFat library and voila, it was a big relief.
According to the SPI lib reference the usage of
SPI.beginTransaction()
andSPI.endTransaction()
allows to restrict SPI access to a specific device. It seems like the SD lib usesSPI.endTransaction()
after init and as part of erase methods only.Sd2Card::init
: https://github.com/arduino-libraries/SD/blob/85dbcca432d1b658d0d848f5f7ba0a9e811afc04/src/utility/Sd2Card.cpp#L296Sd2Card::chipSelectHigh
: https://github.com/arduino-libraries/SD/blob/85dbcca432d1b658d0d848f5f7ba0a9e811afc04/src/utility/Sd2Card.cpp#L182uint8_t Sd2Card::erase(uint32_t firstBlock, uint32_t lastBlock)
: https://github.com/arduino-libraries/SD/blob/85dbcca432d1b658d0d848f5f7ba0a9e811afc04/src/utility/Sd2Card.cpp#L229Freeing the SPI resource after usage for classes
Sd2Card
andSdVolume
is missing as well. Would it make sense to check if the SD lib frees the SPI resource after usage (e.g. writing, reading, etc.) properly?