Desarrollo de una placa de depuración para K1986BE1QI (aire)

Junta de depuración MDB1986

Hace unos años, me reuní con los microcontroladores rusos de Milander. Era 2013, cuando los ingenieros discutieron enérgicamente los primeros resultados del Programa Federal de objetivos "Desarrollo de la base de componentes electrónicos y radioelectrónica" para 2008-2015. En ese momento, el controlador K1986BE9x (núcleo Cortex-M3) ya se lanzó y el controlador 1986BE1T (núcleo Cortex-M1) acaba de aparecer. Él en la caja de plástico LQFP-144 tenía la designación K1986BE1QI (aviación), y en el chip en sí la designación MDR32F1QI. En el sitio web del fabricante tiene el sufijo "avia", ya que tiene interfaces específicas para la industria aeronáutica (ARINC 429, MIL_STD_1553).

Sorprendentemente, en el momento de la distribución de estos controladores, la compañía Milander preparó kits de depuración y una biblioteca de subprogramas para trabajar con periféricos, "pero sin garantías y obligaciones adicionales con respecto a la corrección de la biblioteca". La biblioteca es similar a la Biblioteca periférica estándar de STMicroelectronics. En general, todos los controladores ARM construidos en el núcleo Cortex-M tienen mucho en común. Por esta razón, el conocimiento de los nuevos controladores rusos fue rápido. Y para aquellos que compraron kits de depuración de marca, se proporcionó soporte técnico durante el uso.


Kit de depuración para el microcontrolador 1986BE1T, © Milander

Sin embargo, con el tiempo, comenzaron a aparecer "enfermedades infantiles" de nuevos microcircuitos y bibliotecas. Los ejemplos de prueba de firmware funcionaron sin problemas visibles, pero con una modificación significativa, se produjeron bloqueos y errores. El primer "trago" en mi práctica fueron fallas inexplicables en la operación del controlador CAN. Un año después, en el controlador de auditoría temprana 1986BE1T (aire), se detectó un problema con el módulo MKIO (canal de intercambio de información multiplexado) . En general, todas las revisiones de estos microcontroladores hasta 2016 fueron de uso limitado. Tomó mucho tiempo y nervios identificar estos problemas, cuya confirmación ahora se puede encontrar en las listas de errores (Errata) .

Una característica desagradable era que era necesario trabajar y lidiar con los errores no en las placas de depuración, sino en las placas prototipo de los dispositivos que estaban planificados para la producción en serie. Aparte del conector JTAG, generalmente no había nada allí. Conectarse con un analizador lógico fue difícil e inconveniente, y generalmente no había LED ni pantallas. Por esta razón, pensé en crear mi propio tablero de depuración.

Por un lado, había kits de depuración de marca en el mercado, así como maravillosos tableros de LDM-Systems de Zelenograd. Por otro lado, los precios de estos productos se convierten en un estupor, y la funcionalidad básica sin tarjetas de expansión no cumple con las expectativas. Una placa con un controlador soldado y un conector pin no me interesa. Y los tableros más interesantes son caros.


Tarjeta de depuración MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems

Los precios y el marketing de la empresa "Milander" son peculiares. Por lo tanto, es posible obtener muestras gratuitas de algunos microcircuitos, pero esto está disponible solo para personas jurídicas y está asociado con una búsqueda burocrática. En general, los microcircuitos en una caja de metal y cerámica son dorados en un sentido directo y figurado. Por ejemplo, el controlador 1986BE1T cuesta de 14 a 24 mil rublos en Moscú. El chip de memoria estática 1645RU6U cuesta desde 15,000 rublos. Y tal orden de precios para todos los productos. Como resultado, incluso los institutos de investigación especializados con órdenes estatales ahorran y evitan esos precios. Los microcircuitos en una caja de plástico para uso civil son significativamente más baratos, pero no están disponibles en proveedores populares. Además, me parece que la calidad de los microcircuitos en una caja de plástico es peor que los "dorados". Por ejemplo, no podría iniciar el controlador K1986BE1QI a una frecuencia de 128 MHz sin aumentar el parámetro de latencia de flash. Al mismo tiempo, la temperatura de este controlador aumentó a 40-50 ° C. Pero el controlador 1986BE1T ("dorado") se lanzó a 128 MHz sin configuraciones adicionales y permaneció frío. El es realmente bueno.


Microcontrolador "Golden" 1986BE1T, (c) Milander

Tuve la suerte de que un microcontrolador en una caja de plástico todavía se puede comprar al por menor en LDM Systems, y todas las placas de circuitos están disponibles gratuitamente. Lo malo es que en el sitio en la foto del controlador hay una marca que dice que esta es la cuarta revisión de 2014, es decir con defectos Pensé durante mucho tiempo: comprar o no comprar. Así pasaron varios años ...


La idea de crear una placa de depuración no ha desaparecido. Poco a poco, formé todos los requisitos y pensé cómo poner todo esto en una sola placa, para que fuera compacta y no costosa. Paralelamente, ordené los componentes faltantes a los chinos. No tenía prisa, hice todo por mí mismo. Los proveedores chinos son famosos por su descuido: tuve que pedir lo mismo en diferentes lugares para obtener todo lo que necesitaba. Además, algunos de los microcircuitos de memoria resultaron estar en uso, obviamente evaporados de dispositivos rotos. Esto volvió a mí más tarde.

Comprar un microcontrolador Milander K1986BE1QI (avia) no es una tarea fácil. En la misma tienda de Chip and Dip, en la sección "Pedidos de artículos", encontré solo el K1986BE92QI por 740 rublos, pero no me convenía. La única opción es comprar en LDM-Systems por 2,000 rublos, no una nueva revisión. Como no pude encontrar un reemplazo en ningún otro lugar, decidí comprar lo que era. Para mi agradable sorpresa, me vendieron un nuevo controlador de lanzamiento de diciembre de 2018, revisión 6+ (1820). Y el sitio todavía tiene una foto antigua, y al momento de escribir, el controlador no está disponible ...


Microcontrolador K1986BE1QI (avia) en envases tecnológicos, (c) - Foto de

Las principales especificaciones técnicas de mi placa de depuración MDB1986 son las siguientes:

  • programador-depurador incorporado 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 pin para trabajar con MKIO (MIL_STD_1553) y ARINC429;
  • Everlight PT17-21C Fototransistor;
  • cinco LED de color, un botón de reinicio y dos botones de usuario;
  • alimentado por puerto USB de 5 voltios;
  • Dimensiones de PCB 100 x 80 mm

Me gustaron las placas de la serie STM-Discovery porque hay un programador de depuración incorporado: ST-Link. La marca ST-Link solo funciona con controladores de STMicroelectronics, pero hace un par de años se hizo posible actualizar el firmware en ST-Link y obtener un depurador SEGGER J-Link OB (en placa). Legalmente, existe una restricción en el uso de dicho depurador solo con placas STMicroelectronics, pero de hecho, el potencial no está limitado. Por lo tanto, al tener un J-Link OB, puede tener un depurador incorporado en la placa de depuración. Observo que en los productos de "LDM-Systems" se usa el convertidor CP2102 (Usb2Uart), que solo puede parpadear.


Microcontroladores STM32F103C8T6, reales y no tan, (c) Foto de

Por lo tanto, fue necesario comprar el STM32F103C8T6 original, ya que el firmware propietario no funcionará correctamente con el clon. Dudaba de esta tesis y decidí probar el controlador CS32F103C8T6 de la compañía china CKS en funcionamiento. No tengo quejas sobre el controlador en sí, pero el firmware ST-Link no funcionaba en él. J-Link funcionó parcialmente: se detectó el dispositivo USB, pero el programador no realizó sus funciones y recordó constantemente que estaba "defectuoso".


Error al trabajar con el depurador en un controlador no original

No me tranquilicé con esto y primero escribí el firmware para que el LED parpadeara, y luego me di cuenta de la solicitud IDCODE utilizando el protocolo JTAG. El programador ST-Link que tenía en la placa Discovery y el programa ST-Link Utility parpadeaban CS32F103C8T6 sin problemas. Como resultado, me aseguré de que mi placa funcionara. Para mi alegría, el controlador de destino K1986BE1QI (avia) emitió alegremente su IDCODE a través de la línea TDO.


Oscilograma de línea de señal TDO con respuesta codificada IDCODE, (c) - Foto de


Por lo tanto, el puerto SWD fue útil para depurar el depurador y verificar IDCODE

Había una variante con el depurador CMSIS-DAP (puerto de acceso de depuración) . Construir un proyecto a partir del código fuente de ARM no es una tarea fácil, tomé el proyecto de X893 y luego probé DAP42. Desafortunadamente, Keil uVision colgó y no quiso trabajar con ellos. Como resultado, reemplacé el chip del depurador con el STM32F103C8T6 patentado y ya no volví a este problema.


Exitoso depurador J-Link STLink V2

Cuando todos los componentes clave de la futura placa de depuración estaban en stock, subí a Eagle CAD y descubrí que no estaban en la biblioteca de elementos. Ningún lugar a donde ir: tenían que dibujarse. Al mismo tiempo, hice huellas para la memoria, el conector HanRun para Ethernet y agregué marcos para resistencias y condensadores. El archivo del proyecto y la biblioteca de componentes se pueden encontrar en mi GitHub .

Diagrama esquemático de la placa de depuración MDB1986


La placa está alimentada por una fuente de CC de 5 voltios, obtenida del puerto USB. Hay dos puertos USB tipo B en la placa. Uno es para el programador, el segundo es para el controlador K1986BE1QI. La placa puede funcionar desde cualquiera de estas fuentes o con ambas al mismo tiempo. El control de carga más simple y la protección de las líneas eléctricas se implementan en los diodos Schottky, en el circuito D2 y D3 (SS24). También en el diagrama puede ver los fusibles autorreparables F1 y F2 a 500 mA. Las líneas de señal del puerto USB están protegidas por un conjunto de diodos USBLC6-2SC6.

El circuito del depurador-programador ST-Link es conocido por muchos, se puede encontrar en la documentación para placas STM32-Discovery y otras fuentes. Para el firmware inicial del clon ST-Link / J-Link-OB / DAP (opcional), saqué las líneas SWDIO (PA13), SWCLK (PA14), GND. Muchas personas usan UART para firmware y se ven obligadas a tirar de los puentes de ARRANQUE. Pero SWD es más conveniente para mí, además, este protocolo permite la depuración.

Casi todos los componentes de la placa funcionan con 3,3 voltios, que provienen del regulador de voltaje AMS1117-3.3. Para suprimir la interferencia electromagnética y las corrientes de entrada, se utilizan filtros LC de condensadores y estranguladores de la serie BLM31PG.

También deberíamos mencionar el controlador para la pantalla de 7 segmentos MAX7221. Según la especificación, la fuente de alimentación recomendada es de 4 a 5,5 voltios, y el alto nivel de señal (unidad lógica) es de al menos 3,5 V (0,7 x VCC), con una fuente de alimentación de 5 V. Para el controlador K1986BE1QI (avia), la salida de una unidad lógica corresponde a un voltaje de 2.8 a 3.3V. Obviamente, hay una falta de coincidencia de los niveles de señal que pueden interferir con el funcionamiento normal. Decidí alimentar el MAX7221 desde 4V y bajar los niveles de señal a 2.8V (0.7 x 4 = 2.8). Para hacer esto, el diodo D4 (RS1A o FR103) se instala en serie con el circuito de alimentación del controlador. La caída de voltaje total es de 0.9V (diodo Schottky 0.3V y diodo 0.6V), y todo funciona.

La mayoría de los puertos del microcontrolador K1986BE1QI (avia) son compatibles con señales de hasta 5V. Por lo tanto, el uso del transceptor CAN MCP2551, que también funciona con 5V, no causa problemas. El chip MAX3232 se indica en el diagrama como un transceptor RS-232, pero de hecho utilicé SN65C3232D de Texas Instruments, porque Funciona desde 3.3V y proporciona velocidades de hasta 1Mbit / s.

Hay 4 resonadores de cuarzo en el tablero, uno para el depurador (8 MHz) y tres para el microcontrolador objetivo K1986BE1QI (avia) con valores de 32.768 kHz, 16 MHz, 25 MHz. Estos son componentes necesarios, como Los parámetros del generador RC incorporado están en un amplio rango de 6 a 10 MHz. Es necesaria una frecuencia de 25 MHz para el funcionamiento del controlador Ethernet integrado. En el sitio de Milander (quizás por error) por alguna razón se indica que no hay Ethernet en la caja de plástico. Pero confiaremos en la especificación y los hechos.

Un incentivo importante para crear su propia placa de depuración fue la capacidad de trabajar con el bus de sistema externo EBC (controlador de bus externo), que es esencialmente un puerto paralelo. El microcontrolador K1986BE1QI (avia) le permite conectarse y trabajar con chips de memoria externa y periféricos, por ejemplo, ADC, FPGA, etc. Las capacidades del bus del sistema externo son bastante grandes: puede trabajar con RAM estática de 8 bits, 16 bits y 32 bits, ROM y Flash NAND. Para leer / escribir datos de 32 bits, el controlador puede realizar automáticamente 2 operaciones correspondientes para circuitos de 16 bits y para 8 bits - 4 operaciones. Obviamente, una operación de E / S de 32 bits será la más rápida con el bus de datos de 32 bits. Las desventajas incluyen la necesidad de que el programa funcione con datos de 32 bits, y se deben colocar 32 pistas en el tablero.


Usó chips de RAM estática (adivine cuál es defectuoso)

Una solución equilibrada es usar chips de memoria de 16 bits. Tengo Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16 x 256k, 10 ns, 3.3V). Por supuesto, la compañía Milander tiene su propia serie 1645RU de chips de memoria estática, pero son demasiado caros e inaccesibles. Alternativamente, hay Samsung K6R4016V1D pin compatibles. Anteriormente, mencioné que los microcircuitos resultaron estar en uso y la instancia que instalé inicialmente dio fallas y valores caóticos en la línea de datos 15. Tardó varios días en buscar errores de hardware, y mayor fue la sensación de satisfacción cuando reemplacé el chip dañado por uno que funcionaba. Sea como fuere, la velocidad de trabajar con memoria externa deja mucho que desear.

Bus externo y modo StandAlone
El microcontrolador K1986BE1QI (avia) tiene un modo StandAlone único, que está diseñado para acceso externo directo a controladores Ethernet y MKIO (MIL_STD_1553) a través de un bus externo, y el núcleo está en un estado de reinicio, es decir. no utilizado Este modo es conveniente para procesadores y FPGA en los que no hay Ethernet y / o MKIO.

El diagrama de conexión es el siguiente:

  • Bus de datos MCU (D0-D15) => SRAM (I / O0-I / O15),
  • bus de dirección MCU (A1-A18) => SRAM (A0-A17),
  • Control de MCU (nWR, nRD, PortC2) => SRAM (WE, OE, CE),
  • SRAM (UB, LB) conectado o tirado a tierra a través de una resistencia.

La línea CE se activa mediante una resistencia; los pines para la selección de bytes MCU (BE0-BE3) no se utilizan. Debajo del spoiler, cito el código de inicialización del puerto y el controlador de bus externo.

Inicialización de puertos y 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 controler // //--------------------------------------------// 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 el paquete LQFP-144 y la memoria en el paquete TSOP-44 tienen muchos pines conectados y ocupan mucho espacio en la placa de circuito impreso. Teniendo experiencia en la resolución de problemas de optimización en el campo de la economía, para mí era obvio que era necesario colocar estos microcircuitos en el tablero en primer lugar. En varias fuentes he visto elogios para TopoR CAD (enrutador topológico) . Descargué la versión de prueba y pude exportar mi proyecto desde Eagle CAD solo cuando eliminé casi todos los componentes. Desafortunadamente, incluso el programa TopoR de 10 elementos no me ayudó a colocarlo en el tablero. Primero, todos los componentes se colocaron en una esquina y luego se colocaron a lo largo del borde. Esta opción no me satisfizo, y durante mucho tiempo rastreé la placa en modo manual en el entorno familiar Eagle CAD.

Un elemento importante de la placa de circuito impreso es la serigrafía. La placa de depuración no solo debe tener firmas para componentes electrónicos, sino que todos los conectores deben estar firmados. En la parte posterior de la placa, coloqué tablas de notas con las funciones de los puertos del controlador (primario, alternativo, anulado, real). Ordené la fabricación de placas de circuito impreso en China en la conocida oficina de PCBWay. No voy a alabar, porque la calidad es buena. Pueden hacerlo mejor, con menos tolerancias, pero por una tarifa .


Placas de circuito impreso fabricadas MDB1986, (c) Foto del autor

Tuve que soldar los componentes "sobre mi rodilla" con un soldador de 40 vatios y una soldadura POS-61, porque rara vez lo soldo, 1-2 veces al año, y la pasta de soldadura se secó. Tuve que cambiar el controlador CS32F103 chino al STM32F103 original y luego reemplazar la memoria. En general, ahora el resultado me satisface por completo, aunque todavía no he verificado el funcionamiento de RS-232 y CAN.


Tarjeta de depuración MDB1986 en el trabajo - brilla y calienta, (c) Foto de

En el sitio web de Milandra, puede encontrar suficientes materiales de capacitación para estudiar los controladores de la serie 1986BE9 (núcleo Cortex-M3), pero no veo nada para el microcontrolador K1986BE1QI (avia). Después de revisar los materiales publicados allí, los manuales y el trabajo de laboratorio para las universidades, me alegra que se esté capacitando al personal en todo el país para trabajar con los controladores rusos. La mayoría de los materiales de capacitación están preparados para trabajar con puertos de E / S, temporizadores, ADC, DAC, SPI, UART. Se utilizan diferentes entornos de desarrollo IDE (Keil, IAR, CodeMaster). En algún lugar programan usando registros CMSIS, y en otro lugar usan la Biblioteca MDR. Es necesario mencionar el recurso Start Milandr , que contiene muchos artículos de programadores prácticos. Y, por supuesto, uno no debe olvidarse del foro Milander .

El pensamiento de Milander
La microelectrónica se está desarrollando en Rusia, y Milander desempeña un papel destacado en este proceso. Hay nuevos microcontroladores interesantes, por ejemplo, 198681 y "Power" con las interfaces SpaceWire y MKIO (lo mismo que en 1986BE1 y, posiblemente, con los mismos problemas), etc. Pero los estudiantes comunes, los maestros y los ingenieros civiles para comprar tales chips no son realistas. Por lo tanto, la comunidad de ingenieros no podrá identificar rápidamente los errores y problemas de este chip. Me parece que al principio es necesario producir microcircuitos en una caja de plástico, distribuirlo a todas las partes interesadas, y solo después de la prueba (aprobación latina, aprobación, reconocimiento), los especialistas pueden preparar una auditoría en una caja de metal-cerámica con protección contra todos los factores terribles. Espero que en el futuro cercano, TODOS estemos satisfechos con los nuevos proyectos anunciados en las exposiciones.

Cualquier persona desarrollada por mí, el tablero de depuración, puede repetir, modificar y usar en el proceso educativo. En primer lugar, hice un tablero para mí, pero resultó tan bien que decidí compartirlo con todos .

K1986BE1QI (avia) es un controlador muy interesante con interfaces únicas que se pueden utilizar en las universidades para educar a los estudiantes. ¡Creo que después de corregir los errores detectados en el controlador y pasar las pruebas de certificación, el controlador volará en el sentido literal de la palabra!

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


All Articles