RF24 module and MFRC522 RFID reader : SPI bus contention ?

SO looks like the problem got solved in a specific case only. In another version where the Master is in Tx mode and requests data from the RFID reader unit in Tx mode the set up just does not work as long as the RFID reader is in connected - just unplug it and the RF link immediately becomes OK but to no avail as there is no RFID data to send !!

3.3V power supplies / different RFID readers / different RF24 modules ....all behave consistently and refuse to work together.

SO it ultimately looks like if I have a RFID reader and RF24 on the same SPI bus, the RF24 has to be only a Tx unit as otherwise it has to be listening always and we have a issue.

#include <SPI.h>
#include <RF24.h>
#include <MFRC522.h>

/****************** User Config ***************************/
/* Hardware configuration: Set up nRF24L01 radio on SPI bus plus pins CE, CSN */
RF24 radio(7, 8);
/**********************************************************/
/* RFID interface configuration apart from SPI bus */
#define RfidRst    9                                           // RFID reset pin
#define RfidSel    10                                         // RFID select pin
/*********************************************************/
const uint64_t   deviceID = 0xE8E8F0F0E2LL;

MFRC522 mfrc522(RfidSel, RfidRst);                           // Instantiate the reader MFRC522
struct rfid2main
{
  byte rfidTag[4];                                           // Data to Main
  bool newTag;
} rfidTagInfo;
byte resetRFID = 0;                                          // Data from Main

unsigned long rfStatusTimeOut = millis();
byte RF_OK_Out   = 3;

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void setup() {

  Serial.begin(9600);
  Serial.println(F("*** STARTING TRANSMITTER *** "));

  SPI.begin();

  mfrc522.PCD_Init();                                      // Initialize the  MFRC522 reader

  radio.begin();                                           // Setup and configure radio
  radio.setChannel(108);
  radio.setDataRate( RF24_250KBPS );                       // Minimum drop out with this setting
  radio.openReadingPipe(1, deviceID);
  radio.enableAckPayload();
  radio.writeAckPayload(1, &rfidTagInfo, sizeof(rfidTagInfo));
  radio.startListening();
  pinMode(RF_OK_Out, OUTPUT);
}

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$

void loop(void)
{
  getRFID();                                              // Read the RFID tag...
  respondToMain();                                        // RF comm with Main..

  //******************************************************

  if ( millis() - rfStatusTimeOut > 2000)                 // Handle the RF status LED.. but works only when the RFID interface is removed !!
  {
    digitalWrite( RF_OK_Out, LOW);
  }
  else
  {
    digitalWrite( RF_OK_Out, HIGH);
  }

}

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

// F U N C T I O N S

void respondToMain()                  // Function to send the RFID tag data when Master requests...
{
  if ( radio.available())
  {
    radio.read( &resetRFID, sizeof(resetRFID));                      // READ FROM MASTER.. this is just a token from master requesting data

    radio.writeAckPayload(1, &rfidTagInfo, sizeof(rfidTagInfo));     // SEND rfid tag data to master

    rfStatusTimeOut = millis();
  }
}

//**********************************************************

// FUNCTION TO READ RFID TAG AND CONVERT IT TO A BYTE ARRAY

int getRFID() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return 0;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return 0;
  }
  for (int i = 0; i < mfrc522.uid.size; i++) {
    rfidTagInfo.rfidTag[i] = mfrc522.uid.uidByte[i];
  }
  char scannedRFID[10];
  sprintf ( scannedRFID, "%02X%02X%02X%02X", rfidTagInfo.rfidTag[0], rfidTagInfo.rfidTag[1], rfidTagInfo.rfidTag[2], rfidTagInfo.rfidTag[3]);
  Serial.println(scannedRFID);
  mfrc522.PICC_HaltA();
  return 1;
}

//**********************************************************