La comunicación Flash SPI no funciona sin osciloscopio

Estamos utilizando W25Q128JV Flash IC junto con nRF52 SoC.

Hoja de datos de flash: https://www.winbond.com/resource-files/W25Q128JV%20RevH%2003102021%20Plus.pdf

Nos enfrentamos al siguiente problema: la comunicación SPI no funciona. Sin embargo, si conectamos el analizador lógico (similar a este https://www.sparkfun.com/products/15033 ) a las líneas DI, DO y CLK, entonces todo funciona muy bien. Es por eso que estoy seguro de que no es un problema relacionado con el software.

A continuación se muestra el esquema de la hoja de datos:

ingrese la descripción de la imagen aquí

En nuestra PCB tenemos la siguiente configuración:

  • R1: no utilizado
  • R2: 10kOhm
  • R3: 100kOhm
  • C1: 0,1 uF

Pensamos que falta R1 en nuestro diseño. Entonces agregamos R1 a DO, DI, CS y CLK (50Ohm). No ayudó.

También quiero señalar que incluso cuando el analizador lógico se apagó, resolvió el problema de comunicación.

¿Alguien tiene idea de cuál es el problema?

¿Qué le está hablando?
Un analizador lógico no es un osciloscopio. Debería mirar las señales con un alcance para ver qué está pasando.
¿Está seguro de que el dispositivo con el que está hablando está correctamente conectado a tierra? A veces, puede crear accidentalmente una conexión a tierra con un equipo de banco y no está allí cuando el dispositivo no está
Intente poner versalitas (algunas pf, incluso tapas de discos de cerámica) entre líneas y gnd y vea qué sucede. Vea cómo se ve con el alcance, incluso si los cables arreglan las cosas, la mala señal seguirá pareciendo... bueno... no perfecta. ¿Enruta la línea del reloj muy cerca de las líneas de señal? ¿Tiene plano de tierra sin huecos? Pueden ser muchas cosas diferentes, es solo que los protagonistas cambian las cosas lo suficiente como para que todo funcione. Problema desagradable para tener eso es seguro
¿Has comprobado el modo SPI? normalmente, SPI lee en un borde y escribe en el otro, lo que lo hace razonablemente tolerante con el ruido y los retrasos no coincidentes, pero si el modo SPI es incorrecto, es posible que esté leyendo y escribiendo en el mismo borde.

Respuestas (3)

R2 en las líneas SPI no son necesarios, WP y HOLD son una historia diferente, por lo general no son impulsados ​​por MCU.

Un valor común para R1 es 22 ohm, R3 tampoco es necesario.

Lo que hace aún más confuso, llamas MISox a las señales que son entradas o salidas. Solo tiene un MISO, MOSI, CLK por canal SPI, pero podría tener múltiples CSx, WP, HOLD no son parte de SPI, por lo que no debe llamarlos MISox.

EDITAR:

Las resistencias R1 tienen que estar cerca de la fuente de la señal.

Cerca de MCU (MCU a Flash):

  • CS -> CS
  • MOSI->DI
  • CLK -> CLK

Cerca de Flash (Flash a MCU):

  • DO-> MISO
Gracias por ayudar. Parece que MCU maneja los pull-ups y pull-downs por sí mismo con la configuración de software predeterminada, excepto el pin MISO. Entonces, en otras palabras, cuando tenemos pull-up en MISO, y nada más en otras líneas, todo funcionó bien. Luego reconfiguramos el software para usar pull-up para MISO también, y ahora la configuración funciona sin resistencias en las líneas CLK, MOSI, MISO y CS. Referencia: devzone.nordicsemi.com/f/nordic-qa/53634/…

Tienes algo de ruido en tus señales. De dónde viene ese ruido es una incógnita. Pero colgar la sonda del analizador lógico en las líneas proporciona suficiente filtrado del ruido para permitir que las cosas funcionen.

Es posible que desee experimentar colocando una sonda LA en una señal a la vez y ver si puede reducir el problema de esa manera. Solo adivinando (un SWAG), diría que CLK es probablemente el culpable.

Tenga en cuenta que poner resistencias de 50 ohmios en el extremo de destino de esas señales, como parece haber hecho, no va a ayudar. Esas resistencias de terminación en serie deben ir lo más cerca posible de la fuente (extremo de conducción) de la señal.

Disminuir los valores de R2 y R3 también puede ayudar, especialmente si Vcc es < 5V.
Una vez tuve un problema similar en el que la diafonía entre los datos y las líneas del reloj causaba un pequeño "gancho" adicional en el borde de la señal del reloj, lo que hacía avanzar el estado del esclavo dos veces en lugar de solo una vez por ciclo de reloj. ¡Tomó bastante tiempo rastrearlo!

Esto parece un problema común de EMI o interferencia electromagnética entre los suministros SMPS ruidosos y el objetivo. La impedancia de línea desequilibrada también puede causar esto debido al bajo rendimiento de CMRR y al ruido de la ruta de tierra.

Puede desviar el ruido de RF con una tapa a tierra en el suministro o a tierra 0V con un cable como primer paso. Luego considere mejorar el diseño con blindaje y mejorar la impedancia de tierra común con blindaje terminado en el extremo del suministro.