Cómo: El pirata de bus, interfaz de serie universal

Actualización: Nuevo firmware con JTAG y más

Siempre estamos ecstáticos para obtener una nueva tarjeta de chip o SIM para interactuar, pero nuestro entusiasmo generalmente está humedecido por el proceso de prototipos. Interfaz de cualquier chip normalmente indica un circuito, un código de escritura y eliminación del programador; Tal vez incluso un PCB de prototipos.

Hace unos años, construimos el primer ‘pirata de autobús’, una interfaz universal de autobuses que habla con muchas fichas de una terminal serie de PC. Varios protocolos de serie convencionales son compatibles con 3.3-5Volts, incluyendo I2C, SPI y serie asíncrona. Las bibliotecas adicionales de ‘RAW’ 2- y 3- Cable pueden interactuar casi cualquier protocolo serie propietario. Teniendo en cuenta que esta ha sido una herramienta tan beneficiosa para nosotros, limpiamos el código, documentamos el diseño y lo publicamos aquí con especificaciones, esquemas y código fuente.

Descripción general del concepto

El pirata de bus es un puente de terminal serie a múltiples protocolos de interfaz IC. Escribimos comandos en un terminal serial en la computadora. Los comandos van al pirata de bus a través del puerto serie de la PC. El pirata del autobús habla con un microchip en el protocolo adecuado, y devuelve los resultados a la PC.

Todos los pasadores de salida 3.3Volts, pero son tolerantes de 5Volt. Las fuentes de alimentación a bordo de 3.3Volt y 5Volt están disponibles para alimentar el chip conectado. Software configurable I2C Resistencias de pull-up completo El paquete.

La interfaz de terminal serie funciona con cualquier sistema: PC, Mac, Linux, Pilotos de palmeras, dispositivos WINCE, etc. No se requiere crapware. Consideramos un dispositivo USB, pero USB no es compatible con el número sustancial de dispositivos de mano que tienen un puerto serie. También queríamos un dispositivo de 3.3Volt con insumos tolerantes de 5Volt, pero muchos microcontolladores populares a través de los MicroContolladores USB fueron 5Volts (por ejemplo, la PIC18FX550).

El pirata de autobús actualmente “habla” tres protocolos de hardware para la interfaz de alta velocidad, y tiene dos bibliotecas de protocolo de software para facilitar la manipulación de autobuses. La teoría y la especificación de cada protocolo están más allá de lo que podemos cubrir aquí, pero echa un vistazo a algunos de estos tutoriales:

I2C

Un lento bus de 2 cables. Wikipedia es un lugar excelente para comenzar con el fondo I2C. I2c-bus.org, Robot Electronics, Embedded Systems Academy y EmbedDed.com tienen tutoriales respetables de I2C.

Spi

Un autobús básico de 3 hilos. Wikipedia tiene antecedentes; EMBEDDEDED.COM tiene un excelente tutorial y comparación con I2C.

Transmisor de receptor asíncrono universal (UART o serie)

Un protocolo serie dependiente del reloj y el tiempo que se conoce mejor por su aparición como el protocolo de puerto serie PC. Wikipedia tiene antecedentes en protocolos seriales asíncronos.

Cable crudo 2

Esta es una biblioteca de protocolos genéricos de 2 hilos, similar a I2C, pero sin un bit de Ack. I2C y muchos protocolos de cable propietarios pueden formarse utilizando las manipulaciones de autobuses disponibles en este modo. Use esta biblioteca para trabajar con dispositivos de cable no I2C 2, como SmartCards o Sensirion SHT11 Sensores de temperatura / humedad.

Cable RAW 3

Esta es una biblioteca genérica de protocolos de 3 hilos, similar a SPI, pero sin las restricciones de un módulo de hardware. Use esta biblioteca para que funcione con dispositivos que usen protocolos de 3 hilos compatibles con no 8bit, como el eliminación de SparkFun Nokia 6100 LCD. Muchos protocolos de 3 hilos se pueden formar utilizando las manipulaciones de bus disponibles en este modo.

Hardware

Haga clic para obtener una imagen de colocación de PCB de tamaño completo (PNG). Los terminales de tornillo se conectan a las fuentes de alimentación. Una fila de los encabezados de siete pines se conectan a los pasadores de IO. A pesar de la etiqueta, solo se requieren 7Volts DC.

ALFILER

Spi

I2C

RS232

B9

Mosi

Sda

B8

Tonto

Scl

B7

MISO

Rx

B6

Cs

Tx

B5

Auxiliar

Auxiliar

Auxiliar

Terrestre

Gnd

Gnd

Gnd

Esta tabla muestra las conexiones PIN para cada modo de autobús. El modo de cable RAW 2 utiliza la misma configuración PIN que I2C. El modo de cable RAW 3 utiliza la misma configuración PIN como SPI.

Haga clic para una imagen de circuito de tamaño completo (PNG). El circuito y el PCB se crean utilizando la versión Freeware de CADSOFT EAGLE. Descargue el archivo del proyecto (ZIP).

Foto 24fj64ga002

Utilizamos un microcontrolador PIC24FJ64GA002 en el pirata de autobús; Este es el mismo chip que utilizamos en nuestro Mini-Server Project. Es lo suficientemente rápido como para hacer todo lo que queremos (16Mips), y la función PIN periférica, select permite que los módulos SPI, UART y I2C de hardware para compartir los pines de salida. Cada pin de alimentación necesita un condensador de desacoplamiento (C12,13), y la función MCLR requiere una resistencia (R7) entre Pin 1 y 3.3Volts. La foto tiene un regulador de voltaje interno que requiere un condensador Tantalum 10UF (C3), aunque usamos un condensador electrolítico sin problemas. Lea sobre la programación y trabaje con este chip en nuestro tutorial PIC24F. Si no tiene un depurador de fotos, varios lectores recomiendan los clones ICD2 de menos de $ 40 en eBay.

La foto se ejecuta a 3.3Volts, pero los pasadores solo digitales son tolerantes a 5 Volt para interconectar la lógica de 5VOLT. Los pines 14,15,16,17,18,21, y 22, son solo digitales, lo que descubrimos mirando a través de la hoja de datos y eliminando los pines con un tipo de conexión analógica (Tabla 1-2, páginas 11-16). Según la hoja de datos,Los pasadores I2C también son tolerantes a 5 Volt. Hay un montón de información conflictiva en la web, pero la hoja de datos, el parámetro DI28, indica claramente que la entrada máxima para un PIN de 24FJ64GA002 I2C sin circuitos analógicos es de 5,5 Volts.

Los pines 21 y 22 (RB10 / 11) pueden pulir SDA / SCL a través de resistencias R4 y R5.

Max3223cpp

Este chip convierte la salida en serie de 3.3VOLT a +/- 10VOLT RS232 Señales compatibles con un puerto serie PC. El MAX3223CPP es una versión de 3-5VOLT de MAX202, con funciones de ahorro de energía adicionales. Los transceptores MAX RS232 requieren cuatro condensadores de 0.1UF para una bomba de carga (C4,5,7,8), y un condensador de desacoplamiento (C17). Utilizamos los mismos condensadores para todo.

Utilizamos un Max3223CPP, que ya no parece estar disponible. Max3223eepp + es una versión más nueva compatible con PIN, disponible en DigIKEY por $ 7. ¡Ay! Ninguna de las funciones de ahorro de energía de 3223 se usa, por lo que se debe sustituir un transceptor RS232 de 3.3VOLT más barato y más barato, si de alguna manera posible.

Fuentes de alimentación

La mayoría de los chips pueden ser alimentados desde los suministros de 3,3 Volt y 5VOLT del pirata de autobús. 5 Volts es suministrado por un regulador común 7805 (VR2) y dos capacitores de desacoplamiento (C9,10). Un regulador ajustable LM317 (VR1) se establece en 3.3 Volts con dos resistencias (R2,3), y requiere dos capacitores de desacoplamiento (C6,7). El circuito requiere un suministro de DC de 7-10 Volt (J1).

Lista de

Parte
Valor

IC1
Pic24fj64ga002-dip

IC2
Max3223cpp (prueba max3223eepp +)

C3
Condensador 10UF (preferiblemente tantalio)

C4-13,17
Capacitores 0.1UF

R1
Resistor de 330 ohmios.

R2
Resistencia de 240 ohmios.

R3
Resistor de 390 ohmios.

R4,5,7
Resistor de 2k2 ohmios.

Vr1
Lm317

Vr2
Lm7805

X1
Abrazadera de tornillo (3 terminales) * no probado

X2
Conector hembra DB9 (puerto serie) * No es probable

ICSP, SV3
.1 “encabezado PIN, ángulo ideal

J1
Power Jack, PIN 2.1mm

Led1
LED de 3 mm (opcional)

Firmware

El firmware está escrito en C utilizando la versión de demostración de cortesía del compilador de fotos C30. Aprenda todo sobre cómo trabajar con esta foto en nuestra introducción a la serie Photo 24F. Descargue el archivo del proyecto (ZIP).

main.c: maneja la interfaz del terminal del usuario.

Buspirate.c – Rutinas de abstracción que convierten la sintaxis a las acciones en el autobús adecuado.

Uartio.c – Rutinas IO para ambos Uarts de hardware.

M_I2C_1.c – Rutinas I2C del software por [Michael Pearce]. No pudimos hacer que el hardware de la foto I2C funcione, así que usamos esta valiosa biblioteca. El software no tiene en cuenta la configuración de velocidad I2C, y parece funcionar a aproximadamente 5kHz.

SPI.C – Rutinas que impulsan el módulo SPI de hardware.

RAW2WIRE.C – Biblioteca de interfaz de 2 hilos de software.

RAW3WIRE.C – Biblioteca de interfaz de software de 3 hilos (SPI).

La entrada del usuario se mantiene en un búfer de 4000 bytes hasta que se detecta un carácter de nueva línea (ENTER). Si el primer carácter de la entrada es una opción de menú (consulte a continuación), se muestra el cuadro de diálogo MENÚ, de lo contrario, la cadena está analizada para que los datos envíen el bus (consulte la sintaxis). El código consiste en un número vergonzoso de declaraciones de conmutación y código SPAGHETTI.

Interfaz terminal

En lugar de escribir una pieza de software de basura para controlar el dispositivo, le dimos una interfaz de línea de comandos en serie que funcionará con cualquier terminal ASCII. El pirata de bus responde a los comandos con códigos de resultados de tres dígitos y un mensaje corto. Los códigos se crean con la automatización de la PC en mente. Hemos incluido una tabla de códigos de resultados en el archivo del proyecto (ZIP).

Opciones de menú

Las opciones del menú son comandos de un solo carácter que no involucran transferencias de datos. Ingrese al carácter, seguido de , para acceder al menú.

? – Muestre un menú de ayuda con los comandos y la sintaxis.

M – Configure el modo de bus (SPI, I2C, UART, RAW 2 WIND, RAW 3 WIND). seguido de inmediato por un mensaje de velocidad, polaridad y estado de producción (dependiente del modo).

Velocidades de autobús: SPI: 30, 125, 250, 1000kHz. I2C: 100, 400, 1000kHz. UART: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200bps. Modos crudos: 1, 10, 50 kHz.

Configuración de reloj inverso Establece el estado inactivo opuesto a lo normal (SPI normal: inactivo bajo; Normal UART: ROING HIGH): SPI: ROING HIGH; UART: Bajo bajo.

Algunos modos tienen modos de salida opcionales de alta Z para usar con resistencias de pull-up (baja = tierra, alto = entrada).

L – Transmisión / Orden de recepción de bits de alternar: Más / Menos poco significativo primero.

P – SDA / SCL PIN TRATE-UP RESISTER TOGGLE (3.3 Volts). Sólo válido en los modos I2C y 2 hilos crudos.

O – Formato de pantalla de salida del número. El terminal puede mostrar los números como valores de ASCII decimales, hexadecimales y binarios. Un cuarto formato envía el byte sin procesar sin procesar para leer el texto formateado ASCII.

Sintaxis

Una sintaxis básica se utiliza para comunicarse con fichas sobre un autobús. Los comandos de sintaxis tienen funciones genéricas que normalmente se aplican a todos los tipos de bus.

A / A / @ – PIN de TOGGLE AUXILIAR. Capital “A” establece aux High, pequeño “A” se establece en tierra. @ Establece aux aux a ingresar (modo de alta impedancia) y lee el valor PIN.

[- Iniciar datos de escritura. SPI / RAW 3 WIND: SELECT SELECT habilitado. I2C / RAW 2 WIND: Condición de inicio. RS232: Abra UART, Deseche los bytes recibidos.

{- Datos de inicio Escribe con lecturas. Igual que [, excepto: SPI / RAW 3 Cable: Muestre el byte leído para cada escritura. RS232: Mostrar datos a medida que llega a Asynchrinyectivamente

] o} – escritura de datos finales. SPI / RAW 3 ALAMBRE: CHIP SELECT DISHING. I2C / RAW 2 WIND: Condición de parada. RS232: Cerrar UART.

R / r – leer byte. SPI / RAW 3 CHEX: Envíe un byte ficticio, RETRENDE LEER. I2C: leer byte con ACK. Sin 2 cables: lee 8 bits. RS232: Marque UART para byte y devuelva, o falla si está vacío. Use 0R1 … 255 para a granel lee hasta 255 bytes.

0B – Escribe este valor binario. El formato es 0B00000000 para un byte, pero los bytes parciales también están bien: 0B1001.

0h o 0x – Escribe este valor hexagonal. El formato es 0H01 o 0x01. Los bytes parciales están bien: 0xa. A-F puede ser minúscula o letras mayúsculas.

0-255 – Escribe este valor decimal. Cualquier número no precedido por 0x, 0H, o 0B se interpreta como un valor decimal.

, o espacio – valor delimitador. Use un coma o espacio para separar los números. Cualquier combinación está bien, no se requiere delimitador entre los valores no numéricos: {0xa6,0, 0 16 5 0b111 0haf}.

Comandos de manipulación directa de autobús para modo de cable RAW 2 y modo de cable RAW 3.
^ – Enviar una marca de reloj. Use 0 ^ 1 … 255 para múltiples garrapatas de reloj.

/ y \ – Alto nivel de reloj (/) y bajo (/) y bajo (\). Incluye el retardo de reloj (100US).

– / _ – Toggle Data State High (-) y Low (_). Incluye demora de configuración de datos (20US).

! – Leer un bit con reloj.

. – Lea el estado del PIN de datos (sin reloj).

& – retraso 1US. Use 0 y 1 … 255 para múltiples retrasos.

Usándolo

Aquí hay dos ejemplos que muestran el pirata de autobús en acción. Los terminales deben establecerse en modo ASCII con ECHO local, utilizamos el terminal serie de Windows. La conexión serie del lado de la PC es de 115200bps, 8N1. El pirata de bus debe responder a cualquier tipo de alimento de una sola línea (0x0a, 0x0d), o ambos (estilo de Windows).

.I2c / spi – flash 24lc1025 EEPROM

Las EEPROM de Microchip son fichas de memoria de almacenamiento permanente populares, las 24LC1025 tienen 128kbytes de almacenamiento con una interfaz I2C. Podemos probar este chip sin abordar un gran circuito o un código de escritura.

La imagen muestra un 24LC1025 conectado al pirata del autobús. El EEPROM funciona de 2.7 a 5Volts, por lo que usamos la oferta de 3.3VOLT del pirata de bus para alimentar el circuito. Las resistencias de pull-Up SDA / SCL a bordo tienen el altura del bus I2C y eliminan la necesidad de resistencias externas. Un solo condensador de 0.1UF desacopla el EEPROM de la fuente de alimentación.

Configuración del modo I2C

Primero, configuramos el pirata de bus para el modo I2C y habilitamos las resistencias de pull-Up. Teniendo en cuenta que el pirata de autobús actualmente utiliza una biblioteca de Software I2C, la configuración de velocidad realmente no tiene efecto.

SPI> M <-ENTER M para modo Seleccionar 1. SPI 2. I2C 3. UART 4. crudo 2 alambre 5. Raw 3 Wire Modo> 2 <-enter 2 para i2c Conjunto de modo 900 Velocidad fijada: 1. 100kHz (estándar) 2. 400kHz (modo rápido) 3. 1MHz (alta velocidad) Velocidad> 1 <-Peed no hace realmente nada ... Conjunto de velocidad 901 202 I2C Listo, P / P para pullups I2c> p <-enable las resistencias de pull-up i2c 205 i2c pullup en I2c>

Escribir a EEPROM (I2C)

Todas las operaciones I2C comienzan con una condición de inicio {o [, y termina con una condición de parada} o]. Una escritura comienza a dirigirse al dispositivo (1 byte) y tratar de encontrar un bit de confirmación (ACK). Si la EEPROM responde, podemos enviar la ubicación de los datos para escribir (2 bytes) y la carga útil de datos (n bytes). El pirata de autobús comprueba automáticamente un ACK al final de cada escritura, y acks se lee.

La dirección de base 24LC1025 es 1010XXY, donde XX se resuelve por el estado de los Pines 2 y 3, y Y se lee (1) o escribe (0) Modo. Atamos los pines 2 y 3 altos, lo que hace que la dirección de escritura completa 1010110. Comenzaremos a escribir en el dispositivo en la primera ubicación de datos (0 0) y escribiremos uno a trece utilizando una combinación de formatos de entrada de datos (1 … 13) .

I2C> {0B10100110 0 0 1 2 3 4 5 6 7 8 9 10 0xb 0xc 13} <-i2c Comando 210 condición de inicio de I2C <-BUS START 220 I2C Escribir: 0xa6 GOT ACK: Sí <-Address enviado y ack recibido 220 I2C Escribir: 0x00 Got ACK: SI <-WSEWS 220 I2C Escribir: 0x00 Got ACK: SI <-WSEWS 220 I2C Escribir: 0x01 GOT ACK: SI <-DATA ... 220 I2C Escribir: 0x0d GOT ACK: SI Condición de parada 240 I2C I2c>

Leer de EEPROM (I2C)

La lectura del 24LC1025 toma dos pasos. Primero, un comando de escritura sin datos establece el puntero de la dirección. Segundo, una conocida de lectura

Leave a Reply

Your email address will not be published. Required fields are marked *