Introducción a SPI y como utilizar Arduino como programador

Introducción a SPI

El protocolo SPI (Serial Peripheral Interface), ISP(In System Programming)  o  ICSP (In Chip Serial Programmer) es un protocolo de comunicaciones serie sincrono de alta velocidad inventado por Motorola en 1982 que nos va a permitir la comunicación con memorias, módulos externos, otros controladores y de lo que hoy hablaremos, programar microcontroladores que cuenten con dicha característica como son los AVR de Atmel.

 

Diagrama en bloques del AVR.

En el siguiente diagrama en bloques típico de un microcontrolador AVR  puede apreciarse  la interface SPI y el recorrido que debe realizar por los diversos  databuses hasta llegar  por ejemplo en este caso hasta la memoria flash donde que se van a alojar el programa ya compilado en lenguaje maquina. De esto ultimo se encargara el compilador.

Diagrama de tiempos del SPI

Podemos apreciar aquí un ejemplo de uso del protocolo SPI, ya que puede variar según el modo que se utilice, pero eso ya lo veremos en profundidad en otra ocasión.

La ejecución es simple y cumple en principio los siguientes pasos
1) Se coloca el CS/SS (Chip Select/Slave Select) en un estado bajo, aunque para la programación del microcontrolador se utilizara el pin de RESET.

2) Se envía envía la señal de clock de sincronismo a una frecuencia compatible con ambos dispositivos, es decir que la pueda manejar e interpretar tanto el maestro como el esclavo.

3) se enviara la cadena donde según cada fabricante del esclavo puede cambiar pero generalmente se suelen enviar algunos bits altos y bajos de control y luego si la información importante, esta es, la dirección de memoria y el dato.

 

Mapa de memoria.

En estos mapa de memoria ROM/flash de distintos microcontroladores pude darse una idea sobre el funcionamiento de los mismos, ellos funcionan como pilas donde cada fila pertenece a una dirección única y en donde se guardaran los datos relevantes, luego el procesador mediante sus diversos punteros y registros se encargara de ejecutar el programa.

Figura 6-1 AtmelTiny25/45/85
 

 

 

 

Ejemplo de archivo .HEX
Cuando se compila un programa escrito en un lenguaje de bajo u alto nivel, el compilador retorna un archivo objeto con la extensión .HEX para el caso de micotrontroladores Atmel  con la información reubicable del código maquina acorde a las especificaciones del standard creado por intel en 1988.
En este archivo se incluyen principalmente las direcciones de memoria y códigos a ejecutar, estos códigos se pueden encontrar en el set de instrucciones de AVR, con lo cual se puede reversear pudiendo convertir este archivo objeto en código assembler para poder analizar el código.
Si bien se puede realizar a mano, ya existen aplicaciones para ello.

 

Diagrama de conexión.

Es importante recordar cuando se trabaja con SPI que siempre se cuenta con un master y al menos un esclavo.
En este caso el diagrama genérico  de conexión es el siguiente.Para el caso del master, va ser nuestro programador y como veremos mas abajo en la tabla tenemos una suerte de pines o puertos posibles  para configurar en el sketch de Arduino y para el caso del slave dependerá de cada microcontrolador a programar cuales van a ser los pines a conectar, por ello es tan importante valerse siempre de la hoja de datos y notas de aplicación

Conexiones en Arduino como master

Arduino / Genuino Board MOSI MISO SCK SS (slave) SS (master) Level
Uno or Duemilanove 11 or ICSP-4 12 or ICSP-1 13 or ICSP-3 10 5V
Mega1280 or Mega2560 51 or ICSP-4 50 or ICSP-1 52 or ICSP-3 53 5V
Leonardo ICSP-4 ICSP-1 ICSP-3 5V
Due SPI-4 SPI-1 SPI-3 4, 10, 52 3,3V
Zero ICSP-4 ICSP-1 ICSP-3 3,3V
101 11 or ICSP-4 12 or ICSP-1 13 or ICSP-3 10 10 3,3V
MKR1000 8 10 9 3,3V

 

Pin Out de algunos micros de ejemplo.

 

 

 

Utilizar Arduino como programador ISP

El procedimiento es simple, pero se debe de tener en consideración algunos puntos importantes, así que atentos a los pasos.

  1. Desde la GUI de Arduino cargar el sketch de Arduino SPI, para ello ir hasta Archivo –> ejemplos –> ArduinoISP –> ArduinoISP
  2. Verificar y/o modificar las definiciones de puertos, eso nos va a indicar como queda el circuito del programador armado y funcionado correctamente. Los pines correctos para tu kit de desarrollo Arduino los puedes encontrar en la tabla anterior “Conexiones en Arduino como master”, solo tener en cuenta que debes modificar los pines de SPI y RESET, el cual en este caso a va controlar el dispositivo slave, por lo cual y en resumen, es cualquier puerto que puedas manejar desde el micro, si tienen un Arduino UNO, el pin 10 que trae default y resto son correctos.
    Para el caso de un Mega, los pines serán
    #define RESET 53, aunque puedes dejar el 10
    #define PIN_MOSI 50
    #define PIN_MISO 51
    #define PIN_SCK 52
  3. Finalmente, conectar como se vio anteriormente y para cargar el programa bastara con utilizar el avrdude, disponible para la mayoria de los sistemas operativos,
    Por ejemplo en linux utilizo el siguiente comando para programar:

avrdude -p m8 -c stk500v1 -U flash:w:file.hex:i -F -P /dev/ttyACM0 -b 19200 -u

 

Saludos!

 

Mira también estos otros artículos

  • No existen posts relacionados.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *