bus SPI intermitente

4

Estoy intentando conectar un PIC18F4520 a un 25LC640 a través del protocolo SPI. Estoy usando el hardware MSSP incorporado 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 verificado dos veces los siguientes elementos:

  1. Registros TRIS para SDI, SDO, SCK y CS
  2. Velocidad de transmisión ~ 1 Mhz
  3. Modo SPI 0,0

He comprobado las señales en un osciloscopio y todo se ve bien. He intentado 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 aunque estoy escribiendo la misma instrucción de lectura en la SSPBUF cada vez. ¿Qué más puede salir mal con un bus SPI?

    
pregunta mjh2007

3 respuestas

4

En el pasado, me he dado cuenta de que algunas de las hojas de datos PIC no muestran correctamente los registros SPI CPOL y CPHA. Hubo algunos problemas que, al mirar la salida en un alcance, dos de las cuatro combinaciones estaban al revés. Lo que se esperaba. Por lo tanto, vuelva a verificar que realmente está obteniendo la forma de onda esperada de su PIC y que la forma de onda coincide con lo que se necesita en la EEPROM.

También me he topado con algunos convertidores A / D que funcionaron de manera intermitente cuando tuve configuraciones SPI incorrectas en un HC12, me impulsaron a intentar solucionarlo, fue uno de mis primeros proyectos como ingeniero profesional, y finalmente lo trabajé afuera. Pero yo divago. Por lo tanto, es posible obtener problemas intermitentes al usar el bus SPI debido a que CPOL / CPHA no está configurado correctamente. Como se trata de un registro de desplazamiento después de todo, y el último bit de un carácter puede leerse del primero del siguiente carácter. Este tipo de problema tampoco puede notarse de inmediato.

Así que asegúrese de tener la configuración correcta en un alcance, y no haga retransmisión solo al configurar los registros del PIC.

    
respondido por el smashtastic
5

Si tiene un esquema, publíquelo, y también cualquier información sobre cómo trata las líneas de señal. En 1Mhz los efectos de la línea de transmisión pueden entrar en juego, usted mencionó que buscó 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 la impedancia controlada? ¿Cuánto tiempo son?

Otras cosas aleatorias podrían ser:

  • error en el código, cree un programa mínimo que no haga nada más que leer desde la EEPROM para probar
  • Verifique la configuración correcta de CS y los tiempos de espera antes de que comiencen las transferencias
  • ¿estás escribiendo a la EEPROM también? Si es así, ¿está revisando el registro de estado para asegurarse de que la escritura esté completa antes de intentar una lectura?
  • ¿Está utilizando el control de velocidad de respuesta en el MSSP? De cualquier manera, verifique que sus tiempos de aumento / caída mínimos / máximos estén dentro de los límites de EEPROMS.
respondido por el Mark
0

He tenido errores intermitentes similares y encontré 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 causaba que la basura se escribiera en la memoria del chip; asegúrese de que su código es estable. Una forma de hacerlo sería reiniciarlo para que presione un botón para que no se reinicie automáticamente.

    
respondido por el Thomas O

Lea otras preguntas en las etiquetas