
För flera år sedan blev jag bekant med ryska mikrokontroller från företaget Milandr. Det var 2013, då ingenjörer hetsigt diskuterade de första resultaten av det federala målprogrammet "Utveckling av den elektroniska komponentbasen och radioelektronik" för 2008-2015. Vid den tidpunkten hade K1986BE9x-kontrollen (Cortex-M3-kärna) redan släppts, och 1986BE1T-kontrollen (Cortex-M1-kärna) hade precis dykt upp. I plasthöljet till LQFP-144 hade den beteckningen K1986BE1QI (flyg) i dokumentationen, och på själva mikrokretsen beteckningen MDR32F1QI. På tillverkarens webbplats har den suffixet "avia" eftersom den har gränssnitt specifika för flygindustrin (ARINC 429, MIL_STD_1553).
Överraskande nog hade Milandr, vid tidpunkten för distributionen av dessa styrenheter, förberett felsökningskit och ett bibliotek med subrutiner för att arbeta med periferin, ”men utan några ytterligare garantier eller skyldigheter gällande bibliotekets korrekthet.” Biblioteket liknar Standard Peripheral Library från STMicroelectronics. Generellt sett har alla ARM-kontroller byggda på Cortex-M-kärnan mycket gemensamt. Av denna anledning gick bekantskapen med de nya ryska kontrollanterna snabbt. Och för de som köpte felsökningskit av märket tillhandahölls teknisk support under användning.

Felsökningskit för mikrokontroller 1986BE1T, © Milandr
Men med tiden började "inledningsproblemen" med nya mikrokretsar och bibliotek dyka upp. Testexempel på firmware fungerade utan några synliga problem, men med betydande modifieringar började krascher och fel dyka upp. Den första "svalan" i min praktik var oförklarliga fel i CAN-styrenhetens drift. Ett år senare upptäcktes ett problem med modulen på 1986BE1T (avia)-styrenheten i den tidiga versionen. . I allmänhet var alla revisioner av dessa mikrokontroller före 2016 av begränsad nytta. Mycket tid och nerver lades ner på att identifiera dessa problem, vilket nu kan bekräftas i .
En obehaglig egenskap var att arbete och felsökning inte behövde utföras på felsökningskort, utan på kort till prototypenheter som planerades för serieproduktion i fabriken. Förutom JTAG-kontakten fanns det vanligtvis ingenting där. Att ansluta till en logikanalysator var svårt och obekvämt, och det fanns vanligtvis inga lysdioder eller skärmar. Av denna anledning dök idén att skapa mitt eget felsökningsforum upp i mitt huvud.
Å ena sidan fanns det märkesbaserade felsökningskit på marknaden, såväl som fantastiska brädor från LDM-Systems från Zelenograd. Å andra sidan är priserna för dessa produkter häpnadsväckande, och den grundläggande funktionaliteten utan expansionskort uppfyller inte förväntningarna. Kortet med den lödda styrenheten och stiftkontakten är inte av intresse för mig. Och mer intressanta brädor är dyra.

Felsökningskort MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems
Företaget Milandr har en unik prispolicy och marknadsföring. Så det är möjligt att få gratisprover av vissa mikrokretsar, men detta är endast tillgängligt för juridiska personer och är förknippat med en byråkratisk uppgift. I allmänhet är mikrokretsar i ett metallkeramiskt hölje gyllene i bokstavlig och bildlig bemärkelse. Till exempel kostar 1986BE1T-regulatorn från 14 till 24 tusen rubel i Moskva. Det statiska minneschipet 1645RU6U kostar från 15000 1986 rubel. Och detta är prisordningen för alla produkter. Som ett resultat sparar och skyr även specialiserade forskningsinstitut med statliga kontrakt sådana priser. Mikrokretsar i plasthölje för civilt bruk är betydligt billigare, men de finns inte tillgängliga från populära leverantörer. Dessutom är kvaliteten på mikrokretsar i ett plasthölje, enligt min mening, sämre än "guld"-kretsar. Till exempel kunde jag inte få K1BE128QI-kontrollen att köras på 40 MHz utan att öka parametern för flashlatens. Samtidigt steg temperaturen på denna regulator till 50-1986C. Men 1BE128T-kontrollen ("gyllene") startade vid XNUMX MHz utan ytterligare inställningar och förblev kall. Han är riktigt bra.

"Gyllene" mikrokontroller 1986BE1T, (c) Milandr
Jag hade tur att mikrokontrollern i ett plasthölje fortfarande kan köpas i butik från LDM Systems, och alla kortscheman är fritt tillgängliga. Det dåliga är att man på webbplatsen, på bilden av kontrollenheten, kan se markeringar som säger att detta är den fjärde revisionen från 4, d.v.s. med defekter. Jag funderade länge på om jag skulle köpa eller inte köpa. Så gick flera år...
Idén att skapa en felsökningstavla har inte försvunnit. Gradvis utformade jag alla krav och funderade på hur jag skulle placera allt detta på ett bräde så att det skulle vara kompakt och billigt. Samtidigt beställde jag de saknade komponenterna från kineserna. Jag hade ingen brådska – jag gjorde allt själv. Kinesiska leverantörer är notoriskt slarviga – jag var tvungen att beställa samma sak från olika ställen för att få allt jag behövde. Dessutom visade sig några av minneskretsarna vara begagnade – uppenbarligen fastlödda från trasiga enheter. Detta kom tillbaka och hemsökte mig senare.
Att köpa en mikrokontroller Milandr K1986BE1QI (flyg) är ingen lätt uppgift. I samma Chip and Dip-butik, i avsnittet "Varor att beställa", hittade jag bara K1986BE92QI för 740 rubel, men den passade mig inte. Det enda alternativet är att köpa en inte så ny version från LDM-Systems för 2000 rubel. Eftersom jag inte kunde hitta en ersättning någon annanstans bestämde jag mig för att köpa det som fanns tillgängligt. Till min trevliga överraskning såldes jag en helt ny styrenhet, tillverkad i december 2018, revision 6+ (1820). Och webbplatsen har fortfarande ett gammalt foto, och i skrivande stund är handkontrollen inte tillgänglig...

Mikrokontroller K1986BE1QI (flyg) i teknologisk kapsling, (c) Foto av författaren
Huvudsakliga tekniska egenskaper hos mitt utvecklingskort MDB1986 följande:
- inbyggd felsökare-programmerare kompatibel med J-Link och CMSIS-DAP;
- statiskt minne 4Mbit (256k x 16, 10 ns);
- 64Mbit flashminneschip, Winbond 25Q64FVSIG;
- RS-232-gränssnittssändtagare med RTS- och CTS-linjer;
- gränssnitt och kontakter för Ethernet, USB, CAN;
- 7-segmentsdisplaystyrenhet MAX7221;
- stiftkontakt för arbete med MICO (MIL_STD_1553) och ARINC429;
- fototransistor Everlight PT17-21C;
- fem färgade lysdioder, återställningsknapp och två användarknappar;
- strömförsörjningen från USB-porten är 5 volt;
- Kretskortsmått 100 x 80 mm
Jag gillade korten i STM-Discovery-serien eftersom de har en inbyggd programmerare-felsökare – ST-Link. Den proprietära ST-Link fungerar endast med STMicroelectronics-styrenheter, men för ett par år sedan blev det möjligt att uppdatera firmware i ST-Link och få SEGGER J-Link OB (inbyggd) Debugger. Det finns en juridisk begränsning för att endast använda en sådan felsökare med STMicroelectronics-kort, men i själva verket är potentialen obegränsad. Med J-Link OB är det således möjligt att ha en inbyggd programmerare-felsökare på felsökningskortet. Jag vill påpeka att LDM-Systems produkter använder CP2102 (Usb2Uart)-omvandlaren, som bara kan flasha.

STM32F103C8T6 mikrokontroller, verkliga och inte verkliga, (c) Foto av författaren
Så det var nödvändigt att köpa originalet STM32F103C8T6, eftersom den proprietära firmware inte fungerar korrekt med klonen. Jag tvivlade på denna tes och bestämde mig för att prova CS32F103C8T6-styrenheten från det kinesiska företaget CKS. Jag har inga klagomål på själva kontrollenheten, men den proprietära ST-Link-firmwaren fungerade inte i den. J-Link fungerade delvis - USB-enheten upptäcktes, men programmeraren utförde inte sina funktioner och påminde ständigt om att den var "defekt".

Fel vid körning av felsökare på icke-originalkontroller
Jag stannade inte där utan skrev först firmware för att blinka lysdioden, och implementerade sedan IDCODE-begäran via JTAG-protokollet. ST-Link-programmeraren som jag hade på Discovery-kortet och ST-Link Utility-programmet flashade CS32F103C8T6 utan problem. Som ett resultat var jag övertygad om att min styrelse fungerar. Till min glädje utfärdade målkontrollen K1986BE1QI (flygplan) glatt sin ID-kod via TDO-linjen.

Oscillogram av TDO-signalledning med kodat IDCODE-svar, (c) Foto av författaren

Så SWD-porten var praktisk för att felsöka själva felsökaren och kontrollera IDCODE.
Det enda alternativet som återstod var med en felsökare. . Att bygga ett projekt från ARM-källor är inte en lätt uppgift, jag tog projektet från , och sedan provade jag DAP42. Tyvärr frös Keil uVision till och ville inte samarbeta med dem. Som ett resultat bytte jag ut felsökningschippet mot en proprietär STM32F103C8T6 och återvände aldrig till det här problemet igen.

Lyckad drift av den inbyggda felsökaren J-Link STLink V2
När jag hade alla nyckelkomponenter till det framtida utvecklingskortet i lager gick jag in i Eagle CAD och upptäckte att de inte fanns i elementbiblioteket. Det fanns inget annat val – jag var tvungen att rita dem själv. Samtidigt gjorde jag landningsplatser för minne, en HanRun-kontakt för Ethernet och lade till ramar för motstånd och kondensatorer. Projektfilen och komponentbiblioteket finns .
Schematiskt diagram över MDB1986-felsökningskortet
Kortet drivs av en 5-volts likströmskälla som tas emot från USB-porten. Det finns två USB Type-B-portar på kortet. En är för programmeraren, den andra är för K1986BE1QI-styrenheten. Styrelsen kan fungera från endera av dessa källor eller båda samtidigt. Den enklaste lastregleringen och kraftledningsskyddet implementeras med hjälp av Schottky-dioder i D2- och D3-kretsarna (SS24). Även på diagrammet kan du se självåterställande säkringar F1 och F2 för 500 mA. USB-portens signalledningar skyddas av diodaggregatet USBLC6-2SC6.
ST-Links felsökar-programmerarkrets är välkänd för många; den finns i dokumentationen för STM32-Discovery-korten och andra källor. För den initiala firmware för ST-Link/J-Link-OB/DAP-klonen (valfritt) tog jag fram SWDIO- (PA13), SWCLK (PA14) och GND-ledningarna. Många använder UART för firmware och tvingas dra BOOT-jumpers. Men jag tycker att SWD är mer praktiskt, och det här protokollet tillåter även felsökning.
Nästan alla komponenter på kortet drivs av 3.3 volt, vilket kommer från spänningsregulatorn AMS1117-3.3. För att undertrycka elektromagnetiska störningar och strömtopp används LC-filter tillverkade av kondensatorer och drosslar i BLM31PG-serien.
MAX7 7221-segmentsdisplaydrivrutinen är värd att nämnas separat. Enligt specifikationen är den rekommenderade strömförsörjningen från 4 till 5.5 volt, och den höga signalnivån (logisk) är inte mindre än 3.5 V (0.7 x VCC), med en strömförsörjning på 5 V. K1986BE1QI (avia)-styrenheten har en logisk utgång som motsvarar en spänning på 2.8 till 3.3 V. Det finns en uppenbar skillnad i signalnivåerna som kan störa normal drift. Jag bestämde mig för att driva MAX7221 från 4V och sänka signalnivåerna till 2.8V (0.7 x 4 = 2.8). För detta ändamål installeras dioden D4 (RS1A eller FR103) i serie i drivkretsens strömförsörjningskrets. Det totala spänningsfallet är 0.9V (Schottky-diod 0.3V och diod 0.6V), och allt fungerar.
De flesta portar på mikrokontrollern K1986BE1QI (flyg) är kompatibla med signaler upp till 5V. Därför finns det inga problem med att använda MCP2551 CAN-sändtagaren, som också fungerar från 5V. RS-232-sändtagaren i schemat är MAX3232, men jag använde faktiskt SN65C3232D från Texas Instruments eftersom den arbetar vid 3.3 V och ger hastigheter upp till 1 Mbit/s.
Kortet innehåller fyra kvartsresonatorer - en för felsökaren (4 MHz) och tre för målmikrokontrollern K8BE1986QI (flyg) med följande nominella värden: 1 kHz, 32.768 MHz, 16 MHz. Dessa är nödvändiga komponenter eftersom Parametrarna för den inbyggda RC-generatorn ligger i ett brett intervall från 25 till 6 MHz. En frekvens på 10 MHz krävs för driften av den inbyggda Ethernet-styrenheten. På Milandras webbplats (möjligen av misstag) anges det av någon anledning att det inte finns något Ethernet i plasthöljet. Men vi kommer att förlita oss på specifikationen och fakta.
Ett viktigt incitament för att skapa mitt eget felsökningskort var möjligheten att arbeta med den externa systembussen EBC (extern busskontroller), som i huvudsak är en parallellport. Mikrokontrollern K1986BE1QI (avia) låter dig ansluta och arbeta med externa minneskretsar och kringutrustning, såsom ADC, FPGA, etc. Den externa systembussen har ganska stora möjligheter – du kan arbeta med 8-bitars, 16-bitars och 32-bitars statiskt RAM, ROM och NAND Flash. För att läsa/skriva 32-bitars data kan styrenheten automatiskt utföra 2 motsvarande operationer för 16-bitars mikrokretsar och 8 operationer för 4-bitars mikrokretsar. Självklart kommer en 32-bitars I/O-operation att utföras snabbast med en 32-bitars databuss. Nackdelarna inkluderar behovet av att programmet arbetar med 32-bitars data, och kortet måste läggas med 32 spår.

Använda statiska RAM-chip (gissa vilken som är defekt)
En balanserad lösning är att använda 16-bitars minneskretsar. Jag har kretsar i lager från Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16 x 256k, 10 ns, 3.3V). Naturligtvis har Milandr sina egna statiska minneschip. , men de är för dyra och otillgängliga. Alternativt finns det pin-kompatibla Samsung K6R4016V1D. Tidigare nämnde jag att chipsen visade sig vara använda och kopian som jag installerade gav initialt fel och kaotiska värden på den 15:e dataraden. Det tog flera dagar att hitta hårdvarufel, och känslan av tillfredsställelse var ännu större när jag bytte ut det skadade chipet mot ett fungerande. Hur som helst lämnar hastigheten på att arbeta med externt minne mycket övrigt att önska.
Extern buss och StandAlone-lägeMikrokontrollern K1986BE1QI (flyg) har ett unikt StandAlone-läge, vilket är utformat för direkt extern åtkomst till Ethernet- och MKIO-kontrollerna (MIL_STD_1553) via en extern buss, med kärnan i återställningstillstånd, d.v.s. inte använd. Det här läget är praktiskt för processorer och FPGA:er som inte har Ethernet och/eller MICRO.
Kopplingsschemat är som följer:
- MCU-databuss (D0-D15) => SRAM (I/O0-I/O15),
- adressbuss MCU(A1-A18) => SRAM(A0-A17),
- styr MCU(nWR,nRD,PortC2) => SRAM (WE,OE,CE),
- SRAM (UB, LB) är anslutna eller dras till jord via ett motstånd.
CE-ledningen matas via ett motstånd, MCU:ns byte-samplingsstift (BE0-BE3) används inte. Under spoilern tillhandahåller jag koden för att initialisera portarna och den externa busskontrollern.
Initialisering av portar och EBC (extern busskontroller)
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);
}
Den kapslade mikrokontrollern LQFP-144 och det kapslade minnet TSOP-44 har många sammankopplade pinnar och tar upp mycket plats på kretskortet. Med erfarenhet av att lösa optimeringsproblem inom ekonomi var det uppenbart för mig att det var nödvändigt att placera dessa mikrokretsar på kortet först och främst. Jag har stött på lovordande recensioner om det i olika källor . Jag laddade ner testversionen och kunde bara exportera mitt Eagle CAD-projekt dit när jag tog bort nästan alla komponenter. Tyvärr hjälpte TopoR-programmet mig inte att placera ens 10 element på spelplanen. Först placerades alla komponenter i hörnet och sedan arrangerades de längs kanten. Jag var inte nöjd med det här alternativet, och under en lång tid utförde jag kortfrätningen manuellt i den välbekanta Eagle CAD-miljön.
Ett viktigt element i kretskortet är silkscreentryck. Felsökningskortet ska inte bara ha etiketter för de elektroniska komponenterna, utan även alla kontakter ska vara märkta. På baksidan av kortet placerade jag påminnelsetabeller med funktionerna för kontrollerportarna (huvud, alternativ, omdefinierad, faktisk). Jag beställde produktion av kretskort i Kina från det välkända företaget PCBWay. Jag kommer inte att berömma den eftersom kvaliteten är bra. De kan göra bättre ifrån sig, med mindre toleranser, men .

Tillverkade kretskort MDB1986, (c) Foto av författaren
Jag var tvungen att löda komponenterna "på mitt knä" med en 40-watts lödkolv och POS-61-lod, eftersom jag löder sällan, 1-2 gånger om året, och lödpastan torkade ut. Jag var också tvungen att byta ut den kinesiska CS32F103-kontrollern mot den ursprungliga STM32F103, och sedan byta ut minnet. I allmänhet är jag helt nöjd med resultatet nu, även om jag ännu inte har kontrollerat funktionen hos RS-232 och CAN.

Felsökningskortet MDB1986 i drift — det lyser och värms upp, (c) Foto av författaren
På Milandras webbplats kan du hitta en hel del 1986BE9-serien (Cortex-M3-kärna), men jag ser inget där för mikrokontrollern K1986BE1QI (flyg). Efter att ha granskat materialet, manualerna och laboratoriearbetet för universitet som publicerats där, är jag glad att personal utbildas över hela landet för att arbeta med ryska kontrollanter. Det mesta av utbildningsmaterialet förbereder för arbete med I/O-portar, timers, ADC, DAC, SPI och UART. Olika IDE-utvecklingsmiljöer används (Keil, IAR, CodeMaster). Någonstans programmerar de med CMSIS-register, och någonstans använder de MDR-biblioteket. Resursen måste nämnas , som innehåller många artiklar från praktiserande programmerare. Och vi får naturligtvis inte glömma bort .
Tankar om MilandraMikroelektronik utvecklas i Ryssland, och Milandr spelar en betydande roll i denna process. Nya intressanta mikrokontroller dyker upp, till exempel 1986BE81T och "Elektrosila" med SpaceWire- och MKIO-gränssnitt (samma som i 1986BE1 och möjligen med samma problem), etc. Men det är inte realistiskt för vanliga studenter, lärare och civilingenjörer att köpa sådana mikrokretsar. Det här innebär att ingenjörssamhället inte snabbt kommer att kunna identifiera fel och problem med detta chip. Det verkar för mig som att det är nödvändigt att först producera mikrokretsar i ett plasthölje, distribuera dem bland alla intresserade parter, och först efter testning (latin approbatio - godkännande, erkännande) av specialister kan en revision förberedas i ett metallkeramiskt hölje med skydd mot alla hemska faktorer. Jag hoppas att vi ALLA inom en snar framtid kommer att vara nöjda med nya projekt som presenteras på mässor.
Felsökningstavlan jag utvecklade kan upprepas, modifieras och användas i utbildningsprocessen av vem som helst. Först gjorde jag tavlan själv, men den blev så bra att .
K1986BE1QI (avia) är en mycket intressant styrenhet med unika gränssnitt, som kan användas på universitet för att undervisa studenter. Jag tror att efter att ha korrigerat felen som hittats i regulatorn och klarat certifieringstester, kommer regulatorn att flyga i ordets bokstavliga bemärkelse!
Källa: will.com
