principios de comunicacion spi

Upload: sea-lo-quesea-pero-chevere

Post on 20-Feb-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/24/2019 Principios de Comunicacion Spi

    1/19

    http://picfernalia.blogspot.com.co/2013/04/comunicaciones-serie-spi.html

    Comunicaciones Serie SPILa familia PIC18 dispone de varias posibilidades de comunicaciones serie.Adems del puerto USART ue !a describimos" dispone de un puertodedicado a comunicaciones s#ncronas serie" el SSP $Serial S!nc%ronousPort&. 'ic%o puerto puede dedicarse a varios protocolos" tales como SPI oI(C. Ambos son e)clu!entes" esto es" si se confi*ura el perif+rico para SPIno podr usarse para I(C ! viceversa. Si se precisan de forma con,untacomunicaciones I(C ! SPI la -nica solucin es un microcontrolador con dospuertos SSP o bien" implementar al*unos de los dos protocolos a trav+s desoft/are.

    0n este tutorial vamos a e)aminar en el protocolo SPI $Serial ProtocolInterface&" describiendo los re*istros SR involucrados ! detallando losprocedimientos para transmitir ! recibir. Lo ilustraremos con un e,emplomu! sencillo de comunicacin con un perif+rico SPI" un conversor 'AC$2CP38(( de 2icroc%ip&.

    0n entradas posteriores veremos e,emplos de comunicaciones SPI con otrosperif+ricos con protocolos de comunicacin ms complicados.

    Arc%ivos de cdi*o asociados a esta entrada4 spi5mcp38((.c

    666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666

    0s importante entender los conceptos bsicos detrs de una comunicacinSPI" ue son diferentes de otros tipos de comunicaciones.

    0mpe7aremos recordando las propiedades de un re*istro de despla7amientoo s%ift re*ister $ver fi*ura&4

    0n un re*istro de despla7amiento" con cada cloc del relo," un nuevo bitentra en el re*istro ! despla7a a todos los bits una posicin. 0l -ltimo bitsale del re*istro. Los re*istros de despla7amiento son la base de las

    http://picfernalia.blogspot.com.co/2013/04/comunicaciones-serie-spi.htmlhttp://picfernalia.blogspot.com.co/2013/04/comunicaciones-serie-spi.htmlhttp://artico.lma.fi.upm.es/numerico/antonio/blog/spi_mcp4822.chttp://artico.lma.fi.upm.es/numerico/antonio/blog/spi_mcp4822.chttp://picfernalia.blogspot.com.co/2013/04/comunicaciones-serie-spi.htmlhttp://picfernalia.blogspot.com.co/2013/04/comunicaciones-serie-spi.html
  • 7/24/2019 Principios de Comunicacion Spi

    2/19

    conversiones paralelo9serie ! viceversa. Por e,emplo" en la UART e)iste unTSR $T) S%ift Re*ister& donde se car*a el b!te a enviar $de forma paralela&! van saliendo sucesivamente $serie& los bits a enviar. 'ic%o TSR se car*acomo vimos con el dato colocado en T:R0;. 'e forma totalmente anlo*aen el circuito de recepcin de la UART tenemos otro re*istro RSR $R) S%ift

    re*ister& donde van entrando sucesivamente $serie& los bits recibidos. Alllenarse" el dato se transfiere $en paralelo& al re*istro buffer de recepcin$RCR0;&.

  • 7/24/2019 Principios de Comunicacion Spi

    3/19

    Lo ue tenemos es ,usto la base de una comunicacin SPI entre dosdispositivos. Cada una de las partes del re*istro circular es el re*istroSSPSR de cada dispositivo ! ambos comparten el relo,. La idea es ue si enel SSPSR1 %a! un dato A ! en el SSPSR( un dato @" tras 8 tics de relo," losdatos A ! @ se %abrn intercambiado entre los dispositivos. 0sta es la ra7npor la ue al contrario ue la UART slo se dispone de un re*istro" sindiferenciar entre entrada ! salida. 0n el protocolo SPI no %a! realmentetransmisiones ni recepciones" solo intercambios de datos A ! @" !a ue porcada dato enviado debe %aber siempre uno recibido. 'epende de lascircunstancias el cmo se interprete una transferencia SPI4

    1. Ser una transmisin si el 1er dispositivo ten#a por ob,etivoera mandar el dato A al (do dispositivo" mientras ue el dato @recibido era basura $pero no puedo DevitarD recibir dic%o dato&.

    (. Ser una recepcin si el dato A enviado es irrelevante ! solo lomando para obtener a cambio el dato @ $pero no %a! forma derecibir nada si !o no mando al*o Da cambioD&.

    E. Puede ser una transmisin9recepcin simultnea si tanto eldato A como el @ son si*nificativos para la comunicacin.Pensar por e,emplo en un 'i*italSi*nalProcesor $'SP& ue

    recibe una serie de muestras de una seFal ! efect-a al*-n tipode procesado sobre ella. Tras un cierto retraso" in%erente alprocesado" empe7ar a mandar muestras de vuelta. A partir deese momento" por cada muestra de la seFal ori*inal uemande el %ost recibir una muestra procesada en unacomunicacin full6duple).

    3. inalmente" %a! situaciones donde los datos intercambiados nole interesan a nin*-n dispositivo. Por e,emplo" en lasespecificaciones del protocolo SPI de las tar,etas S' sereuiere mandar 8 clocs de relo, tras un intercambiocomando9respuesta para ue la tar,eta pase a e,ecutar el

    comando recibido. 0n ese caso el microcontrolador ! la tar,etase intercambiarn un b!te ue a nin*uno de los dos interesa

  • 7/24/2019 Principios de Comunicacion Spi

    4/19

    solo para ue le lle*uen los 8 pulsos de relo, necesarios a latar,eta.

    La -nica asimetr#a entre ambos dispositivos es ue uno de ellos debe*enerar los pulsos de relo, ue %acen =avan7ar> el re*istro de

    despla7amiento. 'ic%o dispositivo $a la i7uierda en la *rfica anterior& es elmaster ! ser uien controle la transmisin.

    0n la fi*ura si*uiente $e)tra#da del datas%eet de 2icroc%ip para elPIC18(G(& se ilustra lo ue acabamos de contar. Como se ve es totalmenteanlo*a a la fi*ura anterior" aFadiendo el %ec%o de ue el usuario $al i*ualue suced#a en el caso de la UART& no puede acceder al verdadero re*istrode despla7amiento SSPSR" traba,ando en su lu*ar con un buffer SSP@U.

    La l#nea de S'< $master& a S'I $slave& tambi+n se suele etiuetar 2

  • 7/24/2019 Principios de Comunicacion Spi

    5/19

    La barra encima de SS indica ne*acin" ! es la forma standard de e)presarue si ueremos seleccionar al esclavo ( debemos poner a nivel ba,o SS(! mantener altas SS1 ! SSE. 'e esta forma los esclavos 1 ! E i*noraraneducadamente la conversacin entre 2aster ! Slave (.

    Como se ve" si empie7a a %aber muc%os esclavos el n-mero de l#neasdedicadas a la seleccin de dispositivos crece. Adems" el master tiene ueestar continuamente pre*untando a los esclavos si desean al*o" !a ue unesclavo no tiene nin*una forma de iniciar la conversacin.

    0sta es la ra7n por la cual SPI es el protocolo preferido por su simplicidadcuando slo tenemos una -nica cone)in master6slave. Cuando %a! uemane,ar varios esclavos se prefiere el protocolo I(C. 0ste protocolo tambi+nes de tipo serie ! s#ncrono $en la familia PIC18" SPI e I(C comparten elmismo puerto de comunicaciones serie s#ncronas SSP&" pero implementa unsistema de direcciones" por lo ue no es preciso aFadir l#neas adicionalespara los nuevos dispositivos.

    COMUNICACIONES SPI en el PIC:

    Pasemos a%ora a detallar como implementar el protocolo SPI al traba,arsobre un PIC $asumimos ue dispone del %ard/are adecuado" el puertos#ncrono paralelo SSP&. Como todo perif+rico del PIC su confi*uracin !mane,o estn controlado por una serie de re*istros SR $Special unctionRe*isters. Para el puerto SPI dic%os re*istros SRs son4

    SSPC

  • 7/24/2019 Principios de Comunicacion Spi

    6/19

    Pasamos a%ora a describir las opciones posibles en la confi*uracin delpuerto SPI en un PIC" ue se determinan con una serie de bits en losre*istros SSPC

  • 7/24/2019 Principios de Comunicacion Spi

    7/19

    Modos SPI (master): relacin reloj/datos

    Aunue ten*amos establecida la frecuencia del relo," todav#a %a! variasopciones para el master" referidas a la polaridad de la seFal de relo," ! la

    fase entre dic%a seFal ! los datos de entrada9salida.Los bits ue determinan estos aspectos son4

    SSPC

  • 7/24/2019 Principios de Comunicacion Spi

    8/19

    Las cuatro primeras tra7as ilustran las cuatro posibilidades de relo, ! latra7a etiuetada como S'< la posicin de los datos de salida. Las l#neasverdes indican el momento en ue los datos deber#a ser muestreados.

    Como se ve" la interpretacin de CP

  • 7/24/2019 Principios de Comunicacion Spi

    9/19

    Si ueremos formali7arlo" podemos definir un nuevo parmetro Lo/(Ni*%"$L(NM1 si el bit esta listo en las subidas ! L(NMK si est disponible en lasba,adas& ! determinar CH0 como4

    CH0 M L(N )or CHP

    inalmente ueda decidir el valor de SPSSTAT.S2P ue determina elmomento de muestreo de los datos entrantes" como se aprecia en la parteba,a de la *rfica anterior4

    S2PMK los bits de entrada estn alineados con el centro del periodo derelo,S2PM1 los bits de entrada estn disponibles al final del periodo de relo,.

    0n la prctica" cmo ele*ir estos parmetros para comunicar nuestro PICcon un cierto dispositivoB Como siempre %a! varias posibilidades4

    1. Reusar un cdi*o ue andaba por a%# ! ue funciona.(. Leer las especificaciones del dispositivo donde por al*-n lado

    vendr descrito ue modos SPI acepta. Jormalmente sedescriben con la pare,a $CP

  • 7/24/2019 Principios de Comunicacion Spi

    10/19

    Imlementacin de las com!nicacin SPI

    Al i*ual ue %icimos en el caso de la UART presentaremos las t#picasfunciones de las ue disponemos en un compilador ! lue*o las

    reescribiremos usando nuestros reci+n aduiridos conocimientos.Las funciones de un compilador respecto al mdulo SPI se dividen enrutinas de iniciali7acin $ue afectarn a SSPC

  • 7/24/2019 Principios de Comunicacion Spi

    11/19

    Como se observa la iniciali7acin de C18 $parmetro bus5mode& si*ue lanomenclatura t#pica de los modos SPI $CHP" CPNA&.

    Reescribir por nuestra cuenta una funcin de iniciali7acin es sencillo4 basta

    poner los bits de los re*istros SSPC dedia#ed SS 0i$ (A: i$ PIC'

  • 7/24/2019 Principios de Comunicacion Spi

    12/19

    SSP2@ = B9 File(SSPSTAT4i#"72@==%)9 re#!r$(SSP2@)9;

    La funcin recibe un b!te de datos ) ! lo coloca en el buffer SSP@U. 0stoprovoca las si*uientes acciones4

    1. Inmediatamente ) se transfiere al verdadero re*istro dedespla7amiento del puerto SSPSR ! el buffer SSP@U uedavac#o" esperando los datos de lle*ada.

    (. Se inicia la transmisin $! simultnea recepcin& de datos.E. Cuando se %an transmitido los 8 bits $! por lo tanto se %an

    recibido 8 bits& el b!te recibido se pasa a SSP@U ! la banderaSSPSTAT.@ se pone a 1 $buffer full&.

    0n nuestra funcin tras poner los datos en SSP@U monitori7amosSSPSTAT.@ %asta ue se %a*a 1 $seFal de ue los datos recibidos estn

    listos&. 0n ese momento se devuelve el valor recibido $en SSP@U&. Laaccin de leer SSP@U pone a K el bit SSP@U.@ $indicando buffer empt!&.

    Jotad ue la funcin se llama spi5transfer" sin especificar si es T: o R:"porue nosotros !a sabemos ue en SPI no %a! transmisiones nirecepciones propiamente dic%as" slo transferencias.

    Si por una ma!or le*ibilidad del cdi*o ueremos disponer de una funcinde escritura ! otra de lectura podemos simplemente usar unos define4

    && SPI !$#io$" alia"e"

    dei$e

    "0i_#B(B) "0i_#ra$"er(B) && "e$d" T da#a, i5$ore" re#!r$

    3al!e7dei$e

    "0i_rB() "0i_#ra$"er(%B@@) && "e$d" d!++1 da#a, re#!r$" da#a7

    dei$e

    "0i_lo() "0i_#ra$"er(%B@@) && "e$d < lo" ($o4od1 are" a4o!##e da#a)

    eso es todo. Nemos reproducido la funcionalidad de un compilador t#pico.Al i*ual ue %icimos en el caso de la UART" conociendo los detallespodr#amos adaptar las rutinas a nuestras necesidades especificas.

    Por e,emplo" la rutina de transferencia anterior $al i*ual ue las de 2iroC oC18& son bloueantes. 0l bucle "#ile(SSPS$A$%&') ase*ura ue lafuncin vuelve con un dato. Pero la comunicacin se interrumpe en mitad de

    un b!te" nuestro pro*rama se blouear#a. 0l PIC cuenta con unainterrupcin del puerto SSP. La bandera SSPI se levanta cuando unarecepcin se %a completado ! el dato est listo para ser reco*ido enSSP@U. Usando interrupciones la funcin anterior podr#a volver sin %abercompletado la transferencia ! ser#a responsabilidad de la interrupcinrescatar el dato recibido.

    *e+inicin de la l,nea CS: estrate-ias:

    0n el apartado anterior vimos las funciones necesarias para una

    comunicacin SPI" pero de,amos un aspecto de lado4 la definicin de la l#neaCS a usar.

  • 7/24/2019 Principios de Comunicacion Spi

    13/19

    0sto es necesario puesto ue al contrario del resto de los pines$SCL"S'

  • 7/24/2019 Principios de Comunicacion Spi

    14/19

    sbit devicename_CS_dir at TRISC.B1;

    0sto parece mu! similar a los defines de antes. La venta,a es ue siestamos escribiendo una librer#a" en el fic%ero fuente de la librer#adeclarar#amos las variables devicename.CS devicename.CS.dircomoe)ternas" sin asi*narles nin*-n valor en particular. Ser#a el usuario en supro*rama uien diera valores a dic%as variables" en funcin de suconfi*uracin %ard/are4

    // Within library surce !ilee"tern s!r sbit devicename_CS;e"tern s!r sbit devicename_CS_dir;

    0n el fic%ero del usuario

    sbit devicename_CS at LATC.B1; // Chse yur #n $in heresbit devicename_CS_dir at TRISC.B1;

    'e esta forma el usuario puede ele*ir el pin a usar para cada monta,e odefinir diferentes pines para varios dispositivos" sin tener ue modificar lalibrer#a ori*inal.

    Terminaremos este tutorial usando las rutinas dadas en un pro*rama mu!sencillo ue estable7ca una simple comunicacin SPI entre un PIC $master&! un perif+rico $slave&.

    Conversor *i-ital Ana-ico (*AC) MCP022:

    0n la entrada Audio con P2 vimos como era posible usar la salida P2 delPIC como un conversor 'AC de conveniencia. Si se desean me,oresresultados e)isten por supuesto dispositivos 'AC espec#ficos.

    ?amos a mostrar como usar uno de estos dispositivos $2CP38(( de2icroc%ip&. 0S un conversor 'AC de 1( bits $3K niveles& alimentado conG? ! ue cuenta con dos canales independientes de salida.

    Lo ue nos importa en este caso es ue la comunicacin con dic%o 'AC es atrav+s de SPI. Adems se trata de

    una comunicacin mu! sencilla" perfecta para una primera prueba. 0lperif+rico recibe un slo tipo de mensa,e $de ( b!tes de tamaFo" donde sele especifica el volta,e deseado en uno u otro canal& ! no env#a nin*uno.

    0s por lo tanto una comunicacin unidireccional" en la ue esencialmente elPIC manda mensa,es con los volta,es deseados ! no %a! ue preocuparsede nin*-n protocolo de respuestas" validaciones" tiempos de espera" etc.

    3ard"are:

    http://www.blogger.com/blogger.g?blogID=4945680608471335280http://www.blogger.com/blogger.g?blogID=4945680608471335280
  • 7/24/2019 Principios de Comunicacion Spi

    15/19

    0l 'AC 2CP38(( es un inte*rado de 8pines cu!a descripcin se muestra en la fi*ura ad,unta. La alimentacin$?dd& es a G? por lo ue no tendremos problemas de cambios de nivel conrespecto al PIC. Los pines ($CS line& "E $Cloc& ! 3 $S'I& se usarn en lacomunicacin SPI. Jotad ue no %a! un pin S'

  • 7/24/2019 Principios de Comunicacion Spi

    16/19

    el perif+rico. 0n su datas%eet nos dicen ue soporta los modos SPI $K"K& !$1"1&. 'el momento de muestreo de los datos de entrada no debemospreocuparnos porue no e)isten.

    0n la docu tambi+n se nos informa de ue el dispositivo acepta %asta (K

    2N7 de relo, en la comunicacin SPI. 0n este monta,e esto! usando un relo,de 8 2N7" por lo ue puedo usar la frecuencia m)ima $osc93 M ( 2N7& !a-n as# estar mu! por deba,o de las capacidades del dispositivo.

    Una rutina ue iniciali7ase la comunicacin SPI con los parmetrosindicados usando las rutinas presentadas antes ser#a4

    3oid

    DAC_"0i_i$i#(41#e lo)6

    DAC_CS_dir=%9 de"ele#_DAC9

    && Co$i5!re CS li$e a" o!#0!# a$d "e# i# loF7"0i_+a"#er(lo)9 && Co$i5!re SPI a" +a"#er a$d "e# lo"0i_+ode(%,%,%)9 && SPI +ode (%,%)7 Tird ar5 doe"$# +a##er"0i_e$a4le()9 && E$a4le SPI;

    Respecto a la comunicacin en si" el -nico tipo de comando reconocido porel 'AC es un mensa,e de 1 bits4

    Los 1( bits menos si*nificativos contienen simplemente el volta,e deseado$un valor de K a 3KG&. 'e los otros 3 bits" solo E tienen una funcin4

    0l ms si*nificativo $X9@& indica el canal donde debe aparecer elvolta,e $K66A" 166@&. 0l tercero $W;A& nos permite especificar una *anancia. Si es K

    cubrimos el ran*o completo de volta,e $apro) de K a 3?& ! si es 1 solobarremos la mitad $de K a (?&.

    inalmente $WSN'& nos permite poner al dispositivo en un modoDapa*adoD $K&

    Por lo tanto si usamos el ran*o completo de volta,e los valores de esos 3bits sern KKK1 si ueremos usar el canal A ! 1KK1 si ueremos mandar un

    volta,e al canal @

  • 7/24/2019 Principios de Comunicacion Spi

    17/19

    inalmente las especificaciones tambi+n nos indican ue debemos mandarprimero el b!te ms si*nificativo. 'ado un uin1 $( b!tes& ue conten*a elmensa,e a mandar" el si*uiente macro lo mandar#a por la l#nea4

    dei$e

    "e$d_+"5(+"5) 6 "ele#_DAC9 "0i_#B(+"5>>

  • 7/24/2019 Principios de Comunicacion Spi

    18/19

    A partir de au# el pro*rama principal ueda simplemente4

    3oid

    +ai$()6!i$#'/ d=%9!i$#'/ +"59!i$#'/ 39

    DAC_"0i_i$i#(%)9 Dela1'KTCNB('%)9 && Co$i5!re SPI @o"&.

    File(') 6

    +"5 = d %B'%%%9 "e$d_+"5(+"5)9

    && al!e o d #o a$ A

    3 = #a4laJd%B@@9 3=.9 && 3 = '/ B 3al!e i$ "i$ arra1

    +"5 = 3 %B%%%9 "e$d_+"5(+"5)9 && al!e o 3 #o a$ 2

    d9 d=%B%@@@9 && i$re+e$# d a$d +ae" "!re i# re+ai$" Fi#i$ J%,.%:;

    ;

    0l resultado" visto en el osciloscopio para dos escalas de tiempo" es elsi*uiente4

    0l canal A $arriba& muestra la rampa del contador $de K a 3KG ! vuelta aempe7ar& ! el canal @ la sinusoide. La sinusoide es ms rpida ue la rampaporue cada ciclo se repite cada (G valores del contador" en ve7 de cada3K. Jotad tambi+n ue no estamos usando toda la resolucin del 'AC" !aue para el seno usamos un valor entre K ! (GG ue posteriormentemultiplicamos por 1. Por lo tanto los 3 bits menos si*nificativos del volta,e

    est a K.

  • 7/24/2019 Principios de Comunicacion Spi

    19/19

    0n el si*uiente tutorial pondremos a prueba nuestras rutinas SPI con une,emplo un poco ms complicado de interfa7 con un dispositivo SPI" enparticular una memoria flas% $2(GP8K de 1 2b!te de capacidad&" dondetendremos comunicaciones en ambos sentidos.