¿Es SPI significativamente más rápido que el bit banging?

8

Tengo un proyecto basado en una foto 18f4550. Para escribir en un '595 registro de turno, ¿existe una clara ventaja al usar spi sobre los pines regulares? Escuché que spi es más rápido, pero no estoy seguro de cómo. ¿Utiliza un reloj diferente, más rápido que el resto del chip, o simplemente es más eficiente? Puedo hacer un bit de un byte a través de pines regulares en un número muy pequeño de instrucciones. ¿Spi usa menos poder de procesamiento? Me moveré bastante a menudo durante los cálculos bastante intensos, así que quiero dedicar la mayor cantidad posible de ciclos a mi proceso y no a desplazarme.

Mi principal razón para no querer usar spi es que mi diseño actual dificultaría un poco más el acceso a los pines necesarios porque ya estoy usando algunos de ellos para otras cosas y tendré que barajar las cosas. Quería averiguar qué beneficios hay antes de que comience a desgarrar las cosas y moverlas.

    
pregunta captncraig

4 respuestas

16

Suponiendo que está comparando un "motor" serial síncrono o periférico spi en el micro con la generación de la misma secuencia a través de "bit banging", entonces sí, tiende a ser algo más rápido, pero lo más importante es que el procesador puede entregar un Byte completo al periférico para enviar y luego hacer otras cosas mientras se transmite. En el caso de bit banging, el procesador tiende a estar bloqueado durante la transmisión (aunque como el micro tiende a ser el maestro y la mayoría de los periféricos son totalmente estáticos, es probable que pueda tolerar una pausa de medio byte para reparar una interrupción o incluso realizar un sondeo) cosas: el ADC serial con reloj de interfaz y las tareas de intervalo de muestra son ejemplos notables de excepciones).

En MCU más capaces, incluso puede ser posible programar un controlador DMA para ejecutar una transferencia de múltiples bytes desde la memoria a través del motor SPI sin la atención adicional del procesador, especialmente si solo los datos en una dirección son importantes.

Pero muchos proyectos de microcontroladores terminan altamente optimizados para su tarea; Si puede ahorrar los ciclos y tolerar la reducción de la velocidad, entonces complicar su software para poder utilizar cualquier GPIO que haga que el limpiador de la disposición física no es, de ninguna manera, una opción poco común.

    
respondido por el Chris Stratton
10

Ventajas del bit banging:

  • Control absoluto sobre el protocolo.
  • Si el tiempo para ejecutar instrucciones en el microcontrolador es más rápido que la velocidad en baudios del SPI, puede ser más rápido, pero esto es poco probable. Se necesitaría una velocidad de transmisión SPI de muy baja velocidad con un microcontrolador de velocidad relativamente alta.
  • Puede tener una latencia menor que una interrupción SPI.
  • Elección de pines.

Desventajas de los bit banging:

  • Requiere mucho más código para manejar -Tiempo de audición -Muestreo confiable de bits recibidos. -Procesos de marco de proceso. * Cada segmento de código anterior consume tiempo que podría gastarse ejecutando otro código.

Ventajas de SPI:

  • Los registros de configuración de registro manejan la velocidad en baudios, el muestreo de bits recibidos y los marcos de procesamiento de marcos
  • La mayoría de los microcontroladores con SPI tienen un vector de interrupción dedicado para cada periférico SPI (¡Verifique su micro!)
  • Una vez configurado, solo necesita verificar si el búfer SPI TX / RX está vacío / lleno y escribir / leer un byte.
  • Si DMA está disponible, el SPI puede transmitir grandes búferes de datos contiguos sin ninguna interferencia de software.

Desventajas de SPI:

  • Un periférico adicional para aprender y configurar (¿es eso realmente una desventaja?)
  • Requiere pines adicionales o multiplexación de pines
  • Costo adicional (tiende a ser insignificante con los microcontroladores actuales)
  • He tenido problemas de ruido con SPI, pero estaban en prototipos a velocidades relativamente altas (10MHz)
  • Elección de pines altamente restringida

Para mí, las ventajas de los golpes de bits son menores en comparación con las ventajas de SPI. Las desventajas de los bit-banging son mucho mayores que las SPI. Las tres razones principales que puedo ver para elegir el bit banging son para

  1. Protocolo personalizado de baja velocidad
  2. Si la comunicación es de baja velocidad y el resto de la aplicación tiene requisitos de computación bajos
  3. O si la comunicación es de baja velocidad y la elección del pin es un problema importante
respondido por el Joshua
7

En el PIC, una implementación de estilo SPI bit bang convencional toma alrededor de cinco ciclos por bit; con un poco de trabajo en las partes 18Fxx, se puede reducir eso a aproximadamente cuatro (a un costo de aproximadamente tres ciclos por byte de sobrecarga adicional). Ese tiempo es adicional a cualquier tiempo requerido para obtener datos (generalmente tres ciclos por byte). Entonces calcule alrededor de 40-43 ciclos por byte. Al usar el SPI de hardware, la velocidad mejora a dos ciclos por bit más un par de ciclos adicionales por byte (algunos otros pueden manejar transferencias de respaldo, pero los PIC que he visto no pueden), y mientras el SPI está enviando un byte el procesador puede obtener el siguiente, lo que permite un tiempo total de aproximadamente 18 ciclos / byte, una ganancia de velocidad de aproximadamente 2.5x.

    
respondido por el supercat
0

Para bit banging (BB) olvidó mencionar:

  1. vincula el procesador durante el período de la comunicación. (SPI carga registros y luego te devuelve las manos para que hagas otra cosa)
  2. Las interrupciones en segundo plano pueden interferir seriamente con el código BB, por lo que solo es útil en diseños de un solo hilo, recuerde que el código BB tiene que prestar el 100% de atención al tratar con el protocolo.
respondido por el bob

Lea otras preguntas en las etiquetas