Tengo un RaspberryPi que actúa como maestro para un esclavo Atmel ATTiny861A sobre i2c, que envía continuamente un comando más 3 bytes de datos para encender un LED RGB. Esto funciona perfectamente, pero SOLO si el programador AVR está conectado (comparte los mismos pines que estoy usando para i2c) O si mi analizador Saleae Logic está conectado a SDA y SCL. Si ninguno de ellos está conectado, el código Python que se ejecuta en RaspberryPi informa de un "Error de entrada / salida" aproximadamente cada 50 a 100 comandos y, finalmente, la línea se bloqueará; el esclavo mantiene un SDA bajo y no lo soltará.
Mi pregunta es, ¿qué tiene de especial el programador o las sondas que permiten que esto funcione? ¿Qué debo cambiar para permitir el funcionamiento normal cuando no están conectados?
No sé qué condiciones llevan al código Python a dar el error (es difícil detectar el analizador con el flujo constante de datos), pero supongo que el esclavo simplemente no responde con un ACK cuando debería.
Detalles adicionales; Estoy ejecutando aproximadamente 5 pies de cable plano desde el RaspberryPi al esclavo (no puede estar más cerca). El RPi i2c funciona a 3.3 V, por lo que hay un cambiador de nivel / repetidor ( enlace ) que yo conectar a. El lado de salida Vcc es 5V. Además, en la salida del TCA9509, tengo resistencias pullup de 5k en las líneas SDA y SCL. La distancia entre el TCA9509 y el ATTiny861 es de aproximadamente 2 pulgadas.
Si es útil, este es el código que se ejecuta en el ATTiny861A:
Utiliza el código del controlador USI TWI Slave de Donald Blake, modificado para eliminar las definiciones relacionadas con dispositivos que no son ATTiny861.