6 votos

Inestable / sensible ARM- Conexión externa SRAM

He diseñado un tablero para un propósito específico. Hay diferentes componentes activos en la junta directiva, incluyendo:

  • ATMEL SAM4S16C Controlador (se ejecuta en el 120MHz)
  • Controlador de ethernet W5100 (conectado a SAM a través de SPI)
  • AT25DF321A FLASH (conectado a SAM a través de SPI)
  • RMLV0408EGSP 512Kx8 SRAM (conectado a la SMC de SAM)

Esquemático

Potencia: enter image description here

He revisado las líneas de energía eléctrica con un ámbito de aplicación. No hay ruido o picos. Es estable 3.25 v

SAM<->SRAM: enter image description here

Borad: Yo no hice igualación de impedancia o la longitud de la pista de coincidencia. Pensé que, no es necesario, pero en esta frecuencia. Tal vez eso fue un error. Ver exacto de longitudes de seguimiento en la actualización-4

Tema: La comunicación en el SPI y el USB funciona bien. Sin embargo, la transferencia de datos entre el controlador y el SRAM es inestable y sólo opera 10 veces más lento de lo que podría/debería ser. Escribí un 2 fase de la función de prueba de que hace lo siguiente:

Fase 1:

  1. Borra la RAM mediante el llenado con 0xFF
  2. Escribe 0x55 (01010101) en todas las direcciones impares (1,3,5,etc) y 0xAA (10101010) en el que incluso las direcciones de
  3. Recorre de nuevo en la dirección completa de la gama, se leen los valores de y se compara con el valor esperado

Fase 2:

  1. 'Borra' la RAM mediante el llenado con 0x00
  2. Escribe 0x55 (01010101) en cada direcciones (1,3,5,etc) y 0xAA (10101010) en el impar direcciones (de otra manera, a continuación, anteriormente)
  3. Recorre de nuevo en la dirección completa de la gama, se leen los valores de y se compara con el valor esperado

Si me ajustar el tiempo de acuerdo a la SRAM de la hoja de datos la función de la prueba de informes de un par de errores de fase 1 y de fase 2, donde están los errores en casi todas, incluso las direcciones. Cuando se produce un error, el controlador lee 0x00 en lugar del valor esperado.

Si he de indicar al controlador de la unidad de la SRAM 10 veces más lento, entonces la función de prueba no se informe de cualquier error. Me puso en el interior de un bucle sin fin, y se deja de escribir/leer aprox 5Gbytes. Se hizo sin un solo error. Sin embargo, si me toque suavemente la superficie de la SRAM o el controlador del paquete (sin tocar ningún pin) se comienza a producir errores. A veces incluso no necesito tocar el chip, es suficiente para mantener mi dedo 2-3 mm por encima de ella. En esta velocidad, el error se ve de forma diferente. Ahora, cuando el valor esperado es 0xAA, a continuación, el resultado es 0x55 y viceversa.

Mismo código funciona bien en SAm4SXplained (con menor tiempo de acceso). Hay diferentes SRAM en que la junta, el cual es un poco más lento (55ns).

Pregunta: Lo que está mal? En realidad, no espero respuestas concretas, ya que el problema es bastante complejo. Lo que necesitas es un poco de orientación, ¿por dónde debo empezar, ¿cómo podría encontrar el error.

ACTUALIZACIÓN-1

Estos son los tiempos que se utilizan.

El acceso de escritura veces:

NWE_SETUP = 1(ciclos) = 8.333 ns

NWE_PULSE = 5(ciclos) = 41.66 ns

NWE_CYCLE = 6(ciclos) = 49.998 ns

Leer los tiempos de acceso:

NRD_SETUP = 3(ciclos) = 24.999 ns

NRD_PULSE = 3(ciclos) = 24.999 ns

NRD_CYCLE = 6(ciclos) = 49.998 ns

SMC Modo de registro = 3, lo cual significa, operaciones de lectura y escritura son el tiempo de acuerdo con Estados Unidos/RD señales, en lugar de CS.

También, me gustaría señalar las siguientes: Ya os adjunto un solo dispositivo a la SMC, el CS de la línea de la SRAM es el cable a TIERRA de forma permanente (ver esquemas). Creo que debería estar bien, sin embargo yo ya no estoy seguro.

ACTUALIZACIÓN-2

Ya no puedo pensar en otra cuestión que un mal diseño de la placa, puedo añadir una imagen de la junta de diseño. Es un estándar 2 de la capa FR4 de la junta. Me gustaría preguntarle a usted para resaltar los errores evidentes de que me las arreglé para darse cuenta. Por ejemplo, no estoy seguro de si es aceptable tener autobús rastros que se cruzan entre sí.

enter image description here

ACTUALIZACIÓN-3

Hice un poco de investigación adicional, aquí están mis conclusiones:

Escribí una nueva función de prueba de que puede proporcionar resultados más precisos. Funciona como los siguientes.

  1. Llena la ram con 0xFF
  2. Llena la ram con los datos de prueba que viene de una matriz de bytes con 8 ítems.
  3. Lee de nuevo los valores y la compara con el valor esperado

Los datos de la muestra de la matriz es:

sample_data[0]=0;
sample_data[1]=84;
sample_data[2]=21;
sample_data[3]=85;
sample_data[4]=150;
sample_data[5]=170;
sample_data[6]=98;
sample_data[7]=255;

Para la prueba he utilizado tanto mi original y de los tiempos que fueron proporcionados por el FRob en su respuesta. Los resultados siempre fueron muy similares.

La función de prueba se imprime todos los errores en USB en formato CSV. La salida puede ser descargado desde aquí

Después de analizar la salida resultó que:

  • el acceso ram funciona bien hasta 0x2FF dirección
  • errores de inicio de 0x300
  • A8 y/o A9 líneas siempre son afectadas en todos los errores (si se produce un error A8 y/o A9)

Observaciones adicionales:

  • El aumento de los tiempos de CICLO se reduce el número de errores
  • Ajuste de los tiempos de CICLO de 350 resultados en el éxito de la prueba de ram.

ACTUALIZACIÓN-4 He medido exactamente la longitud de la traza de la dirección y las líneas de datos. (Ver más abajo). Yo dije antes que la ruta más larga es acerca de 37mm que, obviamente, estaba mal de la estimación. Si alguien pudiera confirmar que las enormes diferencias en la longitud puede provocar que el mencionado problema en la mencionada frecuencia, eso sería bueno.

Net Length(mm)
A0  11.325
A1  11.437
A2  11.818
A3  12.56
A4  11.772
A5  13.156
A6  45.02
A7  37.645
A8  48.549
A9  51.861
A10 60.938
A11 44.396
A12 38.862
A13 43.397
A14 50.029
A15 46.972
A16 35.047
A17 44.777
A18 55.394

D0  51.166
D1  31.642
D2  34.394
D3  83.119
D4  81.543
D5  75.678
D6  62.609
D7  52.769

OE  43.215
WE  60.582

5voto

theheadofabroom Puntos 141

Voy a usar Atmel del SAM4S Serie Completa de la Hoja de datos y Renesas' RMLV0408E de la Serie de la Hoja de datos.

Usted puede encontrar sólo RD y WR de los tiempos de acceso, no es el adecuado CS veces. Usted menciona, NRD_SETUP = 3(cycles) = 24.999ns, sin embargo, no estoy seguro de cómo se dieron estos tiempos. Para mí, 3/(120 MHz) es exactamente 25ns, no 24.999 ns, asumiendo MCK es de 120 MHz. Trató de compensar un cristal de reloj ppm aquí? Revise con el reloj diagrama de árbol utilizando la Figura 29-1 y asegúrese de MCK no está programado para ser demasiado rápido o demasiado lento.

Usted mencionó el éxito de la prueba de la SRAM a una menor frecuencia de reloj para el MCK. Primero de todo, asegúrese de que usted no se aplica accidentalmente Lento el Modo de Reloj, ver 26.14. En segundo lugar, si usted hizo que los tiempos de acceso más lento a mano, ser conscientes de que todos los parámetros de tiempo de uso de un poco de codificación no estándar, por ejemplo, Escribir longitud de ciclo = NWE_CYCLE[8:7]*256 + NWE_CYCLE[6:0]. Observe que los bits 7 y 8 se desplazan en el sistema de valor posicional para un mayor alcance.


Por favor, tenga en cuenta la siguiente precaución en 26.9.1.5 Null Pulso:

Programación null pulso no está permitido. El pulso debe ser de al menos un set a 1. Un valor nulo conduce a un comportamiento impredecible.

Tal vez no se han programado NCS_RD_PULSE y NCS_WR_PULSE ? Aunque usted no necesita el CS de la señal, la estática de la memoria del controlador de la máquina de estado todavía se preocupa por estos valores de tiempo y NCS_*_PULSE no debe ser 0.

Sugiero que usted va para un No Setup, No Hold on NRD and NCS Read Signals de configuración para el máximo rendimiento de lectura como Figura 26-6 en la hoja de datos de muestra.

Así que, por favor, inténtelo (tck es clock ticks aka ciclos de reloj):

Read access times:
NRD_SETUP    = 0 tck =  0.0ns
NRD_PULSE    = 6 tck = 50.0ns = t_AA
NRD_CYCLE    = 6 tck = 50.0ns = t_AA
NCS_RD_SETUP = 0 tck =  0.0ns
NCS_RD_PULSE = 6 tck = 50.0ns = t_AA

De esa manera usted no tiene espera y no hay tiempo de configuración. TDF_CYCLES debe max(t_CHZ, t_OHZ) = 18ns = 3 tck y probablemente debería empezar con TDF_MODE = 0 (optimización de la movilidad). Mantenga READ_MODE y WRITE_MODE tanto en 1.

Para los accesos de escritura, usted puede elegir el Null Delay Setup and Hold configuración para maximizar el rendimiento, porque SRAM escribe sobre el flanco ascendente de la NCS or NWE.

Write access times:
NWE_SETUP    = 0 tck =  0.0ns
NWE_PULSE    = 5 tck = 41.7ns = t_WP
NWE_CYCLE    = 6 tck = 50.0ns = t_AW >= t_WP + 1 tck
NCS_WR_SETUP = 0 tck =  0.0ns
NCS_WR_PULSE = 5 tck = 41.7ns = t_WP

t_WHZ no debería ser un problema, como el SAM4S posee el bus, porque espera después de cada acceso de lectura.

Estos no son grandes cambios de su configuración, salvo que el NCS es programado y los tiempos de instalación se omiten, lo cual está permitido en la SRAM de la hoja de datos.

Usted consideraciones de diseño son vale la pena pensar. Sin embargo, usted no tiene ninguna 1-reloj-el ciclo de los estados, por lo que sus señales externas que en realidad no estaban de conmutación a 120 MHz. Si la terminación no llegar a ser el problema, aumente el correspondiente `_CYCLE veces.

2voto

silverbolt Puntos 18

Creo que usted puede conseguir algunos capacitiva de interferencia en el Estados Unidos de la línea. El Atmel diseño de referencia tiene un par de planos internos que pueden ayudar a limitar la interferencia. Usted puede necesitar considerar hacer una de 4 capas de la junta para solucionar esto correctamente. He intentado alargar el momento de la instalación?

Además, ¿dónde están tus desacoplamiento de las tapas?

También se ve como los pequeños trozos de plano de tierra que están cortadas por los restos de tierra. Ajustar el diseño de la configuración del software para permitir que las trazas de tocar los aviones de la misma señal.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X