Actualización de firmware Pirate Bus (v.0c), JTAG y más

Descargar: buspirate.v0c.zip

Hace unas semanas escribimos sobre nuestra herramienta de interfaz serial universal Bus Pirate. Usamos las vacaciones recientes para agregar nuevas funciones, como desarrollador JTAG, macros, medición de frecuencia y más. Una importante reorganización del código facilita la lectura y actualización de todo.

Vea la demostración de las nuevas funciones a continuación. Recopilamos una hoja de ruta y una lista de deseos, así que comparta sus ideas en los comentarios. También puede ver cómo usamos Bus Pirate para leer una tarjeta inteligente y probar un oscilador de cristal I2C.

Nuevos protocolos

I2C> m

1. hola

2. 1 HILO

3. UART
4. I2C
5. SPI
6. JTAG

7. RAW2WIRE
8. RAW3WIRE
MODO> 1
900 MODARO
HiZ>

Esta versión de firmware enumera tres nuevos protocolos.

Hi-Z hace que todos los pines sean de alta impedancia / entrada, un estado seguro que no dañará un circuito conectado. Sin duda, el Bus Pirate ahora está comenzando en este modo.

1-Wire aparece en la lista, pero no pudimos incluirlo en esta edición porque aún no tenemos partes para probar con nuestra biblioteca. Esto ahora es solo un marcador de posición, pero se agregará tan pronto como probemos una pieza de 1 cable.

Hemos escrito una interfaz JTAG simplificada que incluye un reproductor XSVF para programar dispositivos JTAG.

** Hemos incluido una biblioteca I2C de hardware, pero de acuerdo con los errores de hardware, hay un error en el módulo I2C 24FJ64GA002 rev3. Esto funcionará con un chip diferente (por ejemplo, 28pin dsPIC33).

Tabla de conexiones

ALFILER1 hilo I2C * SPI** RS232JTAG
B9SDA

SDA

MOSI

-

TDI
B8-

SCL

CLK

-

TCK
B7-

-

MISO

RX

TDO
B6-

-

CS

TX

TMS
B5AUX

AUX

AUX

AUX

AUX
SueloGND

GND

GND

GND

GND

* también 2 hilos sin procesar. ** también sin procesar 3 hilos.

Los nuevos modos se conectan al Bus Pirate como se describe en la tabla.

Nuevas funciones y configuraciones

Medida de frecuencia

HiZ> F

9xx FREQ-KRONTO EN AUX: 22199552Hz (22MHz)
HiZ>

Como se ve en la demostración DS1077, agregamos un contador de frecuencia al pin AUX del Bus Pirate. "F" mide la frecuencia, máximo alrededor de 50 MHz.

Asignar un control de acelerador

HiZ> aprox.

PIN AUX
1. AUX (PREDETERMINADO)
2. CS / TMS
MODO> 1

9xx AUX: PREDETERMINADO-AGORDO (AUX-PIN)
HiZ>

A veces necesitamos controlar los pines de una máquina de estado (TMS) seleccionada por chip (CS) / JTAG manualmente. "C" alterna el control del pasador entre el pasador del eje y el pasador de selección de chip.

Velocidad final fija

HiZ> b

Establecer un puerto serie rápido: (bps)
1. 300
...
9. 115200
VELOCIDAD> 9

Ajusta tu terminal y presiona la barra espaciadora para continuar
HiZ>

'b' ajusta la velocidad de una computadora en serie del lado de la puerta.

Macros

Una nueva adición de sintaxis, '(#)', activa macros dependientes del protocolo.

JTAG> (0)

0. Menú macro
1. Restaurar una cadena
2.cadena de sonda
3.Juguete XSVF
JTAG>

En cualquier modo, use la macro (0) para mostrar un menú de macros disponibles.

Búsqueda de direcciones I2C

I2C> (1)

xxx Buscando espacio de direcciones I2C de 7 bits.
Dispositivos encontrados en:
0xB0 0xB1

I2C>

La biblioteca I2C incluye una macro para buscar automáticamente dispositivos en el directorio I2C. Útil cuando se trabaja con un chip desconocido.

Tarjeta de pago Smart2wire ISO 7813-3 ATR

RAW2WIRE> (1)

ISO 7813-3 ATR
950 AUX MALALTA
951 AUX ALTA
4xx RAW2WIRE 0x01 TRUCOS DE RELOJ
950 AUX MALALTA
Respuesta ISO 7813-3: 0xA2 0x13 0x10 0x91

Protocolo: 2 hilos

Tipo de lectura: para terminar

Unidades de datos: 256

Longitud de la unidad de datos: 8 bits

RAW2WIRE>

Macro 1 restaura e identifica una tarjeta de pago. Para obtener más información sobre ISO7813-3 ATR, vea cómo usamos Bus Pirate para leer una tarjeta inteligente.

JTAG

JTAG es una interfaz de depuración y programación para todo tipo de electrónica. Se puede acceder a la interfaz de hardware sin procesar a través de la biblioteca de tres cables sin procesar de Bus Pirate, pero hemos agregado algunas funciones para que sea más fácil.

JTAG tiene diferentes modos en los que la entrada de datos hace varias cosas. Los modos navegan con la señal JTAG TMS; hay un conjunto de regímenes JTAG, llamados estados. La biblioteca Pirate Bus JTAG es solo la biblioteca sin procesar de 3 cables, mejorada para ayudar con los cambios de estado de JTAG.

Acabamos de implementar los estados de JTAG que necesitamos para obtener datos dentro y fuera de una cadena de dispositivos JTAG: reinicio, inactivo, registro de datos y registro de instrucciones. La macro (1) emite un reinicio de la cadena JTAG e inicializa la cadena al estado inactivo. {pone la cadena JTAG en modo de registro de datos. [ puts the chain in instruction register mode. ] o} devolver la cadena al estado inactivo. El Bus Pirate tiene un rastreador de máquina de estado interno que es lo suficientemente inteligente como para administrar la cadena sin devolver explícitamente la cadena a inactiva; en otras palabras, no es necesario que cierre sus etiquetas. El inspector de la máquina de estado informa cada cambio de estado para ayudar a depurar problemas.

JTAG>[0xfe {rrrr} <– same as [0xfe]{rrrr}

xxx JTAGSM: JAM NENIUPA
xxx JTAGSM: IDLE-> Registro de instrucciones (RENUNCIA UNA PIEZA PARA TMS)
610 JTAG READY WRITE IR

620 JTAG ESCRITURA: 0xFE

xxx JTAGSM: (ESCRIBIENDO LA MUERTE TARDÍA) IR-> NENIUPA

xxx JTAGSM: IDLE-> Registro de datos

611 JTAG READY LAW / WRITE DR
630 JTAG-LEGO: 0x93

630 JTAG-LEGO: 0x40
630 JTAG-LEGO: 0x60
630 JTAG-LEGO: 0x59
xxx JTAGSM: DR-> IDLE

640 JTAG NENIU
JTAG>

Aquí hay una breve interacción con Xilinx XC9572 CPLD. Vamos al registro de instrucciones ( [ ), and send the device ID request command (0xfe). Then, we go the the data register( { ), read four bytes (rrrr, or r:4 shorthand), and return to idle ( } ).

What are delayed bit writes?

JTAG requires that the last data bit written to the instruction register be entered at the same time as the state change. Since the Bus Pirate has no way of predicting when we’ll actually change states, it delays the last bit of each byte write until one of three things happens:

  • Exit the instruction register with a }, ], o {comando
  • Escribe otro valor de byte
  • Leer comando
  • Los bits en espera no se vacían mediante operaciones de bits (como! O ^). Haga esto antes de escribir su último byte o cambiar el código. No hemos realizado escritos pendientes al registro de datos, pero probablemente sea necesario. Es posible que deba implementar esto si está escribiendo el registro de datos, preferiblemente solo leyendo como lo hicimos nosotros.

    Macros JTAG

    JTAG> (1)

    xxx JTAGSM: RESET
    xxx JTAGSM: RESET-> IDLE
    JTAG>

    Una macro JTAG (1) restaura la cadena JTAG y luego la hace avanzar al estado inactivo.

    JTAG> (2)

    xxx CADENA INICIAL JTAG
    xxx JTAGSM: RESET
    xxx JTAGSM: RESET-> IDLE
    xxx JTAGSM: IDLE-> Registro de instrucciones (UNA PIEZA RECHAZADA PARA TMS)
    xxx JTAGSM: IR-> IDLE
    xxx JTAGSM: IDLE-> Registro de datos
    xxx JTAGSM: DR-> IDLE
    xxx JTAGSM: RESET
    xxx JTAGSM: RESET-> IDLE
    xxx JTAGSM: IDLE-> Registro de datos
    xxx INFORME DE LA CADENA JTAG:

    0x01 APARATO (J)
    # 0x01: 0x93 0x40 0x60 0x59

    xxx JTAGSM: DR-> IDLE
    JTAG>

    Una macro (2) restablece la cadena, cuenta los dispositivos e informa todos los ID de dispositivos.

    JTAG> (3)

    REPRODUCTOR 6xx JTAG XSVF
    xxx NECESARIO CONTROL DE FLUJO XON / XOFF

    xxx PRESU z CONTINUAMENTE

    xxx COMENZAR CARGA XSVF

    6 × 0 XSVF Hueso

    SU COMPUTADORA GOTÓ MÁXIMO 0x05 BITS DESPUÉS DE XOFF (ESO ES BUENO)
    6xx PULSE z 5 VECES PARA CONTINUAR

    JTAG>

    Macro 3 es un reproductor / desarrollador XSVF que utiliza código Xilinx. XSVF es un formato de bytes SVF, como lo describe Xilinx (pdf). Los archivos XSVF se pueden compilar para cualquier cadena con los archivos de definición JTAG sin marcar correctos, incluso los dispositivos que no son de Xilinx. Hemos utilizado con éxito el duuma transferir funciones en Hercules y Earth Term para enviar archivos XSVF al desarrollador.

    JTAG a veces se detiene más de lo necesario para que la computadora transmita un byte de datos, por lo que implementamos el control de flujo del programa XON / XOFF para el reproductor XSVF. Su terminal debe estar en modo de control de flujo XON / XOFF antes de que pueda cargar el archivo XSVF; de lo contrario, el programador fallará. Incluso con el control de flujo de software, una computadora moderna ya ha enviado varios bytes a través de las capas de un sistema operativo antes de recibir las señales de control de flujo. Abordamos esto capturando estos bytes antes de continuar, esto se conoce como el número máximo de bytes "driblados".

    Si hay un error en la carga, la computadora probablemente continuará escupiendo bytes al Bus Pirate. Para mantener visibles los mensajes de error y evitar la basura en la terminal, el reproductor XSVF espera cinco zs minúsculas antes de volver a la solicitud. Elegimos esta secuencia porque nunca sucederá en un archivo XSVF.

    * Tenga en cuenta que el reproductor XSVF no respeta la configuración JTAG Hi-Z. Lo fue, falla. Tenga cuidado de mezclar voltajes sin un búfer.

    Mejor estructura de código

    La mayor diferencia entre la versión 0b y el firmware 0c es una mejora masiva en la estructura del código. The Bus Pirate existió en muchas encarnaciones antes de que lo empaquetáramos para el artículo de apertura. v.0c armoniza las bibliotecas de códigos y facilita la adición de nuevos protocolos.

    Cómo agregar un protocolo personalizado

    El código Bus Pirate se ocupa de la interfaz de usuario y transmite dos variables a la biblioteca de protocolos activos. La primera variable es un comando, como CMD_READ, CMD_READBULK o CMD_WRITE. Todo el conjunto de comandos se define en base.h. La segunda variable es un valor opcional. Un comando CMD_READ simple no da ningún valor, un comando grande transmite el número de bytes a leer, un comando de escritura transmite el valor a escribir al bus, y así sucesivamente. Al menos un protocolo personalizado necesita una función para recibir estas variables y traducirlas. a las acciones del autobús.

    Usamos tres técnicas diferentes para vincular los comandos a las acciones del bus. El código simple puede ir directamente a una declaración de cambio gigante, como SPI.c. Las bibliotecas externas utilizan una función de enlace único, como I2C.c y m_i2c_1.c. Los protocolos más complicados utilizan la instrucción switch para llamar a funciones incluidas en la biblioteca (raw2wire.c, raw3wire.c, jtag.c UART.c). Las funciones auxiliares para el terminal IO se incluyen en base.h / c.

    Debido a las mejoras masivas de código, ahora es solo un poco confuso registrar un nuevo protocolo con Bus Pirate:

    bazo.h - Cree una definición para el protocolo. La última entrada es actualmente "#define RAW3WIRE 7", por lo que la siguiente entrada podría ser "#define MYCUSTOMWIRE 8".

    busPirate.c - La inclusión de un archivo de título da acceso a la función de procesamiento. Agregue una entrada de menú en el modo char *[] = lista variada. La entrada del menú debe estar en la misma posición en la lista que el número asignado en la base.h define. Si MYCUSTOMWIRE es el número 8, debe ser la entrada ocho en la variable de modo. Por último, agregue un modificador adicional a la función bpProcess (), que llama a la rutina de procesamiento de la biblioteca habitual cuando el modo se establece en "MYCUSTOMWIRE".

    Además: lista de deseos de Hack a Day

    Recopilamos los comentarios que recibimos en tres listas de deseos: protocolos, funciones y macros.

    Protocolos

    • 1 hilo, con conteo (* listo en cuanto tengamos piezas para probarlo)
    • OBD-II (gracias [Shadyman])
    • PUEDEN
    • MIDI (Wikipedia)
    • DMX512-A
    • IRDA, RC5x, etc.
    • Algunos protocolos requerirán una radio externa.

      Características

      • Modulador de ancho de pulso, generador de frecuencia
      • Comando "Esperar interrupción"
      • Convierta la medición de frecuencia en periférico de captura de entrada
      • Permitir la medición de frecuencia en cualquier pin
      • Muestra un informe sobre los ajustes de configuración actuales y los estados de los pines.
      • Valores de repetición enteros para lecturas gruesas, tics de reloj, retrasos, etc.
      • Generador de CRC
      • Macros

        • Puente UART transparente
        • Inicialización de la tarjeta SD, extracción y descarte de metadatos
        • Programa / volcado EEPROM (I2C / SPI)
        • Inicialización, control de Nokia 6100 LCD
        • Decodificador de datos GPS NMEA
        • ¿Tiene algo que agregar a la lista?

          Descargar firmware: buspirate.v0c.zip

          • Curtisbeef dice:

            Me gusta el apoyo de Jtag. ¿También sería posible programar PIC y AVR ... por lo que es como una herramienta de desarrollo todo en uno?

            Otra opción que podría ser interesante sería un analizador lógico de 8 bits o quizás un osciloscopio lento.

            Sé que algunos de estos pueden ser pedidos altos, pero pediste sugerencias 🙂

            Alguien necesita hacer un conjunto de PCB para esto después de que obtengamos una revisión final del hardware.

            Sé que estás tratando de mantener bajos los precios de las piezas, pero la compatibilidad con USB sería increíble.

          • jeff dice:

            ay, lee eso completamente mal ... creo que saldré con Freud ahora ...

          • Taylor Alexander dice:

            ¿De alguna manera podríamos crear esta interfaz con los sistemas de bus CAN del automóvil? Eso fallaría.
            Hay cables asequibles (con un circuito en el interior) que te permiten usar un terminal estándar para hablar con ellos, de manera conceptualmente posible. Sin embargo, existen algunos estándares de bus CAN diferentes. Estoy interesado en el bus CAN de GM para poder piratear mi Sky. 🙂
            -Taylor

          • Hasta que dice:

            Quizás deberías mirar el USBProg
            en http://www.embedded-projects.net/index.php?page_id=135

            cualquier idea de un "cuchillo militar suizo".
            Hace un año apareció un artículo en Elektor.
            http://www.elektor.com/products/kits-modules/kits-(-7x)/usbprog-(060224-71).252458.lynkx

          • daryl dice:

            Muy buen trabajo en el jtag. Ahora, para que un puerto serie se ejecute en mi computadora portátil bajo Vista y Linux ...

            También me gusta la idea de ODB-II. Quería estropear un poco mi coche.

          • ab dice:

            Si pides sugerencias, i2c sniffer sería genial. Por lo general, tiene dispositivos maestros i2c, pero es inútil obtener los datos de una subred maestro-esclavo desconocida.

            Para un uso completo de CAN en vehículos GM, se necesitaría una radio de dos cables (cualquiera que desee) y de un solo cable (probablemente AU5970). Pero un retraso de respuesta probablemente sea demasiado lento (sobre RS232) para usarlo correctamente.

          • DB dice:

            Para el autor: Me interesaría producir una versión basada en AVR de Bus Pirate que comparta la mayor parte del código existente. Si bien podría hacer esto eliminando el código fuente que usted (amablemente) proporcionó, preferiría incluir soporte para AVR en su código existente. Contactame si estas interesado.

          • jm dice:

            ¿Qué hay de portarlo a Arduino?

          • X dice:

            ¡Vaya!
            Estoy seguro de que estaría totalmente asustado e impresionado si supiera lo que significa todo.

            (no saber esas cosas probablemente significa que estoy equivocado ...)

          • Eric dice:

            Me gusta el "modo seguro" hi-Z, también podrías usar algunas opciones, sé que aumentarían un poco el costo, pero algo así realmente se beneficiaría del aislamiento, ya que la aplicación principal para la mayoría de la gente será "Mira alrededor de donde está no pertenece ";) Parece que también tiene el potencial de ser una herramienta de ingeniería inversa realmente agradable.

          • crisis dice:

            ¿Alguien está dispuesto a programar la imagen por mí? ¡Acabo de entrar en AVR y me encantaría construir un autobús pirata!

          • njansen dice:

            Estoy de acuerdo con jm. Un puerto Arduino sería un paso en la dirección correcta. Muchas personas ya tienen uno o más de estos por ahí, y hacer / llenar un escudo sería trivial, mucho más fácil que hacer un tablero completo lleno de PIC.

            Y no para volverse religioso o filosófico, pero Arduinos (y AVR en general) se ajustan a la mentalidad de código abierto un poco mejor que PIC - compatibilidad con gcc y g ++ en comparación con algunas herramientas W32 .. Sin mencionar el AVR (y por lo tanto Arduinos) Tiene soporte multiplataforma 100% clavado. PIC-OTOH no tanto.

            Si nadie más se acerca a la placa, podría probar primero las partes I2C y SPI ... Mientras tanto, revisaré mi lector de RSS.

          • njansen dice:

            También otra cosa ... ¿Qué hay de conseguir este proyecto en Sourceforge?

          • terian dice:

            Entonces, algunas personas sugieren rehacer un proyecto completo solo porque no quieren trabajar con PIC.

          • Ian Lesnet dice:

            @ avr-fans: nos complace incluir definiciones y módulos adicionales para que coincidan con otros procesadores y compiladores.

            ¿Puede compartir algunas especificaciones de sus procesadores de destino específicos? Usamos 16bit PIC @ 32MIPS con 8K SRAM y espacio de programa de 64K. Solo usamos memoria 4K, y podríamos hacer con la mitad de eso, pero el firmware ya es 33K +. ¿Es este proyecto adecuado para sus propósitos?

            Además: utilizamos el interruptor de electrodo de barra periférico para asignar diferentes módulos de dispositivo a los mismos pines de salida (UART, SPI, I2C, calculadora de frecuencia, generador de frecuencia, etc.). Si el AVR no tiene algo similar, también deberá escribir bibliotecas de programas para ellos. Personalmente, no tengo mucha experiencia con Arduino, pero ¿puede obtener la precisión de tiempo que necesita, por ejemplo, un programa UART, de un lenguaje de programación tan avanzado?

            Si la programación de PIC lo apaga, eche un vistazo a los clones para obtener un ICD2 de menos de $ 40 recomendado por los lectores en eBay (se acercan las vacaciones).

          • Ian Lesnet dice:

            @erika

            Nos gusta la idea de galvanizar la computadora. También sería bueno tener chips de búfer 74xx simples entre el Bus Pirate y el chip de destino, pero es difícil hacer eso con las líneas de datos bidireccionales utilizadas en I2C y 1-Wire.

          • meep dice:

            Los puertos serie de @Daryl linux suelen estar en / dev / tty / s0 y suelen funcionar de forma predeterminada.

            Gran mejora para una herramienta que ya es buena. Buena idea para la compatibilidad diurna. ¿Tiene la oportunidad de unirse a una versión AVR pronto?

          • Maestro Gippo dice:

            Agregar estas características debería ser bastante fácil, también se proporciona el código fuente:
            http://mondo-technology.com/super.html

            Además, con el creciente número de funciones, la GUI tiene que ser agradable ... tal vez java o python para la portabilidad, no lo sé, soy un tipo de Windows (puedo ayudar a desarrollarlo en c # .net si es necesario).
            La versión USB con 24fj256gb108 será agradable (¡actualmente estoy trabajando con esta imagen y es genial!).
            Lo más importante es el lanzador, por lo que no tenemos que mover nuestro ICD2 para actualizar el firmware. Utilizo el muy bueno AN1157 (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en533906) para mi proyecto.

          • Sumguysr dice:

            Apoyo las solicitudes de programación PIC y AVR ICSP y ODB-II

          • Sumguysr dice:

            También una buena interfaz de computadora sería muy buena. Algo portátil, recomiendo escribirlo en python.

          • DB dice:

            @njansen: Sí, cree un proyecto SF. Estoy apuntando al puerto arduino. Tengo algunos enanos de Arduine a la mano: 16Mhz avr168 (1k sram, 16k flash). Algunas funciones tendrán que funcionar por falta de espacio. Podemos hacer que compilen opciones de tiempo para que las personas puedan habilitar lo que necesitan (o usar un AVR específico más alto). ¡Avísanos cuando termine el proyecto SF!

          • Maestro Gippo dice:

            Acerca de su comentario "// deshabilitar algunas tonterías por defecto" en main.c ... Todos los puertos con capacidad analógica se configuran como entrada analógica al inicio para consumir menos energía: si se deja como entrada digital y se desconecta, la entrada flota y puede cambiar su estado aleatoriamente, y cada vez que cambia el estado, el transistor de entrada consume corriente. microchip dice que para un bajo consumo de energía, el programador debe tener cada conjunto de pines sin usar:
            - como entrada analógica
            - como entrada, pero vinculado a vcc o gnd
            - como salida, desatado

            Debido a que mchp no conoce su hardware antes, coloca el chip en el estado más seguro.
            Recuerde, nada es una tontería, ¡todo está cuidadosamente estudiado!
            😉

          • crisis dice:

            El Sanguine (64kb flash, 4k 20MHz RAM) sería más adecuado para este proyecto. No veo nada en el circuito que no se pueda hacer con la placa Sanguino estándar. Pero de nuevo, no soy un experto ... Algunos circuitos de aislamiento serían buenos, pero como se mencionó, la interfaz bidireccional lo hará difícil. ¿Dónde podemos encontrar el código fuente?

          • Appu dice:

            Hola,

            Necesito convertir un archivo SVF a un archivo XSVF sin Impact ni ningún software, necesito crearlo. ¿Podría enviarme un documento con las instrucciones de SVF y XSVF para que pueda escribir un convertidor para eso?

            Gracias
            Appu

          • Ian Lesnet dice:

            Todo lo que sé es de la documentación de Xilinx vinculada en esta publicación.

          • Neil H. dice:

            Builtus ha construido uno y lo está probando. Veo algo extraño.

            ¿Alguien ha probado los comandos de soporte U-pin @ / a / A? Parece que el chip nunca sube la salida en el comando A (pasa de 0.0 a 0.25 V), es como si las retracciones internas en ese pin de puerta no estuvieran habilitadas.

            ¿Te estás preguntando si alguien más ha visto esto? Revisé si había cortocircuitos en los pines, etc. La interfaz en serie se ve perfecta, etc.

            Gran proyecto, espero poder usarlo. Gracias

            –Neil.

          • ian dice:

            @neil h.

            ¿Qué firmware usaste? v0g es el más nuevo.

          • Bufanda dice:

            ¿Alguien puede decirme si podría usar un pirata informático para oler los datos en un conjunto de chips (módem integrado)? ¿Quiero oler todos los datos enviados a un módem de teléfono antiguo?

          • Felipe Janecki dice:

            hola vivo en brasil
            Practiqué con estos dispositivos
            Necesito reiniciar el DS2431, va a la impresora, para verificar el cartucho de impresión
            da 0% de líquido dentro del cartucho,
            Cómo puedo hacer esto
            Gracias

          • tejido dice:

            Sería muy bueno poder programar MPS430 con JTAG.

          • Miguel dice:

            El trabajo que hiciste al reprogramar el dispositivo xilinx con la imagen es asombroso. ¿Ha intentado reprogramar algún dispositivo basado en Altera? Tengo un proyecto favorito en el que estoy tratando de reprogramar un máximo de II cpld con pic24f. Si pudiera indicarme cualquier tipo de información, se lo agradecería mucho.
            ¡Gracias!

Victoria Prieto
Victoria Prieto

Deja una respuesta

Tu dirección de correo electrónico no será publicada.