Saltar al contenido principal

Programador Multi-Protocolo

VersiónLenguajeLenguajeLicencia
Programador Multi-Protocolo
⚠️ ADVERTENCIA IMPORTANTE

El usuario debe cargar el firmware específico según sus necesidades.

Este programador requiere que cargues el firmware correspondiente al protocolo que deseas utilizar:

  • Firmware AVR para dispositivos ATmega/ATtiny
  • Firmware CMSIS-DAP para microcontroladores ARM Cortex-M
  • Firmware CPLD para dispositivos Intel/Altera MAX II

Sin el firmware apropiado, el dispositivo no funcionará correctamente.

Descripción General

El Programador Multi-Protocolo es un dispositivo USB versátil basado en el microcontrolador CH552 que soporta múltiples protocolos de programación y depuración. Compatible con dispositivos AVR, ARM Cortex-M y CPLD Intel/Altera MAX II.

Características Principales

  • 🔌 Interfaz USB Full-Speed (CDC/HID según firmware)
  • Selector de voltaje: 3.3V / 5V con interruptor
  • 🔄 Firmware intercambiable para diferentes protocolos
  • 🛠️ Compatible con herramientas estándar de la industria

Recursos y Documentación

RecursoDescripciónEnlace
📚 Documentación CompletaGuía detallada del programadorVer Documentación
🚀 Primeros PasosTutorial de configuración inicialComenzar Aquí
📋 EsquemáticoDiseño del circuito electrónicoVer Esquemático
🔧 Diseño PCBArchivos de diseño de la placaVer Diseño
💻 FirmwareCódigo fuente y binariosVer Código
🧪 SDK de DesarrolloHerramientas para CH55xVer SDK
📦 Repositorio PrincipalCódigo fuente completoGitHub

Especificaciones Técnicas

Hardware Base

  • Microcontrolador: CH552G / CH552E / CH552P
  • Interfaz USB: Full-Speed (12 Mbps)
  • Alimentación: Bus USB (5V) con regulador interno
  • Voltaje de salida: Seleccionable 3.3V / 5V mediante interruptor
  • Conectores: Pin headers estándar para conexiones de programación

Protocolos Soportados

  • 🔌 AVR: USBasp, Serial UPDI
  • 🛡️ ARM: SWD (CMSIS-DAP)
  • ⚙️ CPLD: JTAG (compatible con USB-Blaster)

Perfiles de Firmware Disponibles

📋 Selección de Firmware

Cada firmware está optimizado para un tipo específico de dispositivo. Debes cargar el firmware correcto antes de usar el programador.

1. 🔧 Firmware Programador AVR

Para microcontroladores AVR (ATmega, ATtiny, etc.)

Características:

  • Protocolos: USBasp
  • Dispositivos objetivo: Toda la familia AVR de Microchip
  • Interfaz USB: HID (USBasp) / CDC (Serial UPDI)
  • Voltaje: Seleccionable 3.3V o 5V

Herramientas compatibles:

  • avrdude
  • ✅ Arduino IDE

Compilación:

# Compilar con SDCC 
make all

# O flashear binario precompilado
python3 ./tools/chprog.py build/main.bin

Ejemplo de flasheo de binario precompilado:

nota

Python3 es nativo en la mayoría de distribuciones Linux, pero puedes instalarlo en Windows o macOS con soporte limitado.

make flash 
Compilando main.c ...
Compilando src/delay.c ...
Compilando src/isp.c ...
Compilando src/tpi.c ...
Compilando src/updi.c ...
Compilando src/usb_asp.c ...
Compilando src/usb_cdc.c ...
Compilando src/usb_descr.c ...
Compilando src/usb_handler.c ...
Enlazando IHX...
Generando BIN...
------------------
FLASH: 5341 bytes
IRAM: 36 bytes
XRAM: 480 bytes
------------------
Eliminando temporales...
Flasheando a CH55x...
Connecting to device ...
FOUND: CH552 with bootloader v2.5.0.
Erasing chip ...
Flashing build/main.bin to CH552 ...
SUCCESS: 5341 bytes written.
Verifying ...
SUCCESS: 5341 bytes verified.
DONE.
💡 Nota Técnica

El modo USBasp se enumera como dispositivo HID, mientras que Serial UPDI utiliza puerto CDC virtual.


2. 🛡️ Firmware Depurador ARM (CMSIS-DAP)

Para microcontroladores ARM Cortex-M

Características:

  • Protocolos: SWD y JTAG (estándar CMSIS-DAP)
  • Dispositivos objetivo: STM32, PY32, RP2040, etc.
  • Interfaz USB: HID + CDC opcional

Herramientas compatibles:

  • OpenOCD
  • ✅ PyOCD
  • ✅ Visual Studio Code (Extensión PlatformIO)
  • ✅ Visual Studio Code (Extensión Raspberry Pi Pico)

Controladores:

  • Linux/macOS: Soporte nativo (sin drivers adicionales)
  • Windows: Drivers automáticos via WinUSB
⚠️ Compatibilidad

Algunos IDEs pueden requerir configuración específica para reconocer el dispositivo como CMSIS-DAP.


3. ⚙️ Firmware Programador CPLD

Para dispositivos Intel/Altera MAX II

Características:

  • Dispositivos objetivo: EPM240, etc.
  • Protocolo: JTAG via emulación USB-Blaster
  • Compatibilidad: Intel Quartus Prime (versión lite)
  • Velocidad: Compatible con especificaciones USB-Blaster

Opciones de configuración:

  • Modo seguro (predeterminado): VID:0x16C0 PID:0x05DC
  • Modo compatibilidad: VID:0x09FB PID:0x6001
🚨 Modo de Compatibilidad

El modo de compatibilidad usa VID/PID de Intel. Úsalo solo para desarrollo personal y cumpliendo las licencias correspondientes.

Instalación y Configuración

Requisitos del Sistema

Software requerido:

# Ubuntu/Debian
sudo apt install build-essential sdcc python3 python3-pip git

# Instalar dependencias Python
pip3 install pyusb

# Verificar instalación
sdcc --version
python3 --version

Para Windows:

SDK Docker CH55x

Proceso de Flasheo del Firmware

1. Entrar en Modo Bootloader

📝 Procedimiento paso a paso:
  1. Desconectar completamente el programador del USB
  2. Mantener presionado el botón BOOT en la placa
  3. Conectar el cable USB mientras mantienes presionado BOOT
  4. Soltar el botón - el dispositivo entra en modo bootloader
  5. El LED debería cambiar de estado indicando modo bootloader

2. Flashear el Firmware

# Método 1: Usando chprog.py (Recomendado)
python3 ./tools/chprog.py build/main.bin

# Método 2: Usando WCHISPTool (Windows)
# Abrir WCHISPTool y seleccionar el archivo .bin

3. Verificar la Instalación

# Verificar que el dispositivo es reconocido
lsusb | grep -i "ch55"

# Para Windows, verificar en Device Manager

Configuración de Permisos (Linux)

# Crear reglas udev para acceso sin privilegios
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="4348", ATTR{idProduct}=="55e0", MODE="666"' | sudo tee /etc/udev/rules.d/99-ch55x.rules

# Recargar reglas
sudo udevadm control --reload
sudo udevadm trigger

# Agregar usuario al grupo dialout (para puertos serie)
sudo usermod -a -G dialout $USER

Tabla de Compatibilidad de Firmware

FirmwareProtocolosDispositivos ObjetivoModo USBHerramientas Principales
AVRUSBaspATmega, ATtiny, AVR-DA/DBCDC/HIDavrdude, PlatformIO
CMSIS-DAPSWDSTM32, RP2040, PY32HID+CDCOpenOCD, PyOCD
CPLDJTAG (USB-Blaster)EPM240, EPM570, MAX IIHIDQuartus Prime

Solución de Problemas Comunes

❌ El dispositivo no es reconocido

Posibles causas y soluciones:

  1. Firmware incorrecto cargado

    • Verificar que el firmware corresponde al uso deseado
    • Re-flashear el firmware correcto
  2. Problemas de drivers (Windows)

    # Instalar Zadig para drivers libusb
    # Seleccionar el dispositivo y instalar WinUSB driver
  3. Permisos insuficientes (Linux)

    # Verificar reglas udev
    sudo udevadm test /sys/bus/usb/devices/[device_path]

❌ Error de programación

  1. Verificar conexiones de cables
  2. Comprobar voltaje objetivo (3.3V vs 5V)
  3. Verificar que el dispositivo objetivo está alimentado
  4. Revisar compatibilidad del protocolo

❌ Velocidad de programación lenta

  1. Reducir frecuencia de JTAG/SWD
  2. Verificar calidad de conexiones
  3. Usar cables más cortos

Licencias y Atribuciones

Este proyecto se distribuye bajo múltiples licencias dependiendo del componente:

  • Hardware: Creative Commons Attribution-ShareAlike 4.0
  • Firmware base: MIT License
  • Componentes derivados: Licencias específicas de cada proyecto base
📄 Importante

Consulta el archivo LICENSE en cada directorio de firmware para detalles específicos de licenciamiento.