Академический Документы
Профессиональный Документы
Культура Документы
PatricioCoronado,SEGAINVEXELECTRONICA(UniversidadAutnomadeMadrid)marzode2013.
Figura1.Circuitoparacomunicarelmicrocontrolador89LPCXXXyelPC 1
Figura2.Conexindelmicrocontrolador Enesteejemploconcreto,vemosqueelmicrocontroladorsealimentaconlos3,3Vpresentes enelpin17delintegradoFT232.Elpin4dedichointegradotambinseconectaalos3,3 voltiosparaquelosnivelesdeTXDyRXDseantambinde3,3V.Aunqueelmicrocontrolador soportenivelesde5Venestospines,apesardeestaralimentadocon3,3V. 2. Softwareparaprogramarlamemoriaflashdelmicrocontrolador ParaprogramarlamemoriaflashdelmicrocontroladordesdeelPC,utilizaremoselprograma deNXP(Philips)FlashMagic.Estdisponibledeformagratuitaen: http://www.flashmagictool.com/download.html Unavezbajadoeinstalado,loejecutamos.Vemoslaventanadelafigura3.
Figura3 EnlapartedeStep1Communiations,conelbotndeSelect..seleccionamosel microcontroladorqueestemosutilizando.EnlalistadesplegableCOMPort:Seleccionamos elpuertovirtualenelquesehainstaladoelCOMquecomunicaconelintegradoFT232RL,oel puertoCOMfsicoconelqueestemosconectandoalmicrocontrolador.ElBaudRatelo ponemosenprincipioa9600ysihayproblemasdeconexinlobajamos.EnInterface seleccionamosNone(ISP). EnlapartedeStep2EraseMarcamoslacasillaEraseblocksusedbyHexFile EnlapartedeStep3 HexFileBuscamosconelbotnBrouseelficherodenuestro programaconextensin.hex.Tambinsepuedeaccederalficherodeprogramaatravsdel menFileyOpen. Elrestosedejacomoseveenlafigura3.
Figura4 Unaprecaucinbsica,esevitarqueelsectordelaflashdelmicrocontroladordonderesidela rutinadebootloaderseborreoreprograme.ParaesoenOptionsAdvancedOptions marcamoslacasillaProtectISPCode.Figura4. 3. Programandoelmicrocontroladorporprimeravez Elmicrocontroladortieneunbitenunazonareservadadememoria,denominadoStatusBit, quedefbricaesta1.Cuandoseconectaporprimeravezelmicrocontroladorydebidoaque elStatusBitesta1,seejecutaunarutinainternadenominadabootloaderquenos permiteborraryescribirlamemoriadecdigo,pudiendoasgrabarelmicrocontroladorconel programadelusuario.Unavezprogramadoelmicrocontrolador,elStatusBitseponea0.De modoquetrasunreset,seejecutarelcdigodeusuario. Sielmicrocontroladoresnuevo,podemosverificarqueseestejecutandoelbootloader,con FlashMagic,pulsandoISPyReadSecurity.FlashMagicleeelmicrocontroladorynos muestraelestadodelosbitsdeseguridad,comoseveenlafigura5.AquesdondeFlash Magicnospuedepresentarunpopupinformandoquenohapodidoconectarconel microcontrolador.Entonceshayquebajarlosbaudioshastaqueconsigaconectar.Enel ejemploconectabamejorbajandoelbaudratea4800bps.
Figura6 4. Reprogramandoelmicrocontrolador Siqueremosreprogramarelmicrocontrolador,hayquehacerqueesteejecutelarutina internabootloader. Unodelosmtodos(elqueusaremosaqu)paraconseguirqueelmicrocontroladorentrede nuevoenlarutinadelbootloader,eseldeenviarleunBreakConditionatravsdelpuerto seriedelmicrocontrolador.Pero(yestoesmuyimportante)paraqueelmicrocontrolador reconozcaunBreakConditiontienequetenerhabilitadoyconfiguradoelpuertoserie. Tratarestoenelsiguienteapartado. ParaenviaralmicrocontroladorunBreakConditionporelpuertoserie,enFlashMagic, pulsamoselmenISPyStartBootloader.Figura7.
Figura7 PulsandoelbotnStartBottloader,FlashMagicenvaunpulsobajodeunos270msalpinde RXDdelmicrocontrolador.Tardaunossegundos.Despusdeestoelmicrocontroladorestar ejecutandoelbootloader.Podemoscomprobarloleyendolosbitsdeseguridadcomohicimos enelapartadoanterior.Yapodremosreprogramareldispositivo,leyendoelficherode programapulsandoenelmenFileyOpen.FinalmentepulsamosStart. 5. InicializarlaUART(puertoserie)delmicrocontrolador Comodijeenelapartadoanterior,paraquetodoestofuncione,nuestroprogramadeusuario queestcorriendoenelmicrocontroladordebehaberconfiguradoyhabilitadoelpuertoserie. UnejemplodecdigoparainicializarlaUARTeslafuncin: voiduart_init(void){//ConfiguralaUART //SM0ySM1configurarenmodo1
PCON&=~0x40;//PoneelPCON.6=SMOD0a0paraaccederalSM0ySM1delSCON SCON=0x50;//(SM0=0SM1=1UARTmodo1)&(habilitalarecepcinSCON.4=REN=1) SSTAT=0x00;//RegistrodeestatusdelaUART(variasfunciones) AUXR1|=0x40;//habilitalarecepcindeunbreakdetect //configuraelbaudrategeneratorCCLK=7.373MHzy9600baudios BRGCON=0x00;//AccesoaBRGR0/1habilitado BRGR0=0xF0;//paraconseguir9600 BRGR1=0x02; BRGCON=0x03;//AccesoaBRGR0/1inhabilitado //TxD=pushpull,RxD=inputconfiguracindepinesdecomunicacin P1M1&=~0x01; P1M2|=0x01; P1M1|=0x02; P1M2&=~0x02; }//uart_init NoesnecesarioconfigurarelpindetransmisinTXD,sisoloseusalaUARTpararecibiruna breakcondition.PerosihayquetenerlaprecaucindequeRXDseaunaentrada. EnestecasoelCLKdelsistemaeslaRCinternadelmicrocontrolador,de7.737MHz.Paraotra fuentedeCLKdefrecuenciadistinta,hayqueprogramarlosregistrosBRGR0yBRGR1con valoresdistintos(consultarlauserguidedelmicrocontrolador). TambinhayquetenerencuentaquesilaUARTseponeenpowerdownoelsistemaentra enpowerdown,laUARTquedadesabilitada. Paraverendetallecmoseconfiguraelpuertoserierevisarlaguadeusuariodel microcontrolador.Paragenerarcdigoqueconfiguraelpuertoserie(yotrosrecursos),verla web: http://www.codearchitect.org/nxp/v2/index.php?co_tree= 6. Comoreponelarutinadelbootloadersisehaborrado Larutinadelbootloaderestenunsectordelamemoriaflashdelmicrocontrolador.Sieste sectorseborraosereescribe,perderemoslaposibilidaddereprogramarelmicrocontrolador delaformavistahastaahora.Unasolucinaestoesreprogramarleelbootloader(quete puedesbajardelawebdeNXPSemiconductors)conunprogramadorparalelo.
10
Figura10
Figura11 11
.NospreguntarsiqueremosincluirelcdigoStartupennuestroproyecto.Lecontestamos ques.PulsandoenlapestaaProjectabajoalaizquierda,vemosnuestroproyecto.Figura 11. Ahoratenemosquecopiarelcdigodelbootloaderdenuestromicrocontroladorenlacarpeta delproyectoqueacabamosdecrear.Luego,eneluVisionpicamosconelbotnderechodel ratnsobreSourceGroup1yseleccionamosAddFilestoGroupSourceGroup1y buscamoselficheroconextensina51dondeestelcdigodelbootloader.Paraquesenos muestrentodoslosficherosdeldirectoriodenuestroproyecto,enTipo:hayqueseleccionar Allfiles.Ahorayavemoselfichero,loseleccionamos,pulsamosAddyClosed.Yaestel ficheroincluidoennuestroproyecto. SeguidamenteseleccionamosFileyNewdelmen.Ascreamosunficheronuevo,enel queescribimosunafuncinmainsinnada. voidmain(){} Salvamoselficheroconelnombremain.cyloincluimosenelproyecto,comohicimosantes. Anquedanunpardepequeos(peroimportantesdetalles).
Figura12
12
Figura13 Yapodemoscompilarelproyectopulsandoeliconocomoseveenlafigura14
13
Figura14 ElproyectosecompilaysegeneraelficheroRecuperarBootloader.hex.Ahorahayque programarelmicrocontroladorconesteficheroconunprogramadorparalelo. 7. Programarelmicrocontroladorconunprogramadorparalelo EnnuestrolaboratoriotenemosunprogramadorDataman40Pro. ParaprogramarelmicrocontroladorabrimoselsoftwaredelprogramamdorypulsandoF3se abrelaventanadeLoadFile.BuscamosnuestroficheroRecuperarBootloader.hexylo abrimos. Alpicareliconodeprogramarseabreunpopupdeopciones,dondehayqueasegurarsede queelsectordelbootloadersevaaprogramar.Figura15.
14
15