Desenvolvimento de uma placa de depuração para K1986BE1QI (air)

Placa de depuração MDB1986

Alguns anos atrás, eu me encontrei com os microcontroladores russos de Milander. Foi em 2013, quando os engenheiros discutiram vigorosamente os primeiros resultados do Programa Alvo Federal "Desenvolvimento da base de componentes eletrônicos e radioeletrônicos" para 2008-2015. Naquela época, o controlador K1986BE9x (núcleo Cortex-M3) já havia sido lançado e o controlador 1986BE1T (núcleo Cortex-M1) apareceu. Ele na caixa de plástico LQFP-144 tinha a designação K1986BE1QI (avia) e, no próprio chip, a designação MDR32F1QI. No site do fabricante, ele possui o sufixo "avia", pois possui interfaces específicas para a indústria aeronáutica (ARINC 429, MIL_STD_1553).

Surpreendentemente, no momento da distribuição desses controladores, a empresa Milander preparou kits de depuração e uma biblioteca de subprogramas para trabalhar com periféricos, “mas sem garantias e obrigações adicionais em relação à correção da biblioteca”. A biblioteca é semelhante à Biblioteca Periférica Padrão da STMicroelectronics. Em geral, todos os controladores ARM construídos no núcleo Cortex-M têm muito em comum. Por esse motivo, o conhecimento dos novos controladores russos foi rápido. E para aqueles que compraram kits de depuração de marca, foi fornecido suporte técnico durante o uso.


Kit de depuração para o microcontrolador 1986BE1T, © Milander

No entanto, com o tempo, começaram a surgir “doenças da infância” de novos microcircuitos e bibliotecas. Exemplos de teste de firmware funcionaram sem problemas visíveis, mas com uma modificação significativa, falhas e erros ocorreram. O primeiro "engolir" na minha prática foram falhas inexplicáveis ​​na operação do controlador CAN. Um ano depois, no controlador de auditoria precoce 1986BE1T (aéreo), um problema foi detectado no módulo MKIO (canal de troca de informações multiplexado) . Em geral, todas as revisões desses microcontroladores até 2016 eram de uso limitado. Demorou muito tempo e nervos para identificar esses problemas, cuja confirmação agora pode ser encontrada nas listas de erros (Erratas) .

Uma característica desagradável era que era necessário trabalhar e lidar com erros não nas placas de depuração, mas nas placas de protótipo dos dispositivos planejados para produção em série. Além do conector JTAG, normalmente não havia nada lá. A conexão com um analisador lógico era difícil e inconveniente, e geralmente não havia LEDs ou telas. Por esse motivo, pensei em criar minha própria placa de depuração.

Por um lado, havia kits de depuração de marca no mercado, além de placas maravilhosas da LDM-Systems de Zelenograd. Por outro lado, os preços desses produtos são estupor e a funcionalidade básica sem placas de expansão não atende às expectativas. Uma placa com um controlador soldado e um conector de pinos não é do meu interesse. E placas mais interessantes são caras.


Placa de depuração MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems

Os preços e o marketing da empresa "Milander" são peculiares. Portanto, é possível obter amostras grátis de alguns microcircuitos, mas isso está disponível apenas para pessoas jurídicas e está associado a uma busca burocrática. Em geral, os microcircuitos em uma caixa metalocerâmica são ouro em sentido direto e figurado. Por exemplo, o controlador 1986BE1T custa de 14 a 24 mil rublos em Moscou. O chip de memória estática 1645RU6U custa de 15.000 rublos. E essa ordem de preços para todos os produtos. Como resultado, mesmo institutos de pesquisa especializados com ordens estatais economizam e evitam tais preços. Microcircuitos em uma caixa de plástico para uso civil são significativamente mais baratos, mas não estão disponíveis em fornecedores populares. Além disso, a qualidade dos microcircuitos em uma caixa de plástico, parece-me, é pior que a dos “dourados”. Por exemplo, não pude iniciar o controlador K1986BE1QI com uma frequência de 128 MHz sem aumentar o parâmetro de latência do flash. Ao mesmo tempo, a temperatura deste controlador subiu para 40-50C. Mas o controlador 1986BE1T ("gold") foi lançado em 128 MHz sem configurações adicionais e permaneceu frio. Ele é realmente bom.


Microcontrolador "Dourado" 1986BE1T, (c) Milander

Tive a sorte de ainda poder comprar um microcontrolador em uma caixa de plástico no varejo na LDM Systems, e todas as placas de circuito estão disponíveis gratuitamente. O ruim é que no site da foto do controlador há uma marcação que diz que esta é a quarta revisão de 2014, ou seja, com defeitos. Eu pensei por um longo tempo - para comprar ou não comprar. Então, vários anos se passaram ...


A idéia de criar uma placa de depuração não desapareceu. Gradualmente, formei todos os requisitos e pensei em colocar tudo isso em uma placa, para que fosse compacto e não fosse caro. Paralelamente, pedi os componentes ausentes aos chineses. Não tinha pressa - fiz tudo por mim. Os fornecedores chineses são famosos pela negligência - tive que pedir a mesma coisa em lugares diferentes para obter tudo o que precisava. Além disso, alguns dos microcircuitos de memória estavam em uso - obviamente evaporados de dispositivos quebrados. Isso voltou para mim mais tarde.

Comprar um microcontrolador Milander K1986BE1QI (avia) não é uma tarefa fácil. Na mesma loja Chip and Dip, na seção "Order Items", encontrei apenas o K1986BE92QI por 740 rublos, mas não me agradou. A única opção é comprar na LDM-Systems por 2.000 rublos, não uma nova revisão. Como não consegui encontrar um substituto em nenhum outro lugar, decidi comprar o que era. Para minha surpresa agradável, eles me venderam um novo controlador de versão de dezembro de 2018, revisão 6+ (1820). E o site ainda tem uma foto antiga e, no momento da redação deste documento, o controlador não está disponível ...


Microcontrolador K1986BE1QI (avia) em embalagens tecnológicas, (c) - Fotografia por

As principais especificações técnicas da minha placa de depuração MDB1986 são as seguintes:

  • programador de depuração integrado compatível com J-Link e CMSIS-DAP;
  • Memória estática de 4Mbit (256k x 16, 10 ns);
  • Chip de memória flash de 64Mbit, Winbond 25Q64FVSIG;
  • Transceptor de interface RS-232 com linhas RTS e CTS;
  • interfaces e conectores para Ethernet, USB, CAN;
  • Controlador de tela MAX7221 de 7 segmentos
  • conector de pinos para trabalhar com MKIO (MIL_STD_1553) e ARINC429;
  • Fototransistor Everlight PT17-21C;
  • cinco LEDs coloridos, um botão de redefinição e dois botões de usuário;
  • alimentado por porta USB 5 volts;
  • Dimensões da placa de circuito impresso 100 x 80 mm

Gostei das placas da série STM-Discovery porque existe um programador de depurador embutido - o ST-Link. O ST-Link da marca só funciona com controladores STMicroelectronics, mas há alguns anos se tornou possível atualizar o firmware no ST-Link e obter um depurador SEGGER J-Link OB (integrado). Legalmente, há uma restrição no uso desse depurador apenas com placas STMicroelectronics, mas na verdade o potencial não é limitado. Assim, tendo um J-Link OB, você pode ter um depurador embutido na placa de depuração. Observo que nos produtos de "LDM-Systems" é usado o conversor CP2102 (Usb2Uart), que pode apenas piscar.


Microcontroladores STM32F103C8T6, reais e não tão, (c) Foto por

Portanto, foi necessário comprar o STM32F103C8T6 original, pois o firmware proprietário não funcionará corretamente com o clone. Duvidei desta tese e decidi experimentar o controlador CS32F103C8T6 da empresa chinesa CKS em operação. Não tenho queixas sobre o próprio controlador, mas o firmware ST-Link não funcionou nele. O J-Link funcionou parcialmente - o dispositivo USB foi detectado, mas o programador não executou suas funções e constantemente lembrou que estava "com defeito".


Erro ao trabalhar com o depurador em um controlador não original

Não me acalmei com isso e primeiro escrevi o firmware para o LED piscar e, em seguida, realizei a solicitação IDCODE usando o protocolo JTAG. O programador ST-Link que eu tinha na placa Discovery e o programa Utility ST-Link estavam piscando no CS32F103C8T6 sem problemas.Como resultado, verifiquei se minha placa estava funcionando. Para minha alegria, o controlador de destino K1986BE1QI (avia) emitiu alegremente seu IDCODE através da linha TDO.


Oscilograma da linha de sinal Tdo com resposta codificada Idcode, (c) - Fotografia por


Portanto, a porta SWD foi útil para depurar o próprio depurador e verificar o IDCODE

Havia uma variante com o depurador CMSIS-DAP (porta de acesso à depuração) . Criar um projeto a partir do código fonte do ARM não é uma tarefa fácil, peguei o projeto no X893 e tentei o DAP42. Infelizmente, o Keil uVision desligou e não queria trabalhar com eles. Como resultado, substituí o chip do depurador pelo proprietário STM32F103C8T6 e não retornei mais a esse problema.


Depurador J-Link STLink V2 bem-sucedido

Quando todos os principais componentes da futura placa de depuração estavam disponíveis, entrei no Eagle CAD e descobri que eles não estavam na biblioteca de elementos. Nenhum lugar para ir - eles tiveram que se desenhar. Ao mesmo tempo, criei pegadas para a memória, conector HanRun para Ethernet e adicionei quadros para resistores e capacitores. O arquivo do projeto e a biblioteca de componentes podem ser encontrados no meu GitHub .

Diagrama esquemático da placa de depuração MDB1986


A placa é alimentada por uma fonte CC de 5 volts, obtida a partir da porta USB. Existem duas portas USB tipo B na placa. Um é para o programador, o segundo é para o controlador K1986BE1QI. O conselho pode trabalhar com qualquer uma dessas fontes ou com as duas ao mesmo tempo. O controle de carga e a proteção mais simples das linhas de energia são implementados nos diodos Schottky, no circuito D2 e ​​D3 (SS24). Também no diagrama, você pode ver os fusíveis auto-reparáveis ​​F1 e F2 a 500mA. As linhas de sinal da porta USB são protegidas por um conjunto de diodos USBLC6-2SC6.

O circuito depurador-programador ST-Link é conhecido por muitos, pode ser encontrado na documentação das placas STM32-Discovery e outras fontes. Para o firmware inicial do clone ST-Link / J-Link-OB / DAP (opcional), destaquei as linhas SWDIO (PA13), SWCLK (PA14), GND. Muitas pessoas usam o UART para firmware e são forçadas a puxar os jumpers BOOT. Mas o SWD é mais conveniente para mim, além disso, esse protocolo permite a depuração.

Quase todos os componentes da placa são alimentados por 3,3 volts, provenientes do regulador de tensão AMS1117-3.3. Para suprimir a interferência eletromagnética e as correntes de irrupção, são utilizados filtros LC dos capacitores e bobinas da série BLM31PG.

Também devemos mencionar o driver para o display de 7 segmentos MAX7221. De acordo com a especificação, a fonte de alimentação recomendada é de 4 a 5,5 volts e o alto nível de sinal (unidade lógica) é de pelo menos 3,5V (0,7 x VCC), com fonte de alimentação de 5V. Para o controlador K1986BE1QI (avia), a saída de uma unidade lógica corresponde a uma tensão de 2,8 a 3,3V. Obviamente, há uma incompatibilidade de níveis de sinal que pode interferir na operação normal. Decidi alimentar o MAX7221 de 4V e baixar os níveis de sinal para 2,8V (0,7 x 4 = 2,8). Para isso, o diodo D4 (RS1A ou FR103) é instalado em série com o circuito da fonte de alimentação do driver. A queda de tensão total é de 0,9V (diodo Schottky de 0,3V e 0,6V) e tudo funciona.

A maioria das portas do microcontrolador K1986BE1QI (avia) são compatíveis com sinais de até 5V. Portanto, o uso do transceptor CAN MCP2551, que também opera em 5V, não causa problemas. O chip MAX3232 é indicado no diagrama como um transceptor RS-232, mas na verdade eu usei o SN65C3232D da Texas Instruments, porque Funciona a partir de 3.3V e fornece velocidades de até 1Mbit / s.

Existem 4 ressonadores de quartzo na placa - um para o depurador (8 MHz) e três para o microcontrolador de destino K1986BE1QI (avia) com valores de 32.768 kHz, 16 MHz, 25 MHz. Esses são componentes necessários, como Os parâmetros do gerador RC incorporado estão em uma ampla faixa de 6 a 10 MHz. É necessária uma frequência de 25 MHz para a operação do controlador Ethernet integrado. No site de Milander (talvez por engano), por algum motivo, é indicado que não há Ethernet no estojo de plástico. Mas confiaremos na especificação e nos fatos.

Um incentivo importante para criar sua própria placa de depuração foi a capacidade de trabalhar com o barramento de sistema externo EBC (controlador de barramento externo), que é essencialmente uma porta paralela. O microcontrolador K1986BE1QI (avia) permite conectar e trabalhar com chips de memória e periféricos externos, por exemplo, ADC, FPGA, etc. Os recursos do barramento do sistema externo são bastante grandes - você pode trabalhar com RAM estática de 8 bits, 16 bits e 32 bits, ROM e NAND Flash. Para ler / gravar dados de 32 bits, o controlador pode executar automaticamente 2 operações correspondentes para circuitos de 16 bits e para operações de 8 bits - 4. Obviamente, uma operação de E / S de 32 bits será a mais rápida com o barramento de dados de 32 bits. As desvantagens incluem a necessidade do programa operar com dados de 32 bits e 32 faixas devem ser colocadas no quadro.


Usados ​​chips de RAM estáticos (adivinhe qual deles está com defeito)

Uma solução equilibrada é usar chips de memória de 16 bits. Tenho Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16 x 256k, 10 ns, 3,3V). Obviamente, a empresa Milander possui sua própria série 1645RU de chips de memória estática, mas são muito caros e inacessíveis. Como alternativa, existem compatíveis com pinos Samsung K6R4016V1D. Mencionei anteriormente que os microcircuitos estavam em uso e a instância que instalei inicialmente forneceu falhas e valores caóticos na 15ª linha de dados. Demorou vários dias para procurar erros de hardware, e maior foi a sensação de satisfação quando substituí o chip danificado por um que funcionava. Seja como for, a velocidade de trabalhar com memória externa deixa muito a desejar.

Barramento externo e modo autônomo
O microcontrolador K1986BE1QI (avia) possui um modo StandAlone exclusivo, projetado para acesso externo direto aos controladores Ethernet e MKIO (MIL_STD_1553) por meio de um barramento externo, e o núcleo está em um estado de redefinição, ou seja, não usado. Este modo é conveniente para processadores e FPGAs nos quais não há Ethernet e / ou MKIO.

O diagrama de conexão é o seguinte:

  • Barramento de dados do MCU (D0-D15) => SRAM (E / S0-E / O15),
  • barramento de endereço MCU (A1-A18) => SRAM (A0-A17),
  • Controle MCU (nWR, nRD, PortC2) => SRAM (WE, OE, CE),
  • SRAM (UB, LB) conectado ou puxado para o terra através de um resistor.

A linha CE é puxada para cima por energia através de um resistor; os pinos para a seleção de bytes do MCU (BE0-BE3) não são usados. Sob o spoiler, cito o código de inicialização da porta e o controlador de barramento externo.

Inicialização de portas e controlador EBC (controlador de barramento 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); } 

O microcontrolador no pacote LQFP-144 e a memória no pacote TSOP-44 possuem muitos pinos conectados e ocupam muito espaço na placa de circuito impresso. Tendo experiência na solução de problemas de otimização no campo da economia, era óbvio para mim que era necessário colocar esses microcircuitos no quadro em primeiro lugar. Em várias fontes, vi elogios ao TopoR CAD (Roteador Topológico) . Eu baixei a versão de teste e pude exportar meu projeto para lá do Eagle CAD somente quando excluí quase todos os componentes. Infelizmente, até 10 elementos do programa TopoR não me ajudaram a colocar no quadro. Primeiro, todos os componentes foram colocados em um canto e depois colocados ao longo da borda. Essa opção não me satisfez e, durante muito tempo, localizei a placa no modo manual no ambiente familiar CAD da Eagle.

Um elemento importante da placa de circuito impresso é a serigrafia. A placa de depuração não deve ter apenas assinaturas para componentes eletrônicos, mas todos os conectores devem ser assinados. Na parte de trás do quadro, coloquei tabelas de memorando com as funções das portas do controlador (primário, alternativo, substituído, atual). Encomendei a fabricação de placas de circuito impresso na China no conhecido escritório da PCBWay. Não vou elogiar, porque a qualidade é boa. Eles podem fazer melhor, com menos tolerâncias, mas por uma taxa .


Placas de circuito impresso fabricadas MDB1986, (c) Foto por autor

Eu tive que soldar os componentes "no meu joelho" com um ferro de solda de 40 watts e solda POS-61, porque raramente o soldo, 1-2 vezes por ano, e a pasta de solda secou. Eu tive que mudar o controlador CS32F103 chinês para o STM32F103 original e também substituir a memória. Em geral, agora o resultado me convém completamente, embora ainda não tenha verificado a operação do RS-232 e CAN.


Placa de depuração MDB1986 no trabalho - brilha e aquece, (c) foto por

Você pode encontrar materiais de treinamento suficientes no site da Milander para estudar os controladores da série 1986BE9 (núcleo Cortex-M3), mas não vejo nada para o microcontrolador K1986BE1QI (avia). Depois de revisar os materiais publicados lá, os manuais e os trabalhos de laboratório das universidades, fico feliz que o pessoal esteja sendo treinado em todo o país para trabalhar com os controladores russos. A maioria dos materiais de treinamento é preparada para trabalhar com portas de E / S, timers, ADCs, DACs, SPI, UART. Diferentes ambientes de desenvolvimento IDE são usados ​​(Keil, IAR, CodeMaster). Em algum lugar, eles programam usando registros CMSIS e em algum lugar usam a Biblioteca MDR. É necessário mencionar o recurso Start Milandr , que contém muitos artigos de programadores práticos. E, é claro, não se deve esquecer o fórum de Milander .

O Pensamento de Milander
A microeletrônica está se desenvolvendo na Rússia e Milander desempenha um papel de destaque nesse processo. Existem novos microcontroladores interessantes, por exemplo, 198681 e "Power" com interfaces SpaceWire e MKIO (o mesmo que em 1986BE1 e, possivelmente, com os mesmos problemas), etc. Mas estudantes comuns, professores e engenheiros civis para comprar esses chips não são realistas. Portanto, a comunidade de engenheiros não poderá identificar rapidamente os erros e problemas desse chip. Parece-me que, a princípio, é necessário produzir microcircuitos em uma caixa de plástico, distribuí-la a todas as partes interessadas e, somente após o teste (aprovação em latim - aprovação, reconhecimento), os especialistas podem preparar uma auditoria em uma caixa de metal-cerâmica com proteção contra todos os fatores terríveis. Espero que, no futuro próximo, todos nós gostemos dos novos projetos anunciados nas exposições.

Qualquer pessoa desenvolvida por mim, o quadro de depuração, pode repetir, modificar e usar no processo educacional. Antes de tudo, criei um quadro para mim, mas ficou tão bem que decidi compartilhá-lo com todos .

O K1986BE1QI (avia) é um controlador muito interessante com interfaces exclusivas que podem ser usadas nas universidades para educar os alunos. Acho que depois de corrigir os erros detectados no controlador e passar nos testes de certificação, o controlador voará no sentido literal da palavra!

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


All Articles