
Před několika lety jsem se seznámil s ruskými mikroprocesory od firmy Milandr. Byl to rok 2013, kdy inženýři živě diskutovali první výsledky federálního cíleného programu "Rozvoj elektronické komponentní základny a rádiové elektroniky" na léta 2008–2015. V té době již byl vydán procesor K1986VE9x (jádro Cortex-M3) a právě se objevil procesor 1986VE1T (jádro Cortex-M1). V plastovém pouzdře LQFP-144 byl v dokumentaci označován jako K1986VE1QI (letectví), zatímco na samotném čipu bylo označení MDR32F1QI. Na webu výrobce má příponu "letectví", protože má rozhraní specifická pro letecký průmysl (ARINC 429, MIL_STD_1553).
Je to neuvěřitelné, ale v době rozšíření těchto procesorů firma "Milandr" připravila debuggerové sady a knihovnu podprogramů pro práci s periferiemi, "ale bez jakýchkoliv dodatečných záruk a závazků ohledně správnosti knihovny". Knihovna je podobná Standard Peripheral Library od společnosti STMicroelectronics. V podstatě všechny ARM procesory postavené na jádře Cortex-M mají mnoho společného. Z tohoto důvodu probíhalo seznamování s novými ruskými procesory rychle. A pro ty, kteří zakoupili oficiální debuggerové sady, byla poskytována technická podpora během používání.

Debuggerová sada pro mikroprocesor 1986VE1T, © Milandr
Nicméně časem se začaly projevovat "dětské nemoci" nových čipů a knihoven. Testovací příklady firmware fungovaly bez viditelných problémů, ale při podstatné modifikaci se objevovaly chyby a poruchy. První "vlaštovkou" v mé praxi byly nevysvětlitelné poruchy v práci CAN řadiče. Po roce byla u kontroléru 1986VE1T (letectví) rané revize zjištěna problém s modulem . V podstatě všechny revize těchto mikroprocesorů do roku 2016 byly omezeně použitelné. Spousta času a nervů šla na odhalování těchto problémů, jejichž potvrzení nyní lze nalézt v .
Nepříjemnou vlastností bylo, že práce a analýza chyb se musela provádět ne na ladicích deskách, ale na prototypových deskách zařízení, které byly plánovány pro sériovou výrobu. Kromě konektoru JTAG tam obvykle nic nebylo. Připojení logického analyzátoru bylo obtížné a nepohodlné, světelné diody a obrazovky obvykle chyběly. Z tohoto důvodu se mi v hlavě zrodila myšlenka na vytvoření vlastní ladicí desky.
Na jedné straně byly na trhu značkové ladicí sady a také skvělé desky od společnosti LDM-Systems ze Зеленограда. Na druhé straně ceny těchto výrobků ohromují, a základní funkčnost bez rozšiřujících desek neodpovídá očekáváním. Deska s osazeným mikrokontrolérem a pinovým konektorem pro mě nemá žádný zájem. A zajímavější desky jsou drahé.

Ladicí deska MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems
Firma „Milandr“ má originální cenovou politiku a marketing. Existuje možnost získat zdarma vzorky některých integrovaných obvodů, ale to je dostupné pouze právnickým osobám a souvisí to s byrokratickým questem. Obecně platí, že integrované obvody v metalokeramickém pouzdře jsou zlaté ve smyslu doslovném i přeneseném. Například mikrokontrolér 1986BE1T stojí v Moskvě od 14 do 24 tisíc rublů. Mikročip statické paměti 1645РУ6У stojí od 15 000 rublů. Tento cenový řád platí pro všechny výrobky. V důsledku toho i specializované výzkumné ústavy s vládními zakázkami šetří a vyhýbají se takovým cenám. Integrované obvody v plastovém pouzdře pro civilní použití jsou významně levnější, ale nejsou k dispozici u populárních dodavatelů. Kromě toho se mi zdá, že kvalita integrovaných obvodů v plastovém pouzdře je horší než „zlatých“. Například jsem nedokázal spustit mikrokontrolér K1986BE1QI na frekvenci 128 MHz bez zvýšení parametru flash latency. Zároveň se teplota tohoto mikrokontroléru zvýšila na 40-50°C. Mikrokontrolér 1986BE1T („zlatý“) se spustil na 128 MHz bez dalších nastavení a zůstal chladný. Opravdu je dobrý.

„Zlatý“ mikrokontrolér 1986BE1T, (c) Milandr
Měl jsem štěstí, že mikrokontrolér v plastovém pouzdře se dá koupit v retailu ve společnosti LDM Systems, a všechny schémata desek jsou volně dostupné. Špatné je, že na fotografii kontroléru na stránkách je vidět označení, které říká, že jde o 4. revizi z roku 2014, tedy s vadami. Dlouho jsem přemýšlel – koupit, nebo nekoupit. Tak uběhlo několik let...
Myšlenka na vytvoření ladicí desky nikam nezmizela. Postupně jsem utvořil všechny požadavky a přemýšlel, jak to vše umístit na jednu desku, aby to bylo kompaktní a cenově dostupné. Současně jsem objednával u Číňanů chybějící součástky. Nikam jsem nespěchal – vše jsem dělal pro sebe. Čínští dodavatelé jsou známí svou nepozorností – musel jsem objednávat to samé na různých místech, abych získal vše potřebné. Navíc část paměťových čipů byla používaná – očividně vyndanými z rozbitých přístrojů. To mi později přišlo draho.
Koupit mikrokontrolér Milandr K1986ВЕ1QI (letecký) není jednoduchý úkol. Ve stejném obchodě „Čip a Dip“ v sekci „Položky na objednávku“ jsem našel pouze K1986BE92QI za 740 rublů, ale ten mi nevyhovoval. Jediná možnost – koupit ve společnosti LDM-Systems za 2000 rublů starou revizi. Protože jsem nikde jinde nemohl najít náhradu, rozhodl jsem se koupit to, co bylo. K mému příjemnému překvapení mi prodali zcela nový kontrolér, vydaný v prosinci 2018, revize 6+ (1820). A na stránkách je stále stará fotografie a v době psaní článku kontrolér není skladem...

Mikrokontrolér K1986BE1QI (letecký) v technologickém obalu, (c) Foto autora
Hlavní technické specifikace mé ladicí desky MDB1986 následující:
- vestavěný ladicí programátor, kompatibilní s J-Link a CMSIS-DAP;
- statická paměť 4 Mbit (256k x 16, 10 ns);
- paměťový čip flash 64 Mbit, Winbond 25Q64FVSIG;
- přijímač a vysílač rozhraní RS-232 s linkami RTS a CTS;
- rozhraní a konektory pro Ethernet, USB, CAN;
- kontrolér 7-segmentového displeje MAX7221;
- kolíkový konektor pro práci s MKIO (MIL_STD_1553) a ARINC429;
- fototransistor Everlight PT17-21C;
- pět barevných LED, tlačítko pro reset a dvě uživatelská tlačítka;
- napájení z USB portu 5 voltů;
- rozměry tištěné desky 100 x 80 mm
Líbily se mi desky řady STM-Discovery, protože obsahují vestavěný programátor-laděč – ST-Link. Originální ST-Link funguje pouze s mikrořadiči firmy STMicroelectronics, ale před pár lety byla možnost aktualizovat firmware ST-Link a získat SEGGER J-Link OB (on-board) Debugger. Právně existuje omezení pro použití takového laděče pouze s deskami STMicroelectronics, ale ve skutečnosti je jeho potenciál neomezený. Takže pokud máte J-Link OB, můžete mít na testovací desce vestavěný programátor-laděč. Rád bych poznamenal, že v produktech „LDM-Systems“ se používá převodník CP2102 (Usb2Uart), který umí pouze programovat.

Mikrořadiče STM32F103C8T6, pravé i ty méně pravé, (c) Foto autora
Takže bylo nutné koupit originální STM32F103C8T6, protože oficiální firmware nebude správně fungovat s klonem. O této myšlence jsem pochyboval a rozhodl se vyzkoušet mikrořadič CS32F103C8T6 čínské firmy CKS. K samotnému mikrořadiči nemám výhrady, ale oficiální firmware ST-Link na něm nepracoval. J-Link fungoval částečně – USB zařízení bylo detekováno, ale programátor své funkce neplnil a neustále upozorňoval, že je „defektní“.

Chyba při práci laděče na neoriginálním mikrořadiči
Na tomto jsem se neusadil a nejprve jsem napsal firmware pro blikání LED diodou, a potom realizoval požadavek IDCODE podle protokolu JTAG. Programátor ST-Link, který jsem měl na desce Discovery, a program ST-Link Utility programovali bez problémů CS32F103C8T6. Nakonec jsem se ujistil, že moje deska funguje. K mému potěšení cílový mikrořadič K1986BE1QI (pro letectví) svižně vydával svůj IDCODE po lince TDO.

Osilogram signální linky TDO s zakódovanou odpovědí IDCODE, (c) Foto autora

Tak se hodil port SWD pro ladění samotného laděče a kontrolu IDCODE
Zůstávalo řešení s laděčem . Sestavit projekt z původních zdrojáků od ARM není jednoduchá záležitost, vzal jsem projekt od , a pak jsem ještě zkusil DAP42. Bohužel, Keil uVision zamrzal a nechtěl s nimi pracovat. Nakonec jsem vyměnil čip laděče za originální STM32F103C8T6 a k této otázce se už nevracel.

Úspěšná práce vestavěného laděče J-Link STLink V2
Když byly k dispozici všechny klíčové komponenty budoucí debuggovací desky, ponořil jsem se do Eagle CAD a zjistil, že v knihovně prvků nejsou. Nebylo kam uhnout – musel jsem je nakreslit sám. Zároveň jsem vytvořil osazovací místa pro paměť, konektor HanRun pro Ethernet a pro rezistory a kondenzátory jsem přidal rámečky. Projektový soubor a knihovnu komponentů lze najít .
Schéma debuggovací desky MDB1986
Deska je napájena z jednosměrného zdroje s napětím 5 voltů, které získáváme z USB portu. Na desce jsou celkem dva porty USB Type-B. Jeden slouží pro programátor, druhý pro řadič K1986BE1QI. Deska může pracovat z kterékoli z těchto zdrojů nebo z obou současně. Nejjednodušší regulace zátěže a ochrana napájecích linek jsou realizovány na Schottkyho diodách, na schématu D2 a D3 (SS24). Na schématu jsou také vidět samovznikající pojistky F1 a F2 na 500 mA. Signální linky USB portu jsou chráněny diodovou sestavou USBLC6-2SC6.
Schéma debuggovacího programátoru ST-Link je mnohým známo, lze ho nalézt v dokumentaci k deskám STM32-Discovery a dalších zdrojích. Pro první programování klonu ST-Link/J-Link-OB/DAP (podle výběru) jsem vyvedl linky SWDIO (PA13), SWCLK (PA14), GND. Mnozí používají pro programování UART a musí přepínat propojení BOOT. Ale mně se lépe používá SWD, navíc tento protokol umožňuje ladění.
Téměř všechny komponenty desky jsou napájeny z 3,3 voltů, které přicházejí z regulátoru napětí AMS1117-3.3. Pro potlačení elektromagnetických interferencí a skoků proudu se používají LC filtry z kondenzátorů a cívkových filtrů série BLM31PG.
Zvlášť bych rád zmínil driver 7-segmentového displeje MAX7221. Podle specifikace je doporučené napájení od 4 do 5,5 voltů a úroveň vysokého signálu (logická jednička) není menší než 3,5 V (0,7 x VCC) při napájení 5 V. U řadiče K1986BE1QI (letecký) odpovídá výstup logické jedničky napětí od 2,8 do 3,3 V. Je zřejmé, že nedochází k souladu úrovní signálů, což může narušit normální provoz. Rozhodl jsem se napájet MAX7221 ze 4 V a snížit úrovně signálů na 2,8 V (0,7 x 4 = 2,8). K tomu je v sérii v napájecím okruhu driveru nainstalována dioda D4 (RS1A nebo FR103). Celkový pokles napětí tedy činí 0,9 V (Schottkyho dioda 0,3 V a dioda 0,6 V), a vše funguje.
Většina portů mikrokontroléru K1986VE1QI (letectví) je kompatibilní se signály až do 5V. Proto nevznikají problémy s použitím CAN převodníku MCP2551, který také pracuje na 5V. Jako RS-232 převodník je na schématu uveden čip MAX3232, ale ve skutečnosti jsem použil SN65C3232D od společnosti Texas Instruments, protože pracuje na 3.3V a poskytuje rychlost až 1Mbit/s.
Na desce jsou umístěny 4 krystalové rezonátory – jeden pro ladicí programátor (8 MHz) a tři pro cílový mikrokontrolér K1986VE1QI (letectví) o hodnotách 32.768kHz, 16MHz, 25MHz. To jsou nezbytné komponenty, protože parametry vestavěného RC generátoru se pohybují v širokém rozmezí od 6 do 10 MHz. Frekvence 25MHz je nezbytná pro práci vestavěného Ethernet kontroléru. Na stránkách Milandra je (možná omylem) uvedeno, že v plastovém pouzdru Ethernet chybí. Ale budeme se opírat o specifikace a fakta.
Důležitým podnětem k vytvoření vlastní ladicí desky byla možnost pracovat s externí sběrnicí EBC (external bus controller), která v podstatě funguje jako paralelní port. Mikrokontrolér K1986VE1QI (letectví) umožňuje připojení a práci s externími paměťovými obvody a periferními zařízeními, například A/D převodníky, FPGA atd. Možnosti externí sběrnice jsou dostatečně rozsáhlé – lze pracovat s 8-bitovými, 16-bitovými a 32-bitovými statickými RAM, ROM a NAND Flash. Pro čtení/zápis 32-bitových dat kontrolér automaticky provádí 2 odpovídající operace pro 16-bitové obvody, a pro 8-bitové – 4 operace. Je zřejmé, že 32-bitová vstupně-výstupní operace bude provedena nejrychleji s 32-bitovou sběrnicí dat. Mezi nevýhody patří potřeba programovat s 32-bitovými daty, což si na desce vyžaduje 32 tras.

Čipy statické RAM, použité (uhodni, který má vadu)
Vyváženým řešením je použití 16-bitových paměťových čipů. Mám k dispozici čipy od Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16 x 256k, 10 ns, 3.3V). Samozřejmě, firma „Milandr“ má své vlastní čipy statické paměti. , ale jsou příliš drahé a nedostupné. Alternativou jsou kompatibilní čipy Samsung K6R4016V1D. Dříve jsem zmínil, že čipy byly použité a kus, který jsem původně nainstaloval, selhával a vykazoval chaotické hodnoty na 15. datovém řádku. Hledání hardwarových chyb trvalo několik dní a o to větší byla spokojenost, když jsem vyměnil poškozený čip za funkční. Přesto rychlost práce s externí pamětí zanechává mnoho přání.
Externí sběrnice a režim StandAloneMikrokontrolér K1986VE1QI (letecký) má unikátní režim StandAlone, který je určen pro přímý přístup zvenčí k ethernetovým řadičům a MKIO (MIL_STD_1553) prostřednictvím externí sběrnice, přičemž jádro je v resetovaném stavu, tj. není používáno. Tento režim je výhodný pro procesory a FPGA, které nemají Ethernet a/nebo MKIO.
Konfigurace připojení je následující:
- datová sběrnice MCU(D0-D15) => SRAM(I/O0-I/O15),
- adresová sběrnice MCU(A1-A18) => SRAM(A0-A17),
- řízení MCU(nWR,nRD,PortC2) => SRAM (WE,OE,CE),
- SRAM(UB,LB) jsou připojeny nebo taženy k zemi přes rezistor.
Linie CE je tažena k napájení přes rezistor, vývody pro výběr bytu MCU(BE0-BE3) nejsou používány. Pod spoilerem uvádím kód pro inicializaci portů a řadiče externí sběrnice.
Inicializace portů a řadiče EBC (externího řadiče sběrnice)
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);
}
Mikrokontrolér v pouzdře LQFP-144 a paměť v pouzdře TSOP-44 mají mnoho propojených vývodů a zabírají na desce mnoho místa. S ohledem na moji zkušenost s řešením optimalizačních úloh v oblasti ekonomie mi bylo jasné, že tyto čipy by měly být umístěny na desce primárně. V různých zdrojích jsem se setkal s chvalebnými recenzemi o . Stáhl jsem si zkušební verzi (trial) a projekt z Eagle CAD jsem mohl do programu exportovat až poté, co jsem odstranil téměř všechny komponenty. Bohužel program TopoR mi nepomohl umístit na desku ani 10 prvků. Nejdříve byly všechny komponenty umístěny v jednom rohu a poté rozloženy podél okraje. Tato možnost mě neuspokojila, a tak jsem dlouho prováděl trasování desky ručně v obvyklém prostředí Eagle CAD.
Důležitým prvkem plošného spoje je sítotisk. Na zkušební desce by měli být nejen popisky k elektronickým komponentům, ale také všechny konektory by měly být označeny. Na zadní straně desky jsem umístil tabulky s funkcemi portů ovladače (hlavní, alternativní, předefinované, skutečné). Výrobu plošných spojů jsem objednal v Číně ve známé společnosti PCBWay. Chválit nebudu, protože kvalita je dobrá. Mohou to udělat lépe, s menšími tolerancemi, ale .

Vyrobené plošné spoje MDB1986, (c) Foto autora
Sestavování komponentů jsem musel provádět "na koleni" páječkou 40 wattů a cínem ПОС-61, protože pájím zřídka, 1-2krát za rok, a pájecí pasta vyschla. Musel jsem také vyměnit čínský ovladač CS32F103 za originální STM32F103 a poté také vyměnit paměť. Celkově mě teď výsledek úplně uspokojuje, i když jsem ještě neověřil funkci RS-232 a CAN.

Zkušební deska MDB1986 v akci — svítí a zahřívá, (c) Foto autora
Na stránkách „Milandra“ lze najít dostatek série 1986BE9 (jádro Cortex-M3), ale pro mikrokontrolér K1986ВЕ1QI (letecký) tam nevidím nic. Po zhlédnutí zveřejněných materiálů, metodik a laboratorních prací pro vysoké školy jsem potěšen, že se po celé zemi připravují odborníci na práci s ruskými kontroléry. Většina učebních materiálů se zaměřuje na práci s porty I/O, časovači, ADC, DAC, SPI, UART. Používají se různé IDE (Keil, IAR, CodeMaster). Někde se programuje pomocí registrů CMSIS, jinde se využívá MDR Library. Je nezbytné zmínit zdroj , který obsahuje řadu článků od praktických programátorů. A samozřejmě nesmíme zapomínat na .
Rada MilandraMikroelektronika v Rusku se rozvíjí a v tomto procesu hraje společnost „Milandr“ významnou roli. Objevují se nové zajímavé mikrokontroléry, například 1986ВЕ81Т a „Electrosila“ s rozhraními SpaceWire a MKIO (stejné jako v 1986BE1 a patrně se stejnými problémy) atd. Ale běžným studentům, učitelům a civilním inženýrům není reálné tyto čipy koupit. To znamená, že inženýrská komunita nebude schopna rychle odhalit chyby a problémy tohoto čipu. Mělo by se nejprve začít s výrobou čipů v plastových pouzdrech, distribuovat je mezi všechny zainteresované subjekty a až poté, co odborníci provedou ověření (lat. approbatio — schválení, uznání), může být vyvinuta revize v kovokremických pouzdrech se zajištěním proti všem nepříznivým faktorům. Doufám, že nás v nejbližší budoucnosti všechny potěší novými projekty prezentovanými na výstavách.
Vyvinutou testovací desku si může kdokoli zopakovat, upravit a použít ve výukovém procesu. V první řadě jsem desku dělal pro sebe, ale dopadlo to tak dobře, že .
K1986ВЕ1QI (letecký) – to je velmi zajímavý kontrolér s unikátními rozhraními, který může být používán na vysokých školách pro výuku studentů. Myslím, že po napravění chyb v kontroléru a vykonání certifikačních zkoušek, kontrolér doslova vzlétne!
Zdroj: habr.com
