Upload
others
View
14
Download
0
Embed Size (px)
Citation preview
Las mejores herramientas para empezar a desarrollar con PIC Micros (bootloaders,
programadores, gnu tools...) Ing. Francisco J. Zamora N. [email protected] Enlace: ** última versión en línea actualizada disponible en googledocs **: ( https://docs.google.com/document/d/1K_J5ljXkVMCWX7B4hTYMeb_u6JLW3a9fQDkFRJw_x60/ ) Versiones [1, Agosto 2014],[1.1, Octubre 2014][1.2, Diciembre 2014][1.2.1 Enero 2015, 1.2.2. Marzo 112015][1.2.3 Abril 062015][1.2.4 Abril 152015][1.2.6 Octubre 262015]
Introducción
Este documento tiene por objeto ser la guía definitiva de novatos y expertos sobre el uso de cargadores de arranque (principalmente libres) y diseño de sistemas de desarrollo, para PIC micros, recopilando los mejores que se encuentran disponibles en Internet( para 16F, 18F especialmente, pero también para 24F, 30/33F, PIC32), y también brinda referencias sobre la construcción de programadores/depuradores al estilo "hágalo ud mismo" (DIY, y algunos comerciales), así como los ajustes que se deben hacer en el código fuente del usuario (relocalización de vectores, reubicación de código fuente, scripts y comandos del linker, etc.) cuando se usan bootloaders en PIC micros. No se podían omitir las referencias sobre el uso de Eclipse como IDE alternativo para PICs en lugar de MPLABX o MPLABIDE.
Figura 1. Boards CEX, la nueva comunidad latinoamericana para sistemas embedded
En particular en este momento (2015III) existe la necesidad de orientar a muchos usuarios de PIC18F sobre la migración "sin dolor" de PIC18F(45)2550 a los nuevos PIC18F(45)25K50. Además se prevé que Microchip continuará desarrollando nuevas MCU bajo la política de CIP ( core independent peripherals , en especial para los 16F1XXX pero también en PIC18F) por lo
que hoy más que nunca se debe estar atentos a estos cambios y sus tendencias con el fin de no quedar rezagados. Las principales ventajas de estos nuevos (2012) dispositivos K radican en que los pueden operar como device USB 2.0 sin oscilador externo, tienen más memoria de programa (según referencia) y cuestan casi la mitad que los tradicionales 18F(45)2550. La desventaja, no son soportados por compiladores como HiTech PICC18, aunque si por MCC18 (fin de soporte en 2013) y también por XC8 obviamente, pero aunque Microchip recomienda migrar a XC8, el modelo de costo de licencia anual del compilador (más de U$1200) en versión PRO es una gran restricción para los hobbistas y la academia, y el disponer de una versión libre (pero que produce código final hasta 4 veces más lento y 4 veces más extenso) no es un buen incentivo para la adopción de este nuevo compilador (que reúne lo mejor y lo peor de los compiladores de HiTech PICC y Microchip MPLABC ). En esta coyuntura, resulta mejor opción tal vez trabajar entonces, por ahora, con versión de evaluación (u otras non sanctas) de microchip mplab C18 (MCC18 v3.47 última versión y final). Las principales diferencias entre MCC18 y XC8 se pueden apreciar en la nota de aplicación "migration guide" y en muchos sitios como por ejemplo este blog . Nota : aún continúa la discusión sobre la migración de facto a arquitectura ARM de 32 bits (por ejemplo Kinetis de Freescale, NXP, ST, TI, ATMEL) dado que los precios de sus MCU, particularmente Cortex M0 y M0+, compiten seriamente con los precios de las MCU de 8 bits (que actualmente prácticamente solo ha quedado liderando Microchip) pero los superan de lejos en rendimiento y tienen un sin fin de herramientas de desarrollo libres o de muy bajo costo (boards de menos de U$15 dólares). Sin embargo para las MCU de 8 bits, en latinoamérica, la disponibilidad inmediata y variada de partes con encapsulados PDIP, operación a 5V, inmunidad a ruido industrial automotriz, robustez ante sobretensiones y corrientes, programadores de bajo costo (el más económico de ARM cuesta U$60 y en versión educativa), diversidad de arquitecturas y dispositivos que se ajustan a cada aplicación, facilidad de trabajar en Assembler (35 instrucciones en gama media PIC16F), lo cual facilita la enseñanza a fondo de la arquitectura y periféricos básicos en los primeros cursos, para ingeniería especialmente, la enorme cantidad de diseños de referencia, ejemplos de código y comunidades que soportan proyectos y diseños, todo ello hace que la inevitable migración a ARM se esté dando a paso lento y tal vez en algunas aplicaciones nunca se de. Pero por otro lado la demanda de desarrollos para el IoT (internet de las cosas) y el IoE (internet de todo) obliga a los diseñadores de sistemas Embebidos a dominar nuevos conocimientos y tecnologías que no pueden ser implementadas en 8 bits sin sacrificar velocidad, funcionalidad e interconectividad. Se prevé por ende que es pertinente replantear el ecosistema de sistemas digitales incluyendo a todos los actores (8, 16, 32, 64 bits, MCU, MPU, DSP, SOIC, FPGA…), así como la tecnología de información y comunicaciones, seguridad, sensores, entendiendo que no todos deben conocer todo a fondo, ni demeritar el conocimiento ajeno, pero sí seguramente ser expertos en algunas disciplinas y tecnologías de su preferencia, y estar dispuestos a proponer y vincularse al desarrollo de proyectos por equipos de trabajo y donde cada quien aporta su saber y experiencia a la construcción de sistemas modulares cuya complejidad y diversidad ya no se puede manejar individualmente ni mediante una única tecnología. En aras de esa especialización propuesta, se debe mirar con cuidado la tecnología y herramientas que se
escogen en todo caso, de manera muy atenta a las noticias del mercado digital, pues empresas líderes como Freescale y ATMEL han sido adquiridas por otras (NXP y Dialog) y puede suceder o no que los productos, herramientas y servicios en los cuales se basa nuestro conocimiento y experiencia desaparezcan total o parcialmente del ecosistema tecnológico impactando nuestra competitividad educativa y laboral. Programadores, depuradores ICSP, bootloaders
Un programador es un sistema que se encarga de descargar o transferir desde un PC (o similar) código de máquina proveniente de compilado o ensamblado (y en ocasiones también de depurar o permitir la ejecución controlada y condicional de programa) hacia otro sistema destino (target) que contiene un dispositivo programable, como un microcontrolador, siguiendo los procedimientos de la especificación de programación para el dispositivo, establecidas por el fabricante. Actualmente la mayoría de programadores soportan acceso al sistema final (In Circuit SystemSerial Programming ICSP) a través de un conector adecuado (y ciertas 1
consideraciones sobre uso de los pines de programación que deban ser reutilizados dentro de la aplicación final), para no tener que remover y reubicar desde su placa final los dispositivos programables para su programación o actualización. Los programadores/depuradores soportan una amplia gama de familias y dispositivos programables de uno o varios fabricantes. Su costo depende precisamente de la gama de funciones que ofrezca, de su velocidad, y especialmente de su confiabilidad ( destinado a producción o a prototipado). Cabe aclarar que un mismo programa puede ser transferido a la MCU de dos formas: para ejecución (run o versión de “producción”) o para depuración (debugging). La versión de depuración contiene, además de la funcionalidad del programa de usuario en modo producción, código especial que permite la comunicación del PC y el target para ejecutar funciones como breaks o pausas condicionales, consulta de registros del sistema o de usuario, entre otros, y por ende, suele ocupar mayor tamaño en memoria FLASH y RAM (el formato además suele ser un archivo .COF y no el archivo normal .HEX). Un cargador de arranque ( bootloader ) es una aplicación (parte en PC, parte en target) que transfiere directamente el código de máquina desde PC (o similar) hacia el dispositivo programable (target), a través de un puerto (serial) estándar de comunicación (COM, USB, SPI, I2C, CAN, ethernet, etc.) sin intermediación de hardware especializado de programación, lo cual es posible si el dispositivo programable (target) cuenta con la funcionalidad de modificar su propia memoria de programa en tiempo de ejecución (la mayoría de MCU modernas lo permiten), ya que la aplicación de bootloader corre directamente desde el target. En este sentido el sistema admite sólo la reprogramación de memoria disponible en el target, evitando sobre escribir el bootloader. Muchos dispositivos antiguos sólo podían programarse en un modo especial que se inducía a través de señales de alto voltaje (pulso de programación Vpp)
1 Aunque el conector oficial ICSP tiene una sexta señal (generalmente no utilizada o conectada) conviene no eliminarla, ya que una conexión al revés incidental en un conector de solo 5 pines podría aplicar la señal de alto voltaje Vpp a uno de los pines de programación del micro, dañándolo irreversiblemente.
en terminales especiales, pero no permitían la modificación de su memoria de programa a través de instrucciones o procedimientos disponibles en tiempo de ejecución de código. Algunos dispositivos más antiguos (comienzos de los 90´s, p.e. PIC16C5X), incluso requerían programación paralela (en la MCU, no en el puerto PC, caso programador PICStart Plus ya obsoleto). Estos dispositivos en consecuencia no soportan un cargador de arranque y solo pueden programarse a través de hardware y software especializado de programación. Algunos fabricantes suministran una aplicación bootloader preprogramada en fábrica y en bloques de memoria especiales diferentes a la memoria de programa del usuario (boot block). Pero frecuentemente el cargador de arranque es suministrado por terceros, ocupa porciones de la misma memoria de programa de la aplicación de usuario que ejecutará el target, por lo que debe ser lo más compacto y veloz posible, debe poder protegerse a sí mismo contra sobreescritura accidental o intencional, y debe grabarse la primera vez en el target por métodos convencionales de programación (ICSP), antes de su uso sucesivo para reprogramar la aplicación del usuario. La técnica de bootloader es también frecuentemente utilizada para actualización (remota) de firmware, además de fines de desarrollo y prototipado. Actualmente también existen sistemas de desarrollo que poseen la funcionalidad de cargador de arranque pero para lenguaje de desarrollo diferente a assembler, C o C++. Estos sistemas emplean frecuentemente un conjunto de herramientas de desarrollo encapsuladas en una única aplicación ejecutable de PC ( framework , para varios sistemas operativos), y basadas en un lenguaje similar a C++. Una de las más populares es Arduino (originalmente para Atmel AVR ATmega, basada en Processing y Wiring por el arquitecto colombiano Uniandino Hernando Barragán). Existen también clones del framework de Arduino para otras MCU, como las PIC32 denominada MPIDE y se implementa en los sistemas chipKIT de Digilent, o versiones para PIC16F, como el Pingüino. Para el caso de Texas Instruments es popular el framework denominado Energia (para la familia Tiva ARM cortex M4). A continuación (Tabla 1) se referencian algunos programadores, cargadores de arranque y sistemas de desarrollo populares (para aprendizaje y prototipos) que se encuentran referenciados en Internet para PIC micros (excluyendo por supuesto las herramientas profesionales de costos altos como ICD 3, Real ICE y similares recomendadas por Microchip) y al final unas reflexiones sobre lo que debería ofrecer una herramienta “ideal” para aprendizaje y desarrollo de aplicaciones para MCUs: Tabla 1. Cargadores de arranque, programadores y depuradores populares para PIC micro
Nombre Diseño Tipo Enlace Comentarios
CEXduino Sistema de desarrollo
PIC18F25K50 con USB bootloader y compatible con
hardware Arduino
cex.com.co Diseñado en Medellín Colombia por José Daniel Peña y Francisco Javier Zamora. Soporte en comunidad ConEXpertos. Periféricos: acelerómetro, led RGB, botones,
potenciómetro, OpAmp, USB, ICSP.
CEXnano Sistema de desarrollo
PIC18F25K50 con USB bootloader y compatible con protoboard
cex.com.co Similar a CEXduino pero simplificado: solo RGB, botón desnudo (pads pcb), USB, ICSP y conectores para protoboard. Soportado en comunidad ConEXpertos.
CEXpk2 ConEXpertos, Clone PicKit2 simplificado
cex.com.co
Diseño simplificado no verifica ni establece control sobre voltaje en la señal Vpp, ni alimenta el target con Vdd, pero posee conector para hardware complementario que si realiza ello. Proof of concept, actualmente se vende sobre pedido únicamente. Los PK2 no pueden programar MCU recientes, Microchip no da soporte aunque hay un blog que indica cómo agregar nuevos dispositivos no soportados a la base de datos del PK2.
Open Source PIC bootloaders
Sitio Web con información sobre PIC (opensource)
OpensourcePIC.org
Información sobre varios recursos PIC y mejores bootloaders seriales, usb, otros, pic16, 18,24,32.
Pickit 3 Debug Express
USB, programmer / debugger.
Comercial. Microchip + Demo board
● Pickit 3 ● Pickit 3
Debug Express
Sucesor de pickit 2, no tiene clones confiables?! aún (2014), soporta practica mente todos los PIC modernos, incluyendo PIC32. Es más lento que pickit 2 y tiene menos funciones adicionales (p.e. carece de analizador lógico) pero es la herramienta de bajo costo recomendada luego del ICD 3 . Versión Debug Express viene con demo board de 18F45K20.
Pickit 3 clones Clones de PK3 de Microchip
● Building a PK 3 clone
(selfclue ++)
Self.Clue ++ reporta éxito en construcción en impreso “universal” y pruebas protoboard de PK3 clone según esquemático y firmware liberado por
● Olimex PK3 clone
(comercial) ● PK3 clone
chino comercial
Microchip. Reconocible por scripting tool y mplabX. Usa eeprom spi. La versión de Olimex tiene un precio adecuado (alrededor de U$30) y algunos plus, pero envían desde UK. El PK3 clone chino indicado vale menos de U$21 dolares puesto en Colombia, pero eso sí, recuerde que el envío puede tardar más de 2 meses.
USB open programmer
programador USB HID para PIC y AVR,
abierto GNU2. V 0.9
Open Programmer
Proyecto desde 2007 hasta presente, código fuente propio para firmware HID (18F2550) y PC disponible, Windows y Linux, GUI y Consola. Esquemáticos, tarjetas de expansión según familias MCU y Vdd de dispositivos. Autor Alberto Maccioni brinda soporte por email. Interesado en apoyar migración a 18F25K50.
USB bootloader para PIC18F25K50
bootloader C18 USB para dispositivos K.
Foro.
USB bootloader 18F25K50
Bootloader para nuevos dispositivos K, C18, proyecto para mplabX basado en Microchip Application Library (MAL). Blog de Raul de Pablo.
USB bootloader PIC18F24K50
Bootloader en ASM, menos 2K tamaño.
(Versión cex.com.co basada en éste)
Bootloader 18F24K50
Inspirado en desarrollo de SAKA, japonés, para el JAKADAPTER. Compatible microchip HID bootloader.
Clone Pickit 2 USB programmer /debugger/PIC18Dev
Tool
● PK2 el mejor? ● junebug
● pickit 2 clone < U$ 5.00 (India)
● PK2 clone 3.3V & 5.0V
● PK2 3.3V compatible AVRdude (Polonia)
● Connectable UK
El primer enlace es tal vez el mejor PK2 clone 3.3 y 5.0 V hasta el momento (circuit valley) Su foro tiene soporte actualizado hasta la fecha (2014). Junebug es otro de los mejores clones de pickit 2 que incluye entrenador de PIC18F1320 además (pero blueroom electronics ya no existe desde hace varios años). Puede ser manipulado el diseño para ajustarse a diferentes necesidades: agregar socket ZIF y jumpers, módulos de expansión, etc. Es la base de la mayoría de programadores caseros que se consiguen en mercadolibre.com.co y en la “novena”. Lamentablemente
el PICKIT 2 no es soportado plenamente por MPLABX, solo por el anterior MPLAB IDE 8.X (descontinuado en 2013) y no soporta todos los PIC32.. Es posible ampliar lista de dispositivos soportados con editor especial externo (algo complejo). Es posible reducir componentes al mínimo (menos de U$5.00). El PK2 cuenta con una aplicación propia para windows que le permite funcionar como analizador lógico de 4 canales y terminal serial. Tambien puede programar PICs sin conectarse a PC (standalone programmer) si se instalan memorias eeprom i2c. El clone de Connectable en UK brinda un esquemático muy limpio pensando en posibles actualizaciones de MCU a las nuevas partes 18F25K50 de microchip.
PICkit 2 Microchip PC and MCU source
code
Source code C18 and CPP for PC
(2005)
● PK2 Microchip
codigo fuente liberado (V1)
● Portar código a 18F25K50
● PICDEM FS USB
bootloader portado a 18F25K50
● Bootloader ASM
18F25K50 ● Bootloaders
PIC relacionados
mikroC ● Bootloader
18F25K50 para Pingüino
Grupo de Google con enlace a código fuente mencionado (Versiones iniciales de 2005). Requiere C18 (MCU) y para versión en PC (PK2 app) reportan que funciona con compilador Borland C++ que puede conseguirse sin costo. Foros con información sobre portar código a dispositivos K. Bootloader en assembler. Bootloaders para varios PIC relacionados con mikroC y C18. Bootloader K50 para Pingüino.
Microchip Microstick II
programador, depurador propio,
DevTool para ciertos PIC24, dsPIC y
PIC32MX (PDIP 28)
microstick II Excelente herramienta y costo (U$ 35) para estas gamas de MCU y DSC. Solo falta soporte para PIC18 y factor de forma Arduino y sería la herramienta perfecta
para aprendizaje de toda la gama de PIC Micros! Solo programa y depura los chips mencionados que se coloquen en el zócalo DIP28.
ChipKIT de Digilent Bootloader para PIC32, framework MPIDE compatible
con Arduino
ChipKIT.ne t Framework tipo Arduino implementado sobre arquitectura PIC32MX y MZ.. Diferentes placas base, con shield arduino, y funciones ajustadas a varios perfiles de aplicaciones (basico, internet, industrial, etc). Requiere hardware programador adicional para desarrollar desde MPLAB IDE o MPLABX.
Micromite bootloader y MS BASIC interprete
para PIC32MX (28 y 44 pines)
Micromite II bootloader USB + firmware BASIC que se puede trabajar desde una consola serial y aplicación de PC para programar. Implementa todos los protocolos seriales. FW disponible gratis. PIC32 debe ser programado por PK3 preferiblemente, o similar.
Bootloader dual diseñado por
Francisco Zamora y estudiantes (OFL
1.0)
Bootloader PIC, USB/Serial (18F y
16F)
● Fotos ● Esquema ● Manual
Usuario
Una placa que soporta bootloader serial (como Tiny PIC) o USB (como Microchip HID o Diolan). Permite conectar alimentación externa y la regula, o se alimenta por USB. Posee conversor TTL/RS232 discreto con transistores. Configurable con Jumpers, posee buzzer, leds, botones, potenciómetro, socket I2C, oscilador configurable, soporta MCUs con PDIP 40 y PDIP 28.
Tiny PIC bootloade r Bootloader Serial (PIC16F,18F y tal vez otros). El más pequeño y ágil en
flash: 100 instrucciones!
Claudiu Chiculita, Rumania
Para PIC16F, 18F, dsPIC, PIC24 (ver lista compatibilidad). Solo 100 instruc ciones parte alta de memoria. El más pequeño, el más rápido. En ASM. El único defecto: requiere conversión USB/Serial y alimentacion externa, pero dado que las prácticas de laboratorio también lo requieren, no sería problema.
Diolan PIC18 USB bootloader (comercial)
Bootloader USBHID ● Diolan ● Comentarios
sobre Diolan Bootloader
Gratis, enumeración HID, código disponible en ASM, Esquemático no disponible (intuitivo). Producto versión comercial, encripta firmware
opcional pero, key debe comprarse (p.ej. para brindar FW de actualización a cliente y que éste no lo pueda reproducir). Ocupa menos 2KB de memoria baja de PIC. Utiliza Enhanced Instruction Set (EIS) de PIC18, no soportado por mayoría compiladores C para PIC.
Diolan plus 2 bootloader GitHub
Bootloader USB PIC18F
Diolan plus 2 GNU
Código ASM abierto disponible, basado en instrucciones convencionales PIC18F (no utiliza EIS), funcionalidad de encripción de FW. Menos de 2KB en boot sector de FLASH. Utiliza Bootloader HID de Microchip en lado PC.
USBHID USB IR Toy Modificación, basada en Diolan Bootloader, para escanear y reproducir señales infrarrojas en controles remotos. Esquemático disponible.
USBHID (revisiones) ● Otra versión Diolan
● Rado´s Web Page
● Erricous Web
Otras versiones basadas en Diolan Bootloader. Esquemáticos disponibles aunque probablemente no sean originales (primer link).
Microchip PIC 18 USB bootloader
Bootloader USBHID, modo bootloader:
_RB4_
● MCPUSB ● MCHP USB
bootloader ● Compiling
for a bootloader with MCC18
Libre, por Microchip. Código fuente en MPLAB C18. Aplicación en PC para PICDEM 2. Uso no es trivial, requiere manipulación de archivos HEX antes de cargar en MCU vía USB. Microchip USB framework 2.7. Se indica también cómo compilar código para bootloader HID en MPLAB con MPCC18.
Microcontroller and PLD projects
18F CDC bootloader PIC18F2550 CDC assembly bootloader
Versión no depurada. Requiere USB ID. Basado en microchip. Ocupa Menos de 2K flash. Genera puerto serial virtual en PC para comunicación UART sin usar pines reales en MCU.
PICKit 2 Clone AU Group Electronics
(comercial)
UnderstandingPK2 hardware
PK2 AU Group ElectronicsBlog
PK2 clone mejorado con hardware buck converter para estabilizar voltajes Vdd y Vpp a partir de Vusb de mínimo 3 V. No es diseño abierto, es un producto comercial. Documentan el
hecho de que los 18FxxKxx tienen especificaciones de Vpp sensibles (máximo igual a Vdd para 3.3V o a 8.5V para Vdd = 5V, que deben limitarse para no destruir dispositivo durante programación).
USBHID, MCHP USB framework 2.7
picprojects.net Basado en Microchip USB Framework 2.7, como el anterior, pero detalla por menores y ajustes requeridos y brinda app de PC opcional menos complicada.
Pololu P Star 25K50 (comercial)
Bootloader USB, PC app en GitHub. Modo bootloader:
_RB5_
PStar 25K50 Aplicación bootloader PC libre, GitHub, para Windows, Mac y Linux, pero firmware propietario, solo disponible al adquirir dispositivo. Muy pequeño en tamaño (1 pulgada). Inspiración para CEXnano.
Breeze B Dizzy Enterprises, sist. desarrollo tipo
arduino PIC18F25J50
Breeze B Compatible con expansiones Arduino y mikroBus (click). Socket SD. Bootloader USB 2.0 con código fuente y esquemáticos.
Pingüino USB/bootloader/ Arduino Framework
PIC 18
tiny 2550 Este bootloader implementa el framework de Arduino, es decir, no permite crear código en ASSEMBLER o C tradicionales, solo en lenguaje de Arduino.
Programador tipo JDM
(obsoleto)
Serial, reconocido por software
WinPIC800, IC Prog y similares.
(PIC10,12,16, 18 y otros No funciona con convertidores USB/Serial, solo COM originales de
PC o Laptop)
● JDM2 programmer (business card)
● Programador Serial tipo
JDM
Es un diseño antiguo, pero de muy fácil construcción, que generalmente solo funciona bien en puertos COM de PC y falla frecuentemente con convertidores USB/SERIAL en portátiles (debido a insuficiente nivel de tensión Vpp). Escaso soporte para nuevos PIC micro. Existen versiones más modernas USB, pero el firmware para PIC18F2550 del programador no es gratis. Preferible un clon tipo pickit 2.
USB/Serial IO board Convertidor USB/Serial en C# con PIC18F2550
USB IO board Detectado como puerto COM al conectar 18F2550 a USB. Controla pines IO del micro mediante comandos seriales. Firmware y Código C# disponibles.