Comunicación RPI-arduino sin UART

Estoy trabajando en un proyecto en el que una raspberry pi zero será el controlador principal. El pi tiene que recibir información de un módulo GPS (gy-gps6mv2) sobre UART. El mismo pi controlará (recibirá y transmitirá) un Atmega328 desnudo (llamémoslo Arduino).

Me gustaría mantenerme alejado de USB. El proyecto tiene que ser compacto. Esto significa que solo tengo un puerto serie en GPIO del pi. He considerado softwareserial en Arduino, pasando la información al pi, pero Arduino ya está haciendo mucho trabajo y softwareserial no es lo suficientemente confiable. Bitbanging pines GPIO en el pi para establecer una serie tampoco parece una opción sorprendente. Esto significa que tendré que encontrar otra forma de comunicarme con el Arduino.

Sé que tanto el pi como el Arduino tienen I2C y SPI, pero sorprendentemente parece haber poca información sobre la comunicación pi-arduino sobre cualquiera de estos 2 protocolos. El Arduino ya está configurado como maestro I2C, comunicación con un sensor barométrico (esclavo), así que supongo (?) SPI es la única opción que queda.

¿Cuál sería la mejor manera de establecer esta comunicación? ¿Hay otras formas de lograr esto? ¿Alguien tiene alguna experiencia con esto?

EDITAR

Como algunos han señalado, debería haber proporcionado más información.

La comunicación del gps al pi ocurre a una tasa de baudios de 9600. El pi no envía nada al gps. La comunicación bidireccional pi-Arduino también debe ser de al menos 9600. Hay un flujo de datos constante entre pi y Arduino, lo que hace que MUX no sea factible. Según tengo entendido, esto también significa que hacer que el pi sea un esclavo I2C del Arduino no es realmente una opción porque se necesita I2C para la comunicación barómetro-Arduino (sin embargo, I2C es nuevo para mí, mis suposiciones pueden no ser correctas) . No he probado bitbanging/softwareserial, pero según lo que estoy leyendo en línea, esto requiere mucha potencia de procesamiento y las pérdidas llegan hasta el 10%.

¿Cuántos datos? ¿Qué es la tarifa de datos? ¿Qué dispositivo debe controlar la comunicación? ¿Por qué el software en serie no es "lo suficientemente confiable" para usted? ¿Qué significa para ti "una opción increíble"? No ha proporcionado suficiente información para darle una buena respuesta.

Respuestas (2)

¿Cuál es la velocidad de datos a la que Pi (necesita) habla con Arduino?

¿Cuál es el tamaño de los datos?

¿Cuál es el intervalo de datos?

¿Pi puede ser interrumpido por GPIO y actuar como un esclavo?

O señale a Arduino para cambiar al modo esclavo I2C.

Solución 1:

también puede usar 2:1 Mux (interruptores analógicos) para multiplexar líneas UART entre dos dispositivos, por ejemplo...
cuando Pi usa UART para el módulo GPS, las dos líneas UART de Pi se conectan al módulo GPS. Cuando no hay datos para recibir Las mismas líneas UART se pueden conectar a Arduino. Para esto, se necesita un IC adicional y un GPIO de Pi.

Solución 2:
Arduino puede controlar tanto Pi como el sensor. Pi se puede configurar para actuar como esclavo. Pi puede interrumpir a Arduino a través de GPIO siempre que Pi tenga algo que comunicar.

Su pregunta carece de mucha información útil.

De todos modos, una respuesta fácil a este problema sería usar la biblioteca SoftwareSerial en el ATmega. Conecte un puerto serie (ya sea el hardware o el software) al sensor y el otro al Pi.

El OP dijo que han considerado y descartado el software en serie.
@ElliotAlderson tienes razón. Lo siento