Estoy intentando conectar un PIC18F4520 a un 25LC640 a través del protocolo SPI. Estoy usando el hardware MSSP integrado del PIC. El PIC18F4520 es el único maestro en el bus. Estoy leyendo 16 bytes de datos de la EEPROM 32 veces por segundo. He comprobado dos veces los siguientes elementos:
Revisé las señales en un osciloscopio y todo se ve bien. Intenté usar un BusBee para registrar los datos provenientes de la EEPROM y el 99% de las veces es correcto. De vez en cuando hay una serie de solicitudes en las que la línea MOSI (SDO) no parece contener la instrucción de lectura EEPROM correcta, lo que hace que los datos registrados en el micro no sean válidos. Esto sucede a pesar de que estoy escribiendo la misma instrucción de lectura en el SSPBUF cada vez. ¿Qué más puede salir mal con un bus SPI?
En el pasado, noté que algunas de las hojas de datos de PIC no muestran correctamente los registros SPI CPOL y CPHA, hubo algunos problemas que al mirar la salida en un osciloscopio, dos de las cuatro combinaciones estaban al revés de lo que se esperaba. . Así que verifique que esté obteniendo la forma de onda esperada de su PIC y que la forma de onda coincida con lo que se necesita en la EEPROM.
También me encontré con algunos convertidores A/D que funcionaban de manera intermitente cuando tenía una configuración SPI incorrecta en un HC12, lo que me llevó a tratar de resolverlo, fue uno de mis primeros proyectos como ingeniero profesional, finalmente lo resolví. Pero yo divago. Por lo tanto, es posible tener problemas intermitentes al usar el bus SPI debido a una configuración incorrecta de CPOL/CPHA. Como es un registro de desplazamiento después de todo, y el último bit de un carácter puede leerse del primero del siguiente carácter. Es posible que este tipo de problema tampoco se note de inmediato.
Así que asegúrese de tener la configuración correcta en un osciloscopio y no confíe solo en configurar los registros del PIC.
Si tiene un esquema, publíquelo, también cualquier información sobre cómo está tratando las líneas de señal. A 1Mhz, los efectos de la línea de transmisión pueden entrar en juego, mencionó que analizó la señal y todo se veía bien, pero ¿verificó los tiempos de subida/bajada, los reflejos y el timbre? ¿Su línea de señal está terminada y controlada por impedancia? ¿Cuánto tiempo son?
Otras cosas aleatorias que podrían ser:
Tuve errores intermitentes similares y descubrí que era un error en el código. No tenía que ver con SPI, pero de vez en cuando el chip se reiniciaba y esto provocaba que se escribiera basura en la memoria del chip; asegúrese de que su código sea estable. Una forma de hacer esto sería reiniciar para que presione un botón para que no se reinicie automáticamente.
kevin vermeer
mjh2007