SPI.end() causes SPI.transfer() to hang even after a new SPI.begin()

I can confirm this. (The problem seems to be that SPI.end() calls SPI_Disable(), but SPI.begin doesn't call SPI_Enable() - it's called in the constructor.)

To fix this: open the file hardware/arduino/sam/libraries/SPI/SPI.cpp and at the beginning of the SPIClass::begin() method add the line
SPI_Enable(spi);
The method should now look like this:

void SPIClass::begin() {
        SPI_Enable(spi);
        // NPCS control is left to the user

        // Default speed set to 4Mhz
        setClockDivider(BOARD_SPI_DEFAULT_SS, 21);
        setDataMode(BOARD_SPI_DEFAULT_SS, SPI_MODE0);
        setBitOrder(BOARD_SPI_DEFAULT_SS, MSBFIRST);
}

I've added this issue to the Arduino github here: Due - SPI.end() causes SPI.transfer() to hang even after a new SPI.begin() · Issue #1406 · arduino/Arduino · GitHub