¿Compatibilidad con I2C en sistemas operativos no en tiempo real? ¿Como funciona? [cerrado]

0

Tengo mi RPI3 (maestro) conectado a una placa Arduino (esclavo) a través de I2C-bus . Funciona, excepto que después de 5 segundos de comunicación en ejecución a través de I2C ya recibo excepciones sobre 'Sin reconocimiento del esclavo'.

Como nunca entendí realmente cómo funciona I2C (como una especie de PWM ) en un sistema operativo no en tiempo real como Windows IoT, pensé que vamos a empezar allí. Descubre cómo esto funciona. Pero no puedo encontrar nada sobre ese tema. ¿Quién me puede compartir más información sobre cómo funciona esto realmente?

¿Cómo puede un sistema operativo en tiempo no real admitir el bus I2C? ¿Qué / Quién está generando la señal SCL? ¿Qué / quién está leyendo los bytes reales en SDA? No puede ser el propio Windows IoT, entonces, ¿quién se encarga de eso? ¿Por qué puedo leer bytes del bus I2C? ¿Quién los está guardando para mí? ¿Y cuánto tiempo están amortiguados?

Realmente espero que alguien que entienda todo esto esté dispuesto a explicarlo.

    
pregunta bas

2 respuestas

2

No tiene nada que ver con PWM. Hay soporte de hardware para ello en el chip. El sistema operativo no tiene que generar los cambios de nivel por sí mismo, habrá varias ubicaciones de memoria (a menudo llamadas registros, pero estos registros pertenecen al periférico y no deben confundirse con los registros del procesador). ) que lo controlan. El sistema operativo los carga previamente con los valores de velocidad y salida, luego se pone en marcha con otra cosa.

El periférico genera su propio tiempo, envía la señal de salida, lee una respuesta y la coloca en un búfer. Luego envía una interrupción al sistema operativo. El sistema operativo hace que esté disponible para los programas de usuario de alguna manera (en Win10, ¿será algún tipo de interfaz de ReadFile?).

Lo único que no sé es la profundidad del búfer en el hardware.

Puede que le resulte mucho más fácil hacer que las cosas funcionen con Linux en la Pi, ya que hay mucha más documentación y puede consultar la fuente C para los controladores OS I2C.

    
respondido por el pjc50
1

El reloj en I2C lo genera el maestro y puede ser arbitrariamente lento. Por lo tanto, se puede generar en software, incluso en un sistema operativo no en tiempo real.

Pero como Majenko comentó, el chip Pi tiene soporte para hardware I2C, por lo que asumo que el controlador de Linux usa esto y que el hardware genere el reloj.

    
respondido por el Wouter van Ooijen

Lea otras preguntas en las etiquetas