¿Es el SPI significativamente más rápido que los golpes de bits?


8

Tengo un proyecto basado en una imagen 18f4550. Para escribir en un registro de desplazamiento '595, ¿existe una clara ventaja de usar spi sobre los pines io regulares? Escuché que spi es más rápido, pero no estoy seguro de cómo. ¿Utiliza un reloj diferente y más rápido que el resto del chip, o es simplemente más eficiente? Puedo golpear un byte a través de pines io regulares en una cantidad bastante pequeña de instrucciones. ¿Spi usa menos potencia de procesamiento? Me desplazaré con bastante frecuencia durante cálculos bastante intensos, por lo que quiero dedicar tantos ciclos como sea posible a mi proceso y no desplazarme.

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


55
Puede hacer SPI golpeando bit.
Starblue

Respuestas:


17

Suponiendo que está comparando un "motor" serial síncrono o periférico spi en el micro para generar la misma secuencia a través de "golpes de bits", entonces sí, tiende a ser algo más rápido, pero lo más importante es que el procesador puede entregar un byte completo para el periférico para enviar y luego hacer otras cosas mientras se transmite. En el caso de los golpes de bits, el procesador tiende a estar atado durante la transmisión (aunque como el micro tiende a ser el maestro y la mayoría de los periféricos son completamente estáticos, es probable que pueda tolerar la pausa a mitad de byte para atender una interrupción o incluso sondear cosas: ADC serial con interfaz de reloj y tareas de intervalo de muestra que 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 mayor atención 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 usar cualquier GPIO que haga que el diseño físico sea más limpio no es en absoluto una opción poco común.


Si esto ^. Como menciona Chris, la mayor ventaja de usar periféricos de hardware es que puede transferir un byte de datos de una transmisión al periférico y recibir una notificación por interrupción si ha terminado de cambiarlo y está listo para otro byte. Esto libera el uso de su CPU para otras cosas mientras se cambia el byte, lo que puede ser una vida útil en los ciclos de la máquina dada la velocidad en baudios de estos protocolos en serie.
Jon L

3
No es toda una vida para SPI. Si está hablando de velocidad, entonces podría estar ejecutando el SPI a 10MHz, que son solo 10 instrucciones PIC a toda velocidad. Eso no es una edad. Casi el tiempo suficiente para preparar su próximo byte. Apenas es tiempo suficiente para atender una interrupción.
Rocketmagnet

2
Podría ser justo decir que mucho depende de la velocidad de transmisión prevista / requerida, que no se ha establecido. Sin embargo, como señalé, si el micro es el maestro, puede ser libre de retrasar el envío del siguiente byte, siempre que la aplicación pueda tolerar la irregularidad / reducción en el rendimiento.
Chris Stratton

1
@Rocketmagnet, estoy corregido. SPI es mucho más rápido de lo que pensaba: supongo que lo combiné con protocolos seriales más lentos como UART (donde 9600 baudios son ~ 10 kHz).
Jon L

1
También tenga en cuenta que el maestro SPI es relativamente fácil de explotar. El esclavo SPI puede ser algo más difícil ya que las selecciones de chip y las transmisiones de reloj deben ser cronometradas y manejadas específicamente (como un pin de interrupción externo). Uso el estilo SPI master bit bang a menudo en mis proyectos, especialmente si no necesito un alto rendimiento pero quiero un tablero limpio (también es bueno para el grabado en el hogar). También tenga en cuenta que es una práctica común hacer lo contrario: cambiar los datos a registros de desplazamiento (HC595, etc.) utilizando SPI y un GPIO (pin de bloqueo).
Hans

10

Ventajas de bit-banging:

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

Desventajas de los golpes de bits:

  • Requiere mucho más código para manejar -Tiempo de baudios -Muestreo confiable de bits recibidos -Límites de trama de proceso * Cada segmento de código anterior consume tiempo que podría pasar ejecutando otro código.

Ventajas de SPI:

  • La configuración de registro maneja el tiempo de baudios, el muestreo de bits recibidos y el procesamiento de los países de trama
  • 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 memorias intermedias de datos contiguos sin ninguna interferencia de software.

Desventajas de SPI:

  • Un periférico adicional para aprender y configurar (¿Es 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 placas prototipo a velocidades relativamente altas (10MHz)
  • Elección de pin altamente restringida

Para mí, las ventajas de bit-banging son menores en comparación con las ventajas de SPI. Las desventajas de bit-banging son mucho mayores que las de SPI. Las tres razones principales que puedo ver para elegir 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 cómputo bajos
  3. O si la comunicación es de baja velocidad y la elección del pin es un problema importante

8

En el PIC, una implementación convencional de estilo SPI de bit-bang toma aproximadamente cinco ciclos por bit; con un poco de trabajo en piezas 18Fxx, uno puede reducirlo a aproximadamente cuatro (al costo de aproximadamente tres ciclos por byte de sobrecarga adicional). Ese tiempo es adicional al tiempo requerido para obtener datos (generalmente tres ciclos por byte). Entonces calcula unos 40-43 ciclos por byte. Usando 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 consecutivas, 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.


0

Para bit banging (BB) olvidó mencionar:

  1. Ata el procesador durante el período de la comunicación. (SPI carga registros y luego los devuelve para que pueda hacer otra cosa)
  2. Las interrupciones de fondo pueden interferir seriamente con el código BB, por lo que solo es útil en diseños de un solo subproceso, recuerde que el código BB debe prestar el 100% de atención para tratar con el protocolo.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.