Velocidad máxima de datos SPI admitida

3

Esto probablemente sea relevante para todos los chips compatibles con SPI, pero estoy solicitando el DRV8711 en particular. La hoja de datos enumera los requisitos de tiempo de SPI y me preguntaba cómo obtener la velocidad de datos máxima admitida por el dispositivo. La MCU del host es STM32F103C6 y necesita establecer un valor de preescalador para establecer la velocidad de datos.

    
pregunta electrophile

2 respuestas

11

En SPI, cada bit se transmite en un borde de reloj, por lo tanto, la velocidad de datos (en bits) es la misma que la frecuencia de reloj. Su hoja de datos no proporciona la frecuencia máxima, pero proporciona el tiempo de ciclo mínimo, que es \ $ 250ns \ $. Como sabemos, la relación entre la frecuencia y el período es \ $ f = 1 / T \ $, podemos calcular la frecuencia máxima como $$ f_ {max} = \ frac {1} {T_ {min}} = \ frac {1} {250ns} = 4MHz $$

Por lo tanto, la velocidad de datos es de 4Mbits / s.

Tenga en cuenta que esto incluye cualquier bit de sobrecarga de protocolo transmitido, como información de trama, bits de paridad y ciclos de inactividad. Así que los datos reales codificados tendrán una tasa más baja.

    
respondido por el Eugene Sh.
0

Por su pregunta, asumo que usted es nuevo en los protocolos de comunicación entre chips de bajo nivel en general y en SPI en particular, así que intentaré explicar algunas cosas básicas que no son directamente evidentes al leer la hoja de datos.

El simple

El protocolo SPI no define realmente las velocidades de reloj, esto siempre se deja al diseñador del chip. Pero aunque la fórmula \ $ f = 1 / T \ $ es siempre es correcta en el caso de SPI, debe tener en cuenta en la imagen más amplia: $$ \ frac {1} {t_ {CYC, MAX}} < f_ {reloj} < \ frac {1} {t_ {CYC, MIN}} $$ Pero observe cómo la hoja de datos solo define el ciclo de reloj mínimo y deja el máximo en blanco. Esto significa que puede poner cualquier valor más alto que el mínimo allí, y aún se mantendrá.

Debería haber tenido el valor de \ $ \ infty \ $, pero como normalmente no puedes dividir entre infinitos, ellos eligen no romper las matemáticas.

Lo que esto significa para usted es la fórmula anterior, aproximadamente, se traduce a $$ \ frac {1} {\ infty} < f_ {reloj} < \ frac {1} {250 ns} $$ con el resultado final siendo $$ DC < f_ {reloj} < 4 MHz $$

El extraño

Ahora, a menos que usted realmente , realmente sepa lo que está haciendo y que absolutamente necesite esto, nunca debe ejecutar sus relojes en la frecuencia máxima especificada.

Supondré que está derivando su reloj de un cristal regular, sin horno y sin compensación de temperatura. Si, por alguna razón, está usando un circuito RC para esto, el efecto descrito es aún peor. Si tiene un buen reloj atómico como referencia, puede ignorar los siguientes dos párrafos ...

La fuente de reloj que utiliza no es precisa ni estable. Cambia su frecuencia de funcionamiento con la edad, debido a los cambios de temperatura y la tensión de suministro es inestable y ruidosa. Peor aún, los cristales de cuarzo pueden reaccionar a un discurso, pasar un camión o hacer clic en la mesa .

Lo que esto significa al final del día es que si diseña para \ $ f_ {max} \ $, incluso la más mínima perturbación en el entorno puede hacer que su sistema salga de las especificaciones. En su caso: \ $ f_ {reloj} > 4 MHz \ $!

En este punto, comienzan a suceder cosas extravagantes, que van desde que su sistema funciona como se esperaba o incluso mejor, hasta que crea un pequeño agujero negro y se come todo el dinero que gastó en el proyecto.

¡Así que siempre mantén un margen de seguridad considerable!

Ahora, con respecto a este dispositivo específico '(aunque el siguiente rasgo se comparte entre la mayoría de los devies SPI) protocolo de comunicación. Debe observar la sección 7.5.1 en la página 25 y la figura 17 en la página 26: "Para completar la transacción de lectura o escritura, SCS debe configurarse en un 0 lógico". Y mirando el artículo 6,7 y amp; 8 de la sección 6.6 parece que necesita agregar otro ciclo de reloj con el CS bajo. Yo agregaría al menos dos si fuera usted.

El lento

Pero ahora viene la parte más interesante: ¿está seguro de que necesita toda esa velocidad? La tabla en la sección 6.7 nos dice que la frecuencia máxima de pasos es de 250 kHz. Es decir, no importa lo que haga, no puede cambiar la posición de su motor más rápido que 250,000 veces por segundo.

Además, si considera que el reloj SPI es un reloj de bits y necesita enviar 16 bits de datos más un reloj adicional cuando el CS es bajo, verá que no puede escribir en los registros de configuración más rápido que \ $ 4 MHz / 17 \ aprox. 235 KHz < 250 KHz \ $.

En este punto, es posible que tenga una de las varias razones para querer ejecutar su SPI a la velocidad máxima:

  1. Desea leer el registro de estado para detectar bloqueos y otros problemas lo antes posible.
  2. Desea hacer un "perfil de movimiento extra suave" (sección 7.1 página 10) cambiando constantemente alguna configuración.
  3. Necesita tiempos de inicio realmente rápidos

Si no necesita hacer nada de lo anterior, solo configuraría el reloj SPI a un valor de varios KHz, ya que solo lo usará una vez después del encendido para realizar algunas configuraciones.

Lo desconocido

Con respecto a la configuración del escalador previo en el microcontrolador: ya que no escribió la frecuencia de su fuente de reloj y cómo está configurado su árbol de reloj, puedo ayudarlo con esa.

P.S.

¡Aprovecha el SPI modo !

    
respondido por el Equilibrius

Lea otras preguntas en las etiquetas