Bus Blaster: interfaz universal de bits rápidos para entusiastas de los pacientes



Hace tiempo que quería tener algún tipo de interfaz de hardware simple y universal con varias señales de entrada y salida, cuya funcionalidad está determinada exclusivamente por el software, como el memorable programador PonyProg . Y para que pueda usarse no solo como firmware de lectura / escritura, sino también para depurar programas a través de JTAG. Al mismo tiempo, comprar algo industrial, con mis mimos ocasionales con la electrónica, es redundante y no rentable: requería algo de una serie de "productos semiacabados" basados ​​en bit-bang .

¿Qué es bit bang y por qué es necesario?
- , Windows 9x (COM) (LPT) . , , . , , . bit-bang, — «», «» ..

2k/XP /, giveio. NT, - .

Como saben, las computadoras modernas, especialmente las computadoras portátiles, con puertos de hardware no están llenas, porque la mayoría de los usuarios no las necesitan. Los adaptadores USB para conectar dispositivos con interfaces RS232 y Centronics (coloquialmente - COM / LPT) funcionan bien solo en el marco del propósito principal, y hacerlos "sacudidos" es problemático por varias razones. En primer lugar, la mayoría de estos adaptadores solo pueden procesar señales de datos (el mismo Tx / Rx) con buena velocidad, y procesa las señales de control con grandes retrasos. En segundo lugar, los adaptadores de diferentes fabricantes son incompatibles con el hardware, y las posibilidades de control no estándar a través del controlador del fabricante son muy limitadas. En tercer lugar, casi todos los controladores usan paquetes USB separados para enviar comandos al adaptador, lo que limita la frecuencia de los cambios de estado a solo mil veces por segundo,que para muchas aplicaciones es catastróficamente pequeño.

Afortunadamente, FTDI ha estado ofreciendo durante mucho tiempo una gama de soluciones USB que se centran específicamente en el intercambio de señales arbitrarias a alta velocidad. Un estudio rápido del problema mostró que los más populares a este respecto son las interfaces en los microcircuitos FT232H / FT2232H .

Soluciones simples


Inicialmente, FTDI implementó en sus interfaces USB FT232BM, FT232R y otros dos modos adicionales: bit-bang asíncrono y síncrono. Para esto, se agregan ocho o más líneas de señal adicionales, cada una de las cuales se puede configurar para entrada o salida. Los datos almacenados en el búfer transmitidos a la interfaz desde la computadora se establecen en las líneas de salida mediante las señales del reloj, los datos de entrada se leen desde las líneas, se almacenan en el búfer y se envían a la computadora. La vinculación de E / S al reloj proporciona una buena precisión de intervalos: la aplicación ya no necesita ocuparse de mantenerlos mediante programación.

Por lo tanto, en lugar del ciclo tradicional del tipo "establezca el nivel activo en la línea de salida; pausa; leer el estado de la línea de entrada; establecer el nivel pasivo en la línea de salida ", la aplicación genera una secuencia de bytes, cada uno de los cuales establece el estado de las líneas de salida para un período de reloj. La secuencia se envía a la interfaz, y desde allí se lee la misma secuencia, lo que refleja el estado de las líneas de entrada. En modo asíncrono, la entrada y la salida se producen de forma independiente. La lectura sincronizada de las entradas se realiza inmediatamente antes de configurar las señales en las salidas, lo que permite un trabajo más confiable con señales que cambian rápidamente.

Controlador MPSSE


En la versión H de los chips FTDI, se agrega un controlador serie síncrono multiprotocolo ( MPSSE ), que el hardware implementa varios modos de reloj y de intercambio de datos. La formación de las señales del protocolo deseado se lleva a cabo transmitiendo al controlador una serie de sus comandos internos que especifican los métodos de temporización, la temporización de las señales de configuración / lectura (en la parte frontal o inferior del pulso del reloj), el orden de transmisión de bits (LSB / MSB). El controlador devuelve una secuencia de "instantáneas" de las líneas de entrada. La velocidad de transferencia de datos puede alcanzar los 30 Mbps.

A través de MPSSE, los protocolos JTAG , I2C y SPI se implementan de forma más natural.Sin embargo, casi cualquier "sacudida" se puede implementar fácilmente dentro de las capacidades de hardware del controlador.

FTDI ofrece una amplia documentación sobre la conexión y programación de sus interfaces, bibliotecas y programas de muestra para trabajar a través de MPSSE para Windows, Linux y MacOS , controladores D2XX para la interacción directa con la interfaz.

Las interfaces FTDI son compatibles con los programas populares OpenOCD , UrJTAG , flashrom , avrdude , HappyJTAG2 , zJTAG , etc.

Problemas de conectividad


Después de descubrir todo lo anterior en detalle el año pasado, me inspiré, pero inmediatamente descubrí que el FT232H / FT2232H, con toda su versatilidad, no siempre se puede conectar directamente al dispositivo final. En primer lugar, las líneas externas de los circuitos están diseñadas para el nivel de 3.3 V, y en muchos dispositivos modernos se usan los niveles de 2.5 / 1.8 / 1.5 V. En segundo lugar, las líneas de salida no pueden cambiar al estado de alta impedancia y viceversa con alta frecuencia; esto es posible solo en el inicio establecer líneas seleccionando el modo "entrada" o "salida". Es decir, para conectar un chip con MPSSE al dispositivo de destino, se necesita un circuito buffer que coincida con los niveles de señal y proporcione un apagado operativo de algunas líneas de salida (por ejemplo, con un nivel de señal TMS pasivo/ Cs ).

Buscando en Google las opciones para los circuitos de buffer, descubrí que se han hecho una increíble cantidad de adaptadores en el mundo, que solo difieren en este buffer. Algunos programas (pero no todos) permiten el uso de diferentes tipos de buffers. Por lo tanto, al elegir un modelo de adaptador específico, al mismo tiempo limita el rango de programas que funcionarán con él. Y para decidir el tipo de antemano, fue necesario nuevamente buscar en Google cuidadosamente y leer las discusiones en los foros, lo que no quería hacer en absoluto. Algunos adaptadores permitieron establecer la configuración del búfer con puentes, pero esto está lleno de errores y no son baratos.

Bus Blaster: reclamo de versatilidad


La idea masculina de los prototipos peligrosos fue original dos veces: la primera, como un búfer conectado al chip FT2232H PLD (CPLD) Xilinx XC2C32A , que puede reprogramarse rápidamente en cualquier configuración, y la segunda, para su uso, reprogramación del segundo canal FT2232H. Además de implementar la lógica del búfer, el FPGA realiza una coincidencia de nivel: sus líneas externas operan en el rango de 1.5-3.3 V.

Como resultado, la placa Bus Blaster resultó. Desde la llegada del proyecto, se han reemplazado cuatro versiones del tablero. La versión 3 se considera la más estable y extendida, la versión 4 contiene un gran FPGA que no está completamente desarrollado y se usa con mucha menos frecuencia. Las próximas versiones, aparentemente, ya no lo serán, ya que el desarrollo del proyecto se detuvo hace un par de años. Me dio la impresión de que pocas personas realmente probaron la placa; con su alto potencial, no es demasiado fácil de usar. Se ha creado una sección del foro para la junta , pero desde el año pasado casi nada se ha escrito allí.

Tras reflexionar, pedí en la versión AliExpress 3c , como la más desarrollada, por $ 34. Luego fueron vendidos allí por una tienda del fabricante: Seeed , y ahora solo los vendedores de $ 52 lo venden.Directamente en Seeed (junto con el envío) costará alrededor de $ 37.

Primeras impresiones


El tablero se ve exactamente igual que en la imagen: hermoso, ordenado, hecho con alta calidad. En el foro, alguien se quejó de la falta de salida del microcircuito, por lo que examiné cuidadosamente debajo de una lupa; no encontré ningún defecto. Ya tenía los

controladores D2XX instalados anteriormente, por lo que la placa se reconoció sobre la marcha . El primer paso fue lidiar con la lógica del búfer de programación en FPGA. Esto se hace utilizando el programa UrJTAG , pero especialmente ajustado para Bus Blaster para un acceso adecuado al segundo canal FT2232H.

Primero debe descargar e instalar la versión básica de UrJTAG . Luego debe agregar un archivo EXE modificado y una descripción de FPGA (BSDL) desde este paquete. Para programar el FPGA integrado, debe ejecutar un EXE modificado para trabajar con dispositivos externos, el principal. El procedimiento de programación FPGA se describe aquí . Para mayor comodidad, puede crear scripts para UrJTAG para cada versión del búfer y archivos CMD con líneas de comando para ejecutarlos.

Una colección de FPGA Firmware que describe tampones compatibles con JTAGkey , KT-Link, y adaptadores PicoTap está disponible aquí , pero para BBv3 sólo hay un archivo para JTAGkey con soporte para la auto-prueba (BBV3-JTAGkey-autocomprobación-v1.1.svf). La mayor parte es suficiente, pero no funcionó para mí con flashrom , que se analizará a continuación.

Después de escribir este firmware en el FPGA, puse puentes en el conector para la autocomprobación, como se describe en la documentación , cerré la línea P28 (IO09) al suelo: el LED de la placa se iluminó. Descargué y lancé el programa de prueba : mostró que todo está en orden.

Es extraño, por cierto, que el programa de autocomprobación se llame "BusPiratev2Test", porque Bus Pirate es un proyecto completamente diferente, no compatible con BB .

Al principio, generalmente creía que este firmware estaba destinado solo para autocomprobación, y para aplicaciones "militares" se necesitaba otro tipo, porque la descripción dice algo inaudible. Luego descubrí que el firmware es universal, solo el modo de prueba está activado al poner en cortocircuito P28 al suelo.

Intento de orientación


Una vez que haya descargado desde aquí (ahora hay, por desgracia, 404) flashrom v0.9.6.1-r1704 / Win32, y sellado con algún tipo de chip de placa base MX25L8005 (SPI), intentó leerlo en la línea de comando " -p ft2232_spi: tipo = busblaster ". Sin embargo, flashrom dijo que no podía encontrar el FT2232. La lectura de la documentación mostró que solo funciona a través de libusb , una biblioteca de interfaz universal, originalmente escrita en Linux y luego portada en Windows.

A través de libusb, encontró la interfaz, pero tercamente afirmó que no vio el microcircuito. Encontrado en la caja con los frutos de la necrofilia, algún otro chip SPI, que tampoco se ve. Empujado por un osciloscopio - TMSse agita, TCK está, TDO está encendido y silencio en TDI . En general, ni una sola oleada. Conecté los canales del osciloscopio simultáneamente a TCK y TDO ; las señales cambian sincrónicamente, claramente. No había ideas sobre lo que podría verificarse todavía. Renunciar

temporalmente a experimentos con flashrom, conectado a la interfaz ATTiny13 . Descargando aquí algunas versiones diferentes de avrdude , con la versión 5.11-Patch7610 / Win32 y el tipo de programación 2232HIOFinalmente obtuve una clara identificación, lectura y escritura del controlador. Después de alegrarse, volvió a conectar los chips SPI, pero flashrom se negó obstinadamente a reconocerlos.

Sospechando que ambos microcircuitos están muertos, sacó USBASP 2.0 , que fue intercambiado por AsProg ; los leyó a ambos sin problemas (aunque muy lentamente). Por cierto, compré tres USBASP en general para el papel de placas de prototipos convenientes en ATMega8, pero el dispositivo resultó ser inesperadamente multifuncional.

Conecté los microcircuitos a BB nuevamente y comencé a probar flashrom en diferentes modos (Bus Blaster y JTAGKey), con diferentes valores de divisor ( -p ft2232_spi: type = busblaster, divisor = n) De repente, en una de las combinaciones, el microcircuito fue reconocido, pero ya se negó a leer. Después de algunos intentos más, la identificación también desapareció. Luego, varias veces fue posible obtener varias identificaciones exitosas seguidas, pero la lectura nunca se logró.

Publicado en el foro, pero no recibió nada sensible en respuesta. Después de rebuscar en la búsqueda, encontré quejas de varias personas sobre el firmware universal FPGA (con autocomprobación), encontré tres versiones más de firmware allí, las probé en diferentes combinaciones con otros parámetros, pero no tuve éxito. Habiendo agotado todas las opciones, abandonó los experimentos hasta que la llegada del analizador lógico ordenó un poco más tarde BB.

Probar con un analizador


Habiendo recibido un clon del popular analizador lógico Saleae Logic 16 , lo conectó a las cuatro líneas SPI . El programa, disponible de forma gratuita en el sitio web de Saleae , puede descifrar I2C, SPI y varios otros, por lo que mostró inmediatamente el descifrado de todos los paquetes, tanto enviados como recibidos. Inmediatamente se hizo evidente que los paquetes están "flotando": el programa agrupa la misma secuencia de bits en paquetes en diferentes límites una y otra vez.

Al comparar los diagramas de señal en las hojas de datos de los microcircuitos con los grabados, en algún momento noté que la señal TMS (conectada al pin CS) al comienzo de cada sesión de intercambio, pasa a un nivel bajo (nivel activo), en el que permanece, aunque de acuerdo con el protocolo debe volver a un nivel alto (pasivo) al final de cada operación. Cambié el firmware "oficial" del FPGA por uno alternativo: TMS comenzó a moverse más activamente, los bordes de los paquetes alineados en él, y después de seleccionar el divisor de frecuencia del reloj en la línea de comando de flashrom (se detuvo en 8), el microcircuito finalmente comenzó a responder claramente a cada solicitud, leer y sobrescribir .

Sorprendido de que no presté la debida atención al comportamiento de TMS de inmediato , me di cuenta de que estaba confundido por el trabajo exitoso con AVR en el mismo firmware FPGA. Mirando la hoja de datos ATTiny13, encontré que la señal RESET , que TMS iniciapuede ser bajo durante todo el tiempo de intercambio; no se requiere su aumento para la sincronización. Y los chips SPI necesitan su aumento para la sincronización.

Como resultado de las pruebas, reuní información sobre tres conocidos firmware FPGA en una publicación del foro .

Límite de reescritura de FPGA


En una de las discusiones me topé con una advertencia de que el número garantizado de ciclos para reescribir el firmware de este FPGA es solo de aproximadamente mil. Al principio estaba molesto, porque durante los experimentos pude cambiar el firmware unas cien veces, y ya imaginaba la muerte inminente del chip. No cuesta nada, pero no quiero meterme con la soldadura. Luego se dio cuenta de que con un enfoque adecuado, los novecientos ciclos restantes serían suficientes para muchos años más.

Intermitente de ROM en circuito en el enrutador


Después de un tiempo, formé un mini enrutador recién horneado en el RT5350F con el nombre en clave "ZLMNet H-G5 / P8201" (designaciones tomadas de la interfaz web). Casi al mismo tiempo, también llegó el clip para SOIC8 / SOP8: decidí probar el trabajo en circuito con la ROM.

Al principio, flashrom no vio la EPROM a través de BB en absoluto. El osciloscopio mostró que el procesador siempre venció la lucha entre el FPGA y el procesador del enrutador por los niveles de señal de CS y CLK . Lo que no es sorprendente: en BB entre los terminales FPGA y el conector hay resistencias limitantes de corriente que evitan que las teclas FPGA de baja corriente se quemen.

Conecté USBASP con AsProg: este lee / escribe normalmente, pero de nuevo muy lentamente (9 minutos para leer, 25 minutos para el ciclo de borrado-escritura-verificación). Para una revitalización única de un ladrillo, todavía es aceptable, pero para experimentos con firmware inestable ya no está allí. Además, AsProg no sabe cómo trabajar con páginas individuales, solo con todo el microcircuito.

Solde entre las salidas TMS / TCK en BB y las entradas CS / CLK de la EPROM para el seguidor del emisor: las señales condujeron inmediatamente a casi los niveles correctos, reconoció el chip flashrom, comenzó a leer / escribir con confianza. Con un divisor de 8, una lectura completa lleva menos de un minuto, la reescritura dura unos dos minutos.

Resultó que la comunicación del programador con la EPROM no interfiere en absoluto con el procesador: el enrutador funciona perfectamente. Obviamente, las líneas CS / CLK se asignan solo para la EPROM, que se lee una vez en el arranque, después de lo cual el procesador no accede a ella si no comienza a flashearla con medios regulares.

Desventajas de los programas BB


Los programas probados (zJTAG, flashrom, avrdude, UrJtag, OpenOCD) que pueden funcionar con MPSSE causaron una impresión muy triste. Primero, en la mayoría de estos programas, con toda la variedad de adaptadores FTDI, no hay una indicación explícita de VID / PID: los identificadores de los adaptadores conocidos están codificados en el código. Pero para JTAGkey, que emula BB, PID está configurado en CFF8, y para FT2232H "limpio" está configurado en 6010. Por supuesto, puede cambiar los identificadores en BB usando FT_Prog , o parchear la tabla en el programa, pero ambas opciones están igualmente torcidas. Bueno, logré encontrar una versión de flashrom con soporte BB compilado para Windows (de lo contrario, tendría que instalar CygWin), y avrdude funciona bien al especificar el tipo de programador 2232HIO .

En segundo lugar, algunos programas funcionan con el adaptador solo a través de la biblioteca libusb , que, a su vez, funciona a través de su propio controlador, que es incompatible con los controladores FTDI. Es bueno que en Windows, para cambiar entre controladores, no necesite eliminar completamente uno e instalar el otro, solo necesita "actualizarlo" eligiendo por la fuerza el controlador adecuado para el dispositivo dado (canal A o B).

recomendaciones


Ahora, recordando la cantidad acumulada de tiempo y nervios invertidos en todos los experimentos descritos, entiendo que el precio de la elegancia externa y la aparente universalidad de la solución resultaron prohibitivos. Paso este tiempo adicionalmente en el trabajo principal: ganaría algunos programadores y depuradores industriales serios. Pero la ventaja indudable es que tales ejercicios, al menos de alguna manera, le permiten abstenerse de la última diapositiva hacia el consumo neto de módulos personalizados listos para usar, que los chinos ofrecen en abundancia. En este sentido, es posible envidiar a los ingenieros antiguos y medievales: durante décadas pudieron resolver con entusiasmo los problemas resueltos hace mucho tiempo en un par de miles de kilómetros en el vecindario, simplemente sin saberlo.

Deberíamos probar OpenOCD y JTAG en algunos de los enrutadores disponibles, pero todos no lo tienen en sus manos.

Dangerous Prototypes también tiene un proyecto más antiguo de Bus Pirate . Hay una placa PIC y una interfaz simple FT232BL en el modo serie tradicional. Para comunicarse con el controlador, se utilizan un terminal regular y comandos de texto, las respuestas también se muestran en forma de texto. avrdude, flashrom y otros programas también pueden funcionar a través de BP, sin embargo, por razones obvias, la velocidad es varias veces menor. La baja velocidad se compensa con la amplitud de la aplicación: hay muchas opciones para usar BP para emular varios protocolos.

Pensando que en esta vida necesitas probar todo, pedí BP v3.6con cable Sí, sí, recuerdo los ratones del cactus y sobre "mañana iré allí de nuevo".

Source: https://habr.com/ru/post/es380531/


All Articles