La memoria flash SPI MISO línea no responde, usando PIC

2

Estoy conectando un componente de memoria flash ( M25P16 ) a un microcontrolador PIC ( PIC18F14K22 ) utilizando SPI. Sin embargo, no puedo ver ninguna información que llegue a la línea de salida del esclavo (literalmente nada, como si el chip no estuviera en el circuito).

Se adjunta un analizador lógico y un diagrama de circuito. La instantánea lógica intenta leer la identificación del dispositivo con el comando 0x9E, seguido de algunos ciclos de reloj vacíos para leer los datos. Como puedes ver, la línea SO está muerta.

Creo que he configurado la polaridad y la fase del reloj correctamente (los datos se emiten desde el PIC en el flanco ascendente del reloj y el reloj está inactivo bajo / activo alto. Además, mi pin de selección de chip se mantiene alto (a través de pull-up) durante el inicio y luego conducido bajo para la transacción. La velocidad del reloj es de 500 KHz, muy por debajo de la velocidad máxima. Las líneas de protección contra escritura y Hold están vinculadas a Vcc, que es de 3.3 V. Tengo resistores desplegables para los datos y las líneas de reloj para desviarlos cuando está inactivo. Sin embargo, he intentado dejar que la línea MISO flote, también, en vano.

¿Alguna idea? Gracias!

simular este circuito : esquema creado usando CircuitLab

    
pregunta NateFisher

2 respuestas

1

Por lo que puedo decir, estás haciendo todo bien.

Si estuviera sentado en mi mesa de trabajo, esto es lo siguiente que haría:

En unidades de producción, haría que la resistencia en MISO sea un pull-up, en lugar de un pull-down. La página 37 de la hoja de datos solo garantiza 100 uA en "MISO out high", pero más de 10 veces la corriente en "MISO out low". El 1.6 mA en "MISO out low" es suficiente para iluminar (débilmente) un LED de alta eficiencia con una resistencia pull-up apropiada a +3.3 V. Me parece que agregar LED a cada señal cuestionable me ayuda a encontrar problemas más rápido. Los 100 uA en "MISO out high" significa que no espere que el chip flash funcione con un menú desplegable de 33 KOhm o menos.

En mi plantilla de prueba (pero no en unidades de producción), cambiaría temporalmente la resistencia en MISO cambiada para tirar débilmente de MISO a alrededor de 1.5 V, lo que ayuda a distinguir entre alta (cerca de 3.3 V), baja (cerca de 0 V) , y tristate (cerca de 1.5 V).

Volvería a ejecutar la prueba y me aseguraré de que la cosa only conectada a MISO sea la sonda o'scope (o analizador lógico) y esa resistencia de polarización (ni siquiera el PIC conectado) para descartar la posibilidad de que el PIC esté conduciendo accidentalmente MISO a GND.

Haría un programa de prueba personalizado en el PIC que no hace nada más que seleccionar el chip flash, intentar una IDENTIFICACIÓN DE LECTURA y leer 20 bytes, luego deselecciona el chip flash y luego se repite para siempre. (Parece que tal vez ya has hecho esto).

En teoría, es posible que un chip PIC se dañe lo suficiente como para que el analizador lógico distinga "0" de "1", pero no lo suficiente para que el chip flash pueda distinguirlos. / p>

Por lo tanto, puedo verificar los voltajes (a) ajustando el programa de prueba personalizado para que ejecute el CLK a 1 Hz, de modo que pueda verificar cada línea en el chip flash con un voltímetro, o (b) ejecutar el programa de prueba en una velocidad más típica (500 KHz o 10 MHz debería funcionar bien) y revisar cada pin con un oscope real (no solo un analizador lógico).

Es bastante fácil destruir un chip flash, por lo que se ve bien en la inspección visual, pero está dañado, por lo que ahora nunca funcionará (siempre con tres estados o siempre con 0).

Tal vez intercambie el chip flash por un chip M25P16 "idéntico" en algo como JeeLink y vea si El problema sigue al chip flash o permanece con el chip PIC.

Tal vez reconstruya todo el circuito con cables nuevos, un chip PIC nuevo y un chip flash nuevo, y cambie los chips para ver si el problema sigue al chip PIC, sigue al chip flash o sigue los cables prototipo. .

    
respondido por el davidcary
2

Si el esquema anterior es su circuito completo: agregue un condensador de desacoplamiento (100nF) a la EEPROM (entre Vcc y GND), y tal vez uno al PIC también.

Las resistencias desplegables / desplegables pueden eliminarse, aunque no deben afectar el comportamiento que se ve.

Los datos en serie que envía a la EEPROM se ven bien, en comparación con lo que especifica la hoja de datos M25P16 (en la página 9). Así que supongo que no es un problema de SPI, sino algo del lado de la EEPROM.

    
respondido por el hli

Lea otras preguntas en las etiquetas