Dadas tus opciones disponibles, parece que tienes tienes algunos pines disponibles:
- SPI es dúplex completo y requiere 1 reloj + 1 datos en cada dirección + 1 selección de chip opcional = 3 pines
- CAN es semidúplex y requiere 2 datos para comunicaciones bidireccionales = 2 pines
- El USB es half-duplex y requiere 2 datos para comunicaciones bidireccionales = 2 pines
- TTL Serial es lo que quieras, pero la mayoría de la gente usa un UART para ello, requiere 1 datos en cada dirección = 2 pines dúplex completo o 1 pin con algunos trucos
- UART es dúplex completo y requiere 1 datos por cada dirección = 2 pines o 1 pin con algún truco
- I2C es semidúplex y requiere 1 reloj + 1 datos = 2 pines
Por lo tanto, parece que el consenso es de 2 pines si desea comunicación bidireccional, o posiblemente 3 para SPI. Dado el mismo número de pines, apostaría por el UART si hubiera uno disponible en ambos chips. Suponiendo que se trata de una conexión 1: 1, solo puede intercambiar datos sin tener en cuenta el tiempo ni las colisiones, y el hardware es realmente sencillo.
En cuanto a la sobrecarga de la pila, hay muchos protocolos diferentes que pueden operar desde un UART, pero probablemente sea mejor en este caso definir el suyo. Desde la perspectiva de las comunicaciones, solo estás expulsando bytes y recibiéndolos en el otro extremo. El hardware se sincronizará automáticamente con cada byte, pero aún debe saber qué byte es qué. Tendrás ese problema independientemente de la opción que elijas.
Si eres listo con un UART (y estoy a punto de darte la respuesta), puedes conectar los dos pines TX junto con dos resistencias en serie, luego tienes un comparador en cada extremo que impulsa el pin RX basado en el TX local y la toma central de los dos resistores. Esto permite full-duplex en un cable. Vea a continuación un esquema.
Para ESD, agregue una resistencia en serie dentro de ambos casos para cada pin y coloque algunos diodos de sujeción en el lado exterior de la resistencia. Hay diodos especialmente diseñados para esto.
simular este circuito : esquema creado usando CircuitLab
- Las resistencias "bajas" son para proteger los diodos ESD. Las hojas de datos pueden o no afirmar que son innecesarias, pero las usaría de todos modos. Hazlos lo suficientemente grandes para hacer su trabajo; tienen que parecer un corto en comparación con las resistencias "altas".
- Las resistencias "altas" mezclan las dos señales de TX en el cable común.
- Los resistores de 10k y 5k deben tomar la señal de TX de rango de suministro completo y proporcionar el umbral apropiado para los comparadores.
- Si los dos dispositivos se alimentan de manera independiente, probablemente no debería tener la "Conexión opcional", dejándole con 2 cables en lugar de 3. No veo cómo puede comunicarse con menos pines que esto, a menos que vas de forma inalámbrica.
Así es como funciona:
- Si ambos TX son altos, la línea común será alta y ambos comparadores darán un alto.
- Si ambos TX son bajos, la línea común será baja y ambos comparadores darán un resultado bajo.
- Si un TX es alto y el otro bajo, la línea común será de rango medio y cada comparador tendrá un umbral diferente basado en su TX local. Por lo tanto, el que tenga un TX alto tendrá un umbral más alto que el común de rango medio y tendrá una salida baja, y el que tenga un TX bajo tendrá un umbral más bajo que el común de rango medio y tendrá una salida alta.
Por lo tanto, en todos los casos, la salida del comparador de recepción es igual al TX de envío.
Si no le gusta la complejidad del hardware dentro de la caja, puede usar un pin discreto para cada dirección y mantener solo las resistencias "alta" y "baja" y los diodos ESD, una copia por separado para cada pin.