För flera år sedan blev jag bekant med ryska mikrokontroller från Milander. Det var 2013, när ingenjörer intensivt diskuterade de första resultaten av det federala målprogrammet "Utveckling av elektronisk komponentbas och radioelektronik" för 2008-2015. Vid den tiden hade K1986BE9x-kontrollern (Cortex-M3-kärna) redan släppts, och 1986BE1T-kontrollern (Cortex-M1-kärna) hade precis dykt upp. I plastfodralet, LQFP-144, hade den beteckningen K1986BE1QI (flyg) i dokumentationen och på själva chippet beteckningen MDR32F1QI. På tillverkarens webbplats har den suffixet "avia", eftersom den har gränssnitt som är specifika för flygplansindustrin (ARINC 429, MIL_STD_1553).
Överraskande nog, vid tidpunkten för distributionen av dessa kontroller, förberedde Milander-företaget felsökningskit och ett bibliotek med subrutiner för att arbeta med kringutrustning, "men utan några ytterligare garantier eller skyldigheter angående bibliotekets korrekthet." Biblioteket liknar Standard Peripheral Library från STMicroelectronics. I allmänhet 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 dem som köpte märkesfelsökningskit, gavs teknisk support under användning.
Felsökningssats för mikrokontroller 1986BE1T, © Milander
Men med tiden började "barnsjukdomar" i nya mikrokretsar och bibliotek dyka upp. Testexempel på firmware fungerade utan synliga problem, men med betydande modifieringar inträffade krascher och fel. Den första "svalan" enligt min erfarenhet var oförklarliga fel i driften av CAN-styrenheten. Ett år senare upptäcktes ett problem med modulen på 1986BE1T (flyg) styrenheten av en tidig revision
En obehaglig funktion var att det var nödvändigt att arbeta och hantera fel inte på felsökningskort, utan på prototypkort för enheter som var planerade för seriell fabrikstillverkning. Det fanns vanligtvis ingenting där förutom JTAG-kontakten. Att ansluta med en logikanalysator var svårt och obekvämt, och det fanns vanligtvis inga lysdioder eller skärmar. Av denna anledning dök idén om att skapa min egen felsökningstavla upp i mitt huvud.
Å ena sidan fanns det märkesfelsökningskit på marknaden, såväl som underbara kort från företaget LDM-Systems från Zelenograd. Å andra sidan är priserna för dessa produkter svindlande, och den grundläggande funktionaliteten utan expansionskort uppfyller inte förväntningarna. Ett kort med en lödd kontrollenhet och en stiftkontakt är inte av intresse för mig. Och mer intressanta brädor är dyra.
Utvecklingskort MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems
Milanderföretaget 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 ett byråkratiskt uppdrag. I allmänhet är mikrokretsar i ett metallkeramiskt hölje guld i bokstavlig och bildlig mening. Till exempel kostar en 1986BE1T-kontroller från 14 till 24 tusen rubel i Moskva. Det statiska minneschippet 1645RU6U kostar från 15000 1986 rubel. Och detta är prisordern för alla produkter. Som ett resultat sparar även specialiserade forskningsinstitut med statliga order pengar och drar sig för sådana priser. Mikrokretsar i ett plastfodral för civilt bruk är betydligt billigare, men de finns inte hos populära leverantörer. Dessutom är kvaliteten på mikrokretsar i ett plasthölje, det verkar för mig, sämre än "guld". Till exempel kunde jag inte köra K1BE128QI-kontrollern på 40 MHz utan att öka parametern för flash latens. Samtidigt steg temperaturen på denna kontroller till 50-1986C. Men 1BE128T (“guld”) styrenheten startade på XNUMX MHz utan ytterligare inställningar och förblev kall. Han är riktigt bra.
"Gyllene" mikrokontroller 1986BE1T, (c) Milander
Jag hade turen att en mikrokontroller i ett plastfodral fortfarande kan köpas i detaljhandeln från LDM Systems, och alla kortdiagram är fritt tillgängliga. Det dåliga är att på hemsidan på fotot av kontrollenheten kan du se en markering som säger att detta är den 4:e revisionen av 2014, d.v.s. med defekter. Jag funderade länge på om jag skulle köpa eller inte. Det gick flera år så här...
Tanken på att skapa ett felsökningskort har inte försvunnit någonstans. Efterhand bildade jag alla krav och funderade på hur jag skulle placera allt på en bräda så att det skulle bli kompakt och inte dyrt. Samtidigt beställde jag de saknade komponenterna från kineserna. Jag hade ingen brådska - jag gjorde allt för mig 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 minneschipsen vara använda - uppenbarligen lödda från trasiga enheter. Detta kom tillbaka för att förfölja mig senare.
Att köpa en mikrokontroller Milander K1986BE1QI (luft) är ingen lätt uppgift. I samma Chip and Dip-butik, i avsnittet "Artiklar att beställa" hittade jag bara K1986BE92QI för 740 rubel, men det passade inte mig. Det enda alternativet är att köpa en icke-färsk version från LDM-Systems för 2000 2018 rubel. Eftersom jag inte kunde hitta en ersättare någon annanstans bestämde jag mig för att köpa det jag hade. Till min trevliga överraskning sålde de mig en helt ny kontroller tillverkad i december 6, revision 1820+ (XNUMX). Men sajten har fortfarande ett gammalt foto, och i skrivande stund är kontrollern inte tillgänglig...
Mikrokontroller K1986BE1QI (flyg) i teknisk förpackning, (c) Foto av författaren
De viktigaste tekniska egenskaperna hos mitt felsökningskort MDB1986 följande:
- inbyggd debugger-programmerare, kompatibel med J-Link och CMSIS-DAP;
- statiskt minne 4Mbit (256k x 16, 10 ns);
- flashminne chip 64Mbit, Winbond 25Q64FVSIG;
- RS-232-gränssnittstransceiver med RTS- och CTS-linjer;
- gränssnitt och kontakter för Ethernet, USB, CAN;
- MAX7 7221-segments displaykontroller;
- stiftkontakt för att arbeta med MKIO (MIL_STD_1553) och ARINC429;
- fototransistor Everlight PT17-21C;
- fem färglampor, en återställningsknapp och två användarknappar;
- strömförsörjningen till USB-porten är 5 volt;
- kretskortsmått 100 x 80, mm
Jag gillade korten i STM-Discovery-serien eftersom de har en inbyggd programmerare-debugger - ST-Link. Branded ST-Link fungerar bara med kontroller från STMicroelectronics, men för ett par år sedan blev det möjligt att uppdatera firmware i ST-Link och få SEGGER J-Link OB (on-board) Debugger. Rent juridiskt finns det en begränsning för att använda en sådan debugger endast med STMicroelectronics-kort, men i själva verket är potentialen inte begränsad. Med en J-Link OB kan du alltså ha en inbyggd programmerare-debugger på felsökningskortet. Jag noterar att LDM-Systems produkter använder omvandlaren CP2102 (Usb2Uart), som bara kan blixt.
STM32F103C8T6 mikrokontroller, verkliga och inte så verkliga, (c) Foto av författaren
Så det var nödvändigt att köpa den ursprungliga STM32F103C8T6, eftersom proprietär firmware inte kommer att fungera korrekt med klonen. Jag tvivlade på den här tesen och bestämde mig för att prova styrenheten CS32F103C8T6 från det kinesiska företaget CKS. Jag har inga klagomål på själva styrenheten, 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 hela tiden att den var "defekt".
Fel vid körning av felsökaren på en icke-original styrenhet
Jag var inte nöjd med detta och skrev först firmware för att blinka lysdioden och implementerade sedan IDCODE-förfrågan med JTAG-protokollet. ST-Link-programmeraren, som jag hade på Discovery-kortet, och ST-Link Utility-programmet flashade CS32F103C8T6 utan problem. Till slut var jag övertygad om att mitt kort fungerade. Till min glädje utfärdade målstyrenheten K1986BE1QI (flyg) glatt sin IDCODE via TDO-linjen.
Oscillogram av en TDO-signallinje med ett kodat IDCODE-svar, (c) Foto av författaren
Så SWD-porten kom väl till pass för att felsöka själva felsökaren och kontrollera IDCODE
Det fanns ett alternativ med en debugger
Framgångsrik drift av den inbyggda debuggern J-Link STLink V2
När alla nyckelkomponenter i det framtida utvecklingskortet var tillgängliga gick jag in i Eagle CAD och upptäckte att de inte fanns i elementbiblioteket. Det fanns ingenstans att ta vägen - jag var tvungen att rita dem själv. Samtidigt gjorde jag monteringsplatser för minne, en HanRun-kontakt för Ethernet och la till ramar för motstånd och kondensatorer. Projektfilen och komponentbiblioteket finns
Schematiskt diagram över MDB1986-utvecklingskortet
Kortet drivs av en 5 volt DC-källa som erhålls från USB-porten. Det finns totalt två USB Type-B-portar på kortet. En är för programmeraren, den andra är för K1986BE1QI-kontrollern. Kortet kan arbeta från någon av dessa källor eller båda samtidigt. Den enklaste lastregleringen och kraftledningsskyddet implementeras med hjälp av Schottky-dioder, i krets D2 och D3 (SS24). Även i diagrammet kan du se självåterställande säkringar F1 och F2 vid 500 mA. USB-portens signallinjer är skyddade av en USBLC6-2SC6 diodenhet.
ST-Link debugger-programmeringskretsen är känd för många, den kan hittas i dokumentationen för STM32-Discovery-kort och andra källor. För den initiala firmwaren för ST-Link/J-Link-OB/DAP-klonen (valfritt) tog jag fram raderna SWDIO (PA13), SWCLK (PA14), GND. Många använder UART för firmware och tvingas dra BOOT-byglarna. Men jag tycker att SWD är bekvämare, och det här protokollet tillåter felsökning.
Nästan alla komponenter på kortet drivs av 3.3 volt, som kommer från spänningsregulatorn AMS1117-3.3. För att undertrycka elektromagnetiska störningar och strömstötar används LC-filter från kondensatorer och chokes i BLM31PG-serien.
Separat är det värt att nämna MAX7 7221-segments displaydrivrutin. Enligt specifikationen är den rekommenderade strömförsörjningen från 4 till 5.5 volt, och den höga signalnivån (logisk) är minst 3.5V (0.7 x VCC), med en 5V-försörjning. För styrenheten K1986BE1QI (flyg) motsvarar utsignalen från en logisk enhet en spänning från 2.8 till 3.3V. Uppenbarligen finns det en oöverensstämmelse mellan signalnivåerna som kan störa normal drift. Jag bestämde mig för att driva MAX7221 på 4V och minska signalnivåerna till 2.8V (0.7 x 4 = 2.8). För att göra detta installeras diod D4 (RS1A eller FR103) i serie i drivkretsen. Det totala spänningsfallet är 0.9V (Schottky-diod 0.3V och diod 0.6V), och allt fungerar.
De flesta portar på K1986BE1QI (flyg) mikrokontroller är kompatibla med signaler upp till 5V. Därför är det inga problem att använda MCP2551 CAN-transceivern, som också fungerar på 5V. MAX232-chippet anges som en RS-3232-transceiver i diagrammet, men jag använde faktiskt SN65C3232D från Texas Instruments, eftersom den fungerar från 3.3V och ger hastigheter upp till 1Mbit/s.
Kortet innehåller 4 kvartsresonatorer - en för debuggern (8 MHz) och tre för målmikrokontrollern K1986BE1QI (flyg) med klassificeringar på 32.768 kHz, 16 MHz, 25 MHz. Dessa är nödvändiga komponenter, eftersom Parametrarna för den inbyggda RC-oscillatorn ligger inom ett brett intervall från 6 till 10 MHz. En frekvens på 25 MHz krävs för driften av den inbyggda Ethernet-styrenheten. Av någon anledning står det på Milandras hemsida (kanske av misstag) att plastfodralet inte har Ethernet. Men vi kommer att förlita oss på specifikationen och fakta.
Ett viktigt incitament för att skapa ett eget utvecklingskort var möjligheten att arbeta med den externa systembussen EBC (extern bussstyrenhet), som i huvudsak är en parallellport. K1986BE1QI mikrokontroller (flygplan) låter dig ansluta och arbeta med externa minneschips och kringutrustning, till exempel ADC, FPGA, etc. Den externa systembussens möjligheter är ganska stora - 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 chips och 8 operationer för 4-bitars chips. Uppenbarligen kommer en 32-bitars I/O-operation att slutföras snabbast med en 32-bitars databuss. Nackdelarna inkluderar behovet av att programmet ska fungera med 32-bitars data, och kortet kommer att behöva lägga 32 spår.
Statiska RAM-chips, används (gissa vilken som är defekt)
En balanserad lösning är att använda 16-bitars minneskretsar. Jag råkade ha Integrated Silicon Solutions Inc. chips i lager. (ISSI IS61LV25616AL, 16 x 256k, 10 ns, 3.3V). Naturligtvis har Milander-företaget sina egna statiska minneskretsar
Extern buss och fristående lägeMikrokontrollern K1986BE1QI (flygplan) har ett unikt StandAlone-läge, som är designat för direkt extern åtkomst till Ethernet- och MKIO-kontroller (MIL_STD_1553) via en extern buss, med kärnan i återställningstillstånd, d.v.s. inte använd. Detta läge är praktiskt för processorer och FPGA:er som inte har Ethernet och/eller MKIO.
Anslutningsschemat är som följer:
- databuss MCU(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) ansluts eller dras till jord genom ett motstånd.
CE-ledningen är ansluten till strömförsörjningen via ett motstånd; stiften för sampling av MCU-byten (BE0-BE3) används inte. Under spoilern tillhandahåller jag koden för att initiera portarna och den externa bussstyrenheten.
Initieringsportar och EBC-styrenhet (extern bussstyrenhet)
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);
}
Mikrokontrollern i LQFP-144-paketet och minnet i TSOP-44-paketet har många tillhörande stift och tar upp mycket plats på kretskortet. Med erfarenhet av att lösa optimeringsproblem inom ekonomiområdet var det uppenbart för mig att det var nödvändigt att placera dessa mikrokretsar på kortet först. I olika källor har jag stött på lovordande recensioner om
En viktig del av ett kretskort är silkscreentryck. Utvecklingskortet ska inte bara ha etiketter för de elektroniska komponenterna, utan alla kontakter ska också vara märkta. På baksidan av kortet placerade jag bord med funktionerna för kontrollerportarna (huvud, alternativ, åsidosatt, faktisk). Jag beställde tillverkning av tryckta kretskort i Kina från det välkända PCBWay-kontoret. Jag kommer inte att berömma den eftersom kvaliteten är bra. De kan bättre, med snävare toleranser, men
Tillverkade MDB1986 kretskort, (c) Foto av författaren
Jag var tvungen att löda komponenterna "på knäna" med en 40-watts lödkolv och POS-61-lod, eftersom jag sällan löder, 1-2 gånger om året, och lödpastan hade torkat ut. Jag var också tvungen att byta den kinesiska CS32F103-kontrollern till den ursprungliga STM32F103, och sedan även byta ut minnet. I allmänhet är jag nu helt nöjd med resultatet, även om jag ännu inte har kontrollerat driften av RS-232 och CAN.
MDB1986 felsökningskort i drift - det lyser och värmer, (c) Foto av författaren
På Milandras hemsida kan du hitta tillräckligt
Tänkte på MilandraMicroelectronics utvecklas i Ryssland och Milander-företaget spelar en framträdande 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 vanliga studenter, lärare och civilingenjörer kan inte köpa sådana mikrokretsar. Detta innebär att ingenjörsgemenskapen snabbt kommer att kunna identifiera fel och problem med detta chip. Det förefaller mig som att det först är nödvändigt att producera mikrokretsar i ett plastfodral, distribuera dem till alla intresserade parter, och efter godkännande (latin approbatio - godkännande, erkännande) av specialister, kan de förbereda en revision i ett metallkeramiskt fall med skydd från alla hemska faktorer. Jag hoppas att vi inom en snar framtid ALLA kommer att vara nöjda med de nya projekt som tillkännages på utställningarna.
Felsökningstavlan jag utvecklade kan upprepas, modifieras och användas av alla i utbildningsprocessen. Först och främst gjorde jag tavlan åt mig själv, men det blev så bra att
K1986BE1QI (air) ä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 de fel som identifierats i kontrollanten och klarat certifieringstesterna kommer kontrollanten att flyga i ordets rätta bemärkelse!
Källa: will.com