Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)

Hace varios años, conocí los microcontroladores rusos de la empresa Milandr. Era 2013, cuando los ingenieros debatían intensamente sobre los primeros resultados del programa estatal "Desarrollo de la base de componentes electrónicos y de la radioelectrónica" para los años 2008-2015. En ese momento, ya se había lanzado el controlador K1986ВЕ9x (núcleo Cortex-M3) y recién había aparecido el controlador 1986ВЕ1Т (núcleo Cortex-M1). Este último, en su carcasa plástica LQFP-144, tenía en la documentación la designación K1986ВЕ1QI (aero) y en el propio chip la designación MDR32F1QI. En el sitio del fabricante, tiene el sufijo "aero", ya que cuenta con interfaces específicas para la aviación (ARINC 429, MIL_STD_1553).

Curiosamente, en el momento en que se distribuían estos controladores, la empresa "Milandr" había preparado kits de depuración y una biblioteca de subprogramas para trabajar con la periférica, "pero sin ninguna garantía adicional y sin compromiso sobre la corrección de la biblioteca". La biblioteca es similar a la Standard Peripheral Library de la compañía STMicroelectronics. En general, todos los microcontroladores ARM basados en el núcleo Cortex-M tienen muchas similitudes. Por esta razón, la familiarización con los nuevos controladores rusos fue rápida. Y para aquellos que compraban los kits de depuración originales, se ofrecía soporte técnico durante su uso.

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)
Kit de depuración para el microcontrolador 1986ВЕ1Т, © Milandr

Sin embargo, con el tiempo comenzaron a aparecer "enfermedades infantiles" en los nuevos chips y bibliotecas. Los ejemplos de prueba de los firmware funcionaban sin problemas aparentes, pero al realizar modificaciones significativas, se presentaban fallos y errores. La primera "paloma mensajera" en mi práctica fueron fallos inexplicables en el funcionamiento del controlador CAN. Un año después, en el controlador 1986ВЕ1Т (aero) de la primera revisión se descubrió un problema con el módulo МКИО (canal multiplexado de intercambio de información). En general, todas las revisiones de estos microcontroladores hasta 2016 eran de utilidad limitada. Se dedicó mucho tiempo y esfuerzo a identificar estos problemas, cuyas confirmaciones ahora se pueden encontrar en listas de errores (Errata).

Una característica molesta fue que trabajar y resolver errores no se podía hacer en las placas de prueba, sino en las placas prototipo de los dispositivos que estaban destinados a fabricación en serie. Además del conector JTAG, normalmente no había nada. Conectar un analizador lógico era complicado e incómodo, y generalmente no había LEDs ni pantallas. Por esta razón, se me ocurrió la idea de crear mi propia placa de prueba.

Por un lado, en el mercado había kits de depuración de marcas, así como excelentes placas de la empresa LDM-Systems de Zelenograd. Por otro lado, los precios de estos productos son deslumbrantes, y la funcionalidad básica sin placas de expansión no cumple con las expectativas. Una placa con un controlador incorporado y un conector de pines no me interesa. Y las placas más interesantes son caras.

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)
Placa de prueba MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems

La política de precios y marketing de la empresa 'Milandr' es peculiar. Así, hay una posibilidad de obtener muestras gratuitas de algunos microchips, pero esto solo está disponible para personas jurídicas y está relacionado con un laberinto burocrático. En general, los microchips en carcasa metal-cerámica son considerados como oro en el sentido literal y figurado. Por ejemplo, el controlador 1986ВЕ1Т cuesta en Moscú entre 14 y 24 mil rublos. El microchip de memoria estática 1645РУ6У cuesta desde 15,000 rublos. Y este es el rango de precios para toda la producción. Al final, incluso los institutos de investigación especializados con pedidos estatales ahorran y evitan tales precios. Los microchips en carcasa de plástico para uso civil son significativamente más baratos, pero no están disponibles en proveedores populares. Además, la calidad de los microchips en carcasa de plástico, según mi opinión, es inferior a la de los 'dorados'. Por ejemplo, no pude hacer funcionar el controlador K1986BE1QI a 128MHz sin aumentar el parámetro de latencia de flash. Al mismo tiempo, la temperatura de este controlador subió a 40-50°C. En cambio, el controlador 1986BE1T ('dorado') se puso en marcha a 128MHz sin ajustes adicionales y permaneció frío. Es realmente bueno.

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)
Microcontrolador 'dorado' 1986BE1T, (c) Milandr

Tuve suerte de que el microcontrolador en caja de plástico se puede comprar al por menor en LDM Systems, y todos los esquemas de las placas están disponibles públicamente. Lo malo es que en la foto del controlador en el sitio web se ve la marcación que indica que es la revisión 4 de 2014, es decir, con defectos. Pensé mucho sobre si comprarlo o no. Pasaron varios años...

La idea de crear una placa de depuración no se ha desvanecido. Poco a poco fui formando todos los requisitos y pensaba en cómo colocar todo en una sola placa para que fuese compacto y económico. Al mismo tiempo, encargué en China los componentes que me faltaban. No tenía prisa: lo hacía todo para mí. Los proveedores chinos son famosos por su desorganización; tuve que pedir lo mismo en diferentes lugares para conseguir todo lo necesario. Además, algunas de las memorias resultaron ser usadas, claramente desoldadas de dispositivos rotos. Más adelante, esto me afectó.

Comprar el microcontrolador Milandr K1986BE1QI (aeronautico) no es una tarea sencilla. En la misma tienda 'Chip y Dip', en la sección 'Artículos por encargo', solo encontré el K1986BE92QI por 740 rublos, pero no me servía. La única opción era comprar en LDM-Systems una revisión antigua por 2000 rublos. Dado que no pude encontrar un reemplazo en otro lugar, decidí comprar lo que había. Para mi grata sorpresa, me vendieron un controlador nuevo de diciembre de 2018, revisión 6+ (1820). Y en el sitio web todavía aparece una foto antigua, y al momento de escribir este artículo, el controlador no está disponible...

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)
Microcontrolador K1986BE1QI (aeronautico) en empaque tecnológico, (c) Foto del autor

Principales características técnicas de mi placa de depuración MDB1986 las siguientes:

  • depurador-programador integrado, compatible con J-Link y CMSIS-DAP;
  • memoria estática de 4Mbit (256k x 16, 10 ns);
  • chip de memoria flash de 64Mbit, Winbond 25Q64FVSIG;
  • transceptor de interfaz RS-232 con líneas RTS y CTS;
  • interfaces y conectores para Ethernet, USB, CAN;
  • controlador de pantalla de 7 segmentos MAX7221;
  • conector de pines para trabajar con MKIO (MIL_STD_1553) y ARINC429;
  • fototransistor Everlight PT17-21C;
  • cinco LEDs de colores, botón de reinicio y dos botones de usuario;
  • alimentación desde el puerto USB 5 voltios;
  • dimensiones de la placa de circuito impreso 100 x 80 mm

Me gustaban las placas de la serie STM-Discovery porque tienen un programador-debugger integrado: ST-Link. El ST-Link original solo funciona con controladores de STMicroelectronics, pero hace un par de años surgió la posibilidad de actualizar el firmware de ST-Link y obtener el depurador SEGGER J-Link OB (on-board). Legalmente, el uso de este depurador está limitado solo a placas de STMicroelectronics, pero en la práctica, su potencial no tiene límites. Así, al tener J-Link OB, se puede disponer de un programador-debugger integrado en la placa de depuración. Cabe señalar que en los productos de 'LDM-Systems' se utiliza un convertidor CP2102 (Usb2Uart), que solo puede programar.

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)
Los microcontroladores STM32F103C8T6, auténticos y no tanto, (c) Foto del autor

Entonces, necesitaba comprar un STM32F103C8T6 original, ya que los firmware originales no funcionarán correctamente con un clon. Tenía mis dudas sobre esta afirmación y decidí probar el controlador CS32F103C8T6 de la empresa china CKS. No tengo quejas sobre el controlador en sí, pero el firmware original de ST-Link no funcionó. J-Link funcionó parcialmente: el dispositivo USB fue reconocido, pero el programador no cumplió con sus funciones y constantemente advertía que estaba 'defective'.

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)
Error al trabajar con un depurador en un controlador no original

No me detuve en esto y primero escribí un firmware para hacer parpadear un LED, y luego implementé una solicitud de IDCODE según el protocolo JTAG. El programador ST-Link que tenía en la placa Discovery y el programa ST-Link Utility programaron sin problemas el CS32F103C8T6. Al final, me di cuenta de que mi placa funcionaba. Para mi alegría, el controlador objetivo K1986BE1QI (aéreo) respondía rápidamente con su IDCODE a través de la línea TDO.

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)
Osciloscopio de la línea de señal TDO con la respuesta codificada IDCODE, (c) Foto del autor

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)
Aquí también fue útil el puerto SWD para depurar el depurador y verificar el IDCODE

Quedaba la opción de usar el depurador CMSIS-DAP (Debug Access Port). Montar un proyecto a partir de fuentes de ARM no es una tarea sencilla, tomé el proyecto de X893, y luego también probé DAP42. Desafortunadamente, Keil uVision se congelaba y no quería trabajar con ellos. Al final, reemplacé el chip del depurador por uno original STM32F103C8T6 y no volví a tocar este tema.

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)
Funcionamiento exitoso del depurador integrado J-Link STLink V2

Cuando todos los componentes clave de la futura placa de depuración estaban disponibles, me metí en Eagle CAD y descubrí que no estaban en la biblioteca de elementos. No había otra opción, así que tuve que diseñarlos yo mismo. Aproveché para crear los asentamientos para la memoria, el conector HanRun para Ethernet y añadí marcos para los resistores y condensadores. El archivo del proyecto y la biblioteca de componentes se pueden encontrar en mi GitHub.

Esquema de la placa de depuración MDB1986Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)

La placa se alimenta de una fuente de corriente continua de 5 voltios, proveniente del puerto USB. En total, la placa tiene dos puertos USB Type-B. Uno es para el programador, el segundo es para el controlador K1986BE1QI. La placa puede funcionar con cualquiera de estas fuentes o con ambas a la vez. Un ajuste simple de la carga y la protección de las líneas de alimentación se implementan con diodos Schottky, en el esquema D2 y D3 (SS24). También se pueden ver en el esquema los fusibles auto-reparables F1 y F2 de 500 mA. Las líneas de señal del puerto USB están protegidas por un conjunto de diodos USBLC6-2SC6.

El esquema del depurador-programador ST-Link es conocido por muchos, y se puede encontrar en la documentación de las placas STM32-Discovery y otras fuentes. Para la programación inicial del clon ST-Link/J-Link-OB/DAP (a elegir) he conectado las líneas SWDIO (PA13), SWCLK (PA14), GND. Muchos utilizan UART para la programación y se ven obligados a mover los puentes BOOT. Pero me resulta más cómodo usar SWD, además este protocolo permite depurar.

Casi todos los componentes de la placa se alimentan de 3.3 voltios, que provienen del regulador de voltaje AMS1117-3.3. Para suprimir las interferencias electromagnéticas y los picos de corriente, se utilizan filtros LC compuestos por capacitores y inductores de la serie BLM31PG.

Cabe mencionar el controlador de pantalla de 7 segmentos MAX7221. Según la especificación, la alimentación recomendada es de 4 a 5.5 voltios, y el nivel de señal alta (bit lógico uno) es de al menos 3.5V (0.7 x VCC) cuando se alimenta a 5V. En el controlador K1986BE1QI (aviación), la salida de un uno lógico corresponde a un voltaje de entre 2.8 y 3.3V. Obviamente, hay una discrepancia en los niveles de señal que puede interrumpir el funcionamiento normal. Decidí alimentar el MAX7221 con 4V y disminuir los niveles de señal a 2.8V (0.7 x 4 = 2.8). Para esto, se colocó un diodo D4 (RS1A o FR103) en serie en el circuito de alimentación del controlador. En total, la caída de voltaje es de 0.9V (diodo Schottky 0.3V y diodo 0.6V), y todo funciona.

La mayoría de los puertos del microcontrolador K1986ВЕ1QI (aéreo) son compatibles con señales de hasta 5V. Por lo tanto, el uso del transceptor CAN MCP2551, que también funciona con 5V, no presenta problemas. En el esquema se indica un transceptor RS-232 MAX3232, pero en realidad utilicé el SN65C3232D de Texas Instruments, ya que funciona a 3.3V y ofrece velocidades de hasta 1Mbit/s.

En la placa se encuentran 4 resonadores de cuarzo: uno para el depurador (8MHz) y tres para el microcontrolador K1986ВЕ1QI (aéreo) con valores de 32.768kHz, 16MHz y 25MHz. Estos son componentes necesarios, ya que los parámetros del generador RC integrado varían entre 6 y 10 MHz. La frecuencia de 25MHz es necesaria para el funcionamiento del controlador Ethernet integrado. En el sitio de Milandr (posiblemente por error) se indica que el Ethernet no está presente en la carcasa de plástico. Pero nos basaremos en la especificación y los hechos.

Un estímulo importante para crear mi propia placa de depuración fue la posibilidad de trabajar con el bus de sistema externo EBC (controlador de bus externo), que en esencia es un puerto paralelo. El microcontrolador K1986ВЕ1QI (aéreo) permite conectar y trabajar con microchips de memoria y dispositivos periféricos externos, como ADC, FPGA, etc. Las capacidades del bus de sistema externo son bastante grandes: se puede trabajar con RAM estática de 8, 16 y 32 bits, ROM y NAND Flash. Para la lectura/escritura de datos de 32 bits, el controlador puede realizar automáticamente 2 operaciones correspondientes para microchips de 16 bits, y para microchips de 8 bits, 4 operaciones. Es evidente que la operación de entrada/salida de 32 bits se realizará más rápidamente con un bus de datos de 32 bits. Entre las desventajas se puede señalar la necesidad de manejar datos de 32 bits en el programa, y en la placa habrá que trazar 32 pistas.

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)
Microchips de RAM estática, usados (adivina cuál tiene defecto)

Una solución equilibrada es el uso de microchips de memoria de 16 bits. Tengo en stock microchips de Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16 x 256k, 10 ns, 3.3V). Por supuesto, la empresa 'Milandr' tiene sus propios microchips de memoria estática. serie 1645РУ, pero son demasiado caros e inaccesibles. Como alternativa, hay otros chips compatibles como el Samsung K6R4016V1D. Mencioné anteriormente que los chips resultaron ser de segunda mano y el que instalé originalmente falló, dando valores caóticos en la línea de datos 15. Pasé varios días buscando errores de hardware, y la satisfacción fue mayor cuando reemplacé el chip dañado por uno funcional. De todos modos, la velocidad de acceso a la memoria externa deja mucho que desear.

Bus externo y modo StandAloneEl microcontrolador К1986ВЕ1QI (aeroespacial) tiene un modo StandAlone único, que está diseñado para el acceso directo desde el exterior a los controladores Ethernet y MKIO (MIL_STD_1553) a través del bus externo, mientras que el núcleo se encuentra en estado de reinicio, es decir, no se utiliza. Este modo es conveniente para procesadores y FPGAs que no cuentan con Ethernet y/o MKIO.
El esquema de conexión es el siguiente:

  • bus de datos MCU(D0-D15) => SRAM(I/O0-I/O15),
  • bus de direcciones MCU(A1-A18) => SRAM(A0-A17),
  • control MCU(nWR,nRD,PortC2) => SRAM (WE,OE,CE),
  • SRAM(UB,LB) conectados o llevados a tierra a través de una resistencia.

La línea CE está conectada a la alimentación a través de una resistencia, los pines para la selección de byte de la MCU(BE0-BE3) no se utilizan. En el spoiler incluyo el código de inicialización de los puertos y del controlador del bus externo.

Inicialización de puertos y del controlador EBC (controlador de bus externo)

void SRAM_Init (void)
{
	EBC_InitTypeDef EBC_InitStruct = { 0 };
	EBC_MemRegionInitTypeDef EBC_MemRegionInitStruct = { 0 };
	PORT_InitTypeDef initStruct = { 0 };

	RST_CLK_PCLKcmd (RST_CLK_PCLK_EBC, ENABLE);

	PORT_StructInit (&initStruct);
	//--------------------------------------------//
	// DATA PA0..PA15 (D0..D15)                   //
	//--------------------------------------------//
	initStruct.PORT_MODE = PORT_MODE_DIGITAL;
	initStruct.PORT_PD_SHM = PORT_PD_SHM_ON;
	initStruct.PORT_SPEED = PORT_SPEED_FAST;
	initStruct.PORT_FUNC = PORT_FUNC_MAIN;
	initStruct.PORT_Pin = PORT_Pin_All;
	PORT_Init (MDR_PORTA, &initStruct);
	//--------------------------------------------//
	// Address PF3-PF15 (A0..A12), A0 - not used. //
	//--------------------------------------------//
	initStruct.PORT_FUNC = PORT_FUNC_ALTER;
	initStruct.PORT_Pin = PORT_Pin_4 | PORT_Pin_5 |
								PORT_Pin_6 | PORT_Pin_7 |
								PORT_Pin_8 | PORT_Pin_9 |
								PORT_Pin_10 | PORT_Pin_11 |
								PORT_Pin_12 | PORT_Pin_13 |
								PORT_Pin_14 | PORT_Pin_15;
	PORT_Init (MDR_PORTF, &initStruct);
	//--------------------------------------------//
	// Address PD3..PD0 (A13..A16)                //
	//--------------------------------------------//
	initStruct.PORT_FUNC = PORT_FUNC_OVERRID;
	initStruct.PORT_Pin = PORT_Pin_0 | PORT_Pin_1 |
								PORT_Pin_2 | PORT_Pin_3;
	PORT_Init (MDR_PORTD, &initStruct);
	//--------------------------------------------//
	// Address PE3, PE4 (A17, A18)                //
	//--------------------------------------------//
	initStruct.PORT_FUNC = PORT_FUNC_ALTER;
	initStruct.PORT_Pin = PORT_Pin_3 | PORT_Pin_4;
	PORT_Init (MDR_PORTE, &initStruct);
	//--------------------------------------------//
	// Control PC0,PC1 (nWE,nOE)                  //
	//--------------------------------------------//
	initStruct.PORT_FUNC = PORT_FUNC_MAIN;
	initStruct.PORT_Pin = PORT_Pin_0 | PORT_Pin_1;
	PORT_Init (MDR_PORTC, &initStruct);
	//--------------------------------------------//
	// Control PC2 (nCE)                          //
	//--------------------------------------------//
	initStruct.PORT_PD = PORT_PD_DRIVER;
	initStruct.PORT_OE = PORT_OE_OUT;
	initStruct.PORT_FUNC = PORT_FUNC_PORT;
	initStruct.PORT_Pin = MDB_SRAM_CE;
	PORT_Init (MDR_PORTC, &initStruct);

	//--------------------------------------------//
	// Initialize EBC controller                   //
	//--------------------------------------------//
	EBC_DeInit();
	EBC_StructInit(&EBC_InitStruct);
	EBC_InitStruct.EBC_Mode = EBC_MODE_RAM;
	EBC_InitStruct.EBC_WaitState = EBC_WAIT_STATE_3HCLK;
	EBC_InitStruct.EBC_DataAlignment = EBC_EBC_DATA_ALIGNMENT_16;
	EBC_Init(&EBC_InitStruct);
	
	EBC_MemRegionStructInit(&EBC_MemRegionInitStruct);
	EBC_MemRegionInitStruct.WS_Active = 2;
	EBC_MemRegionInitStruct.WS_Setup = EBC_WS_SETUP_CYCLE_1HCLK;
	EBC_MemRegionInitStruct.WS_Hold = EBC_WS_HOLD_CYCLE_1HCLK;
	EBC_MemRegionInitStruct.Enable_Tune = ENABLE;
	EBC_MemRegionInit (&EBC_MemRegionInitStruct, EBC_MEM_REGION_60000000);
	EBC_MemRegionCMD(EBC_MEM_REGION_60000000, ENABLE);

	// Turn ON RAM (nCE)
	PORT_ResetBits (MDR_PORTC, MDB_SRAM_CE);
}

El microcontrolador en un encapsulado LQFP-144 y la memoria en un encapsulado TSOP-44 tienen muchos pines relacionados y ocupan mucho espacio en la placa de circuito impreso. Con experiencia en la resolución de problemas de optimización en el ámbito económico, me pareció evidente que era necesario colocar estos circuitos en la placa como prioridad. En diversas fuentes me encontré con reseñas elogiosas sobre el software CAD TopoR (Topological Router). Descargué la versión de prueba y pude exportar mi proyecto desde Eagle CAD solo después de eliminar casi todos los componentes. Lamentablemente, incluso con 10 elementos, el programa TopoR no me ayudó a ubicarlos en la placa. Al principio, todos los componentes estaban colocados en una esquina, y luego se distribuyeron a lo largo del borde. Esta opción no me satisfizo, y terminé realizando el enrutamiento de la placa de forma manual en el entorno habitual de Eagle CAD.

Un elemento importante de la placa de circuito impreso es la serigrafía. En la placa de prueba no solo deben estar las etiquetas de los componentes electrónicos, sino que también todos los conectores deben ser identificados. En la parte posterior de la placa, coloqué tablas recordatorias con las funciones de los puertos del controlador (principal, alternativo, redefinido, actual). Encargué la fabricación de las placas de circuito impreso en China, en la conocida empresa PCBWay. No diré que son excelentes, porque la calidad es buena. Pueden hacerlo mejor, con menores tolerancias, pero a un costo adicional.

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)
Las placas de circuito impreso MDB1986, (c) Foto del autor

Tuve que soldar los componentes 'a mano' con un soldador de 40 vatios y soldadura POS-61, porque soldar es algo que hago poco, 1-2 veces al año, y la pasta de soldadura se había secado. También tuve que cambiar el controlador chino CS32F103 por un STM32F103 original, y luego también reemplazar la memoria. En general, ahora estoy completamente satisfecho con el resultado, aunque aún no he probado el funcionamiento de RS-232 y CAN.

Desarrollo de la placa de depuración para el K1986ВЕ1QI (aero)
La placa de prueba MDB1986 en funcionamiento — brilla y calienta, (c) Foto del autor

En el sitio de 'Milandra' se pueden encontrar suficientes materiales didácticos para el estudio de los controladores la serie 1986BE9 (núcleo Cortex-M3), pero no veo nada para el microcontrolador K1986BE1QI (aeroespacial). Al revisar los materiales publicados, guías de estudios y trabajos de laboratorio para universidades, me alegra que se estén preparando profesionales en todo el país para trabajar con controladores rusos. La mayoría del material educativo se centra en trabajar con puertos de entrada/salida, temporizadores, ADC, DAC, SPI, UART. Se utilizan diferentes entornos de desarrollo IDE (Keil, IAR, CodeMaster). En algunos casos, se programa utilizando registros CMSIS, mientras que en otros se usa la librería MDR. Es necesario mencionar el recurso Start Milandr, que contiene muchos artículos de programadores prácticos. Y, por supuesto, no debemos olvidar el foro de Milandr.

Pensando en MilandrLa microelectrónica en Rusia está en desarrollo, y en este proceso la empresa 'Milandr' juega un papel destacado. Aparecen nuevos microcontroladores interesantes, como el 1986BE81T y 'Electrosila' con interfaces SpaceWire y MKIO (similar al 1986BE1 y, posiblemente, con los mismos problemas), etc. Pero para estudiantes simples, profesores e ingenieros civiles, conseguir tales chips no es realista. Esto significa que la comunidad de ingenieros no podrá detectar rápidamente errores y problemas de este chip. Me parece que primero es necesario lanzar chips en un encapsulado plástico, distribuirlos entre todas las partes interesadas, y después de la prueba (lat. approbatio - aprobación, reconocimiento) por parte de los especialistas, se puede preparar una revisión en un encapsulado metalocerámico con protecciones contra todos los factores adversos. Espero que en un futuro cercano nos alegren a TODOS con los nuevos proyectos anunciados en exposiciones.
La placa de depuración que he desarrollado puede ser reproducida, modificada y utilizada en el proceso educativo por cualquiera. En primer lugar, hice la placa para mí, pero resultó tan bien que decidí compartirlo con todos.

El K1986BE1QI (aeroespacial) es un controlador muy interesante con interfaces únicas que puede ser utilizado en universidades para la enseñanza de estudiantes. Creo que después de corregir los errores identificados en el controlador y pasar las pruebas de certificación, ¡el controlador volará, en el sentido literal de la palabra!

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster