El dispositivo a poner entre se llama árbitro. El árbitro puede trabajar usando varios algoritmos:
- quién viene 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 se entreguen a tiempo , y que no haya conflictos entre los maestros y el software / firmware de ambos estén al tanto de los ciclos de espera.
Editar: lo estaba implementando en FPGA, y es posible crear una instancia de hardware lógicamente independiente allí. En su caso, puede conectar los pines juntos solo en el caso de que garantice que solo un conjunto estará activo a la vez, otro conjunto será de alta impedancia. El diseño también puede requerir pull-ups / downs (no debería ser un problema) para asegurar que no haya hi-z si no hay ningún dispositivo activo. Sin embargo, si uno de los maestros se bloquea, debería haber una manera para que otro maestro lo detecte, y poder restablecer el maestro bloqueado. Esta no es una tarea trivial. P.ej. ambos maestros deberían poder escribir en los cables de salida y también leerlos para ver qué está pasando allí, y tener implementado un controlador de vigilancia que indique la condición de bloqueo. Además, puede haber alguna interconexión separada entre maestros que indique su estado en relación con la operación del bus SPI.
Recomiendo considerar otra pieza de hardware que lo hará. Será un costo e incluso un riesgo en términos de confiabilidad (más componentes - > menos confiabilidad), pero si todos los dispositivos se pueden configurar, podrá actualizar su firmware para resolver errores lógicos (y no podrá hacerlo). para resolver errores "físicos", ya que requerirá cambios de hardware en el campo que son muy costosos).