El dispositivo para colocar en medio se llama árbitro. El árbitro puede funcionar utilizando varios algoritmos:
- quien llega primero (maestro #1 o maestro #2)
- round robin
- configuración de prioridad (por ejemplo, #1 tiene mayor prioridad)
- cualquier otro adecuado a sus necesidades.
Debe considerar la prioridad de la solicitud, asegurarse de que ambos maestros sean atendidos a tiempo, y que no haya conflictos entre los maestros y que el software/firmware de ambos esté al tanto de los ciclos de espera.
Editar: Lo estaba implementando en FPGA, y es posible instanciar hardware lógicamente separado allí. En su caso puede conectar pines solo en caso de que garantice que solo un conjunto estará activo a la vez, y otro conjunto estará en alta impedancia. El diseño también puede requerir pull-ups/downs (no debería ser un problema) para asegurar que no haya alta impedancia si ningún dispositivo está activo. Sin embargo, si uno de los maestros se bloquea, debe haber una forma para que otro maestro lo detecte y pueda reiniciar el maestro bloqueado. Esta no es una tarea trivial. Por ejemplo, ambos maestros deberían poder escribir en los cables de salida, y también leerlos para ver qué está sucediendo allí, y tener implementados watchdogs/timers que indiquen la condición de bloqueo. Además, puede haber alguna interconexión separada entre los maestros que indique su estado en relación con su operación de bus SPI.
Recomiendo considerar otra pieza de hardware que lo haga. Será un costo e incluso probablemente un riesgo en términos de confiabilidad (más componentes -> menos confiabilidad), pero si todos los dispositivos son configurables, podrá actualizar su firmware para resolver errores lógicos (y no podrá resolver errores "físicos" ya que requerirá cambios de hardware en el campo que son mucho más costosos).