Pred nekaj leti sem se seznanil z ruskimi mikrokontrolerji podjetja Milandr. Bilo je leto 2013, ko so inženirji živahno razpravljali o prvih rezultatih zveznega ciljnega programa "Razvoj baze elektronskih komponent in radijske elektronike" za obdobje 2008–2015. Takrat je bil krmilnik K1986BE9x (jedro Cortex-M3) že izdan, krmilnik 1986BE1T (jedro Cortex-M1) pa se je pravkar pojavil. On, v plastičnem ohišju LQFP-144, je imel v dokumentaciji oznako K1986BE1QI (letalstvo), na samem čipu pa oznako MDR32F1QI. Na spletni strani proizvajalca ima pripono "zrak", saj ima vmesnike specifične za letalsko industrijo (ARINC 429, MIL_STD_1553).
Presenetljivo je, da je podjetje Milander ob distribuciji teh krmilnikov pripravilo debug kite in knjižnico podprogramov za delo s perifernimi napravami, »vendar brez kakršnih koli dodatnih garancij in obveznosti glede pravilnosti knjižnice«. Knjižnica je podobna standardni periferni knjižnici podjetja STMicroelectronics. Na splošno imajo vsi krmilniki ARM, zgrajeni na jedru Cortex-M, veliko skupnega. Zato je spoznavanje novih ruskih krmilnikov potekalo hitro. Za tiste, ki so kupili lastniške komplete za odpravljanje napak, je bila med uporabo zagotovljena tehnična podpora.
Komplet za odpravljanje napak za mikrokrmilnik 1986BE1T, © Milandr
Vendar so se sčasoma začele pojavljati "otroške bolezni" novih čipov in knjižnic. Testni primeri vdelane programske opreme so delovali brez vidnih težav, vendar so ob večjih spremembah deževale zrušitve in napake. Prva "pogoltnost" v moji praksi so bile nerazložljive okvare v krmilniku CAN. Leto pozneje je bila odkrita težava z modulom na krmilniku 1986BE1T (zrak) zgodnje revizije
Neprijetna lastnost je bila, da je bilo treba delati in se ukvarjati z napakami ne na ploščah za odpravljanje napak, temveč na ploščah prototipnih naprav, ki so bile načrtovane za serijsko tovarniško proizvodnjo. Poleg JTAG konektorja običajno ni bilo ničesar. Bilo je težko in neprijetno povezati se z logičnim analizatorjem, običajno ni bilo LED in zaslonov. Iz tega razloga se je v moji glavi pojavila ideja o ustvarjanju lastne plošče za odpravljanje napak.
Po eni strani so bili na trgu kompleti za odpravljanje napak z blagovno znamko, pa tudi čudovite plošče LDM-Systems iz Zelenograda. Po drugi strani pa cene teh izdelkov spravljajo v stupor, osnovna funkcionalnost brez razširitvenih kartic pa ne izpolnjuje pričakovanj. Plošča s prispajkanim krmilnikom in pinsko glavo me ne zanima. In bolj zanimive plošče so drage.
Razvojna plošča MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems
Podjetje "Milandr" ima edinstveno cenovno politiko in trženje. Torej je mogoče dobiti vzorce nekaterih mikrovezij brezplačno, vendar je to na voljo samo pravnim osebam in je povezano z birokratskim iskanjem. Na splošno so mikrovezja v keramično-kovinskem paketu zlata v dobesednem in figurativnem pomenu. Na primer, krmilnik 1986BE1T v Moskvi stane od 14 do 24 tisoč rubljev. Statični pomnilniški čip 1645RU6U stane od 15000 rubljev. In to je vrstni red cen za vse izdelke. Posledično tudi specializirani raziskovalni inštituti z državnimi naročili varčujejo in se izogibajo takim cenam. Čipi v plastičnem ohišju za civilno rabo so bistveno cenejši, a jih pri popularnih dobaviteljih ni. Poleg tega se mi zdi, da je kakovost čipov v plastičnem ohišju slabša od "zlata". Na primer, krmilnika K1986BE1QI nisem mogel zagnati pri 128MHz, ne da bi povečal nastavitev zakasnitve bliskavice. Hkrati se je temperatura tega krmilnika dvignila na 40-50C. Toda krmilnik 1986BE1T ("zlati") se je zagnal pri 128 MHz brez dodatnih nastavitev in ostal hladen. Res je dober.
"Zlati" mikrokrmilnik 1986BE1T, (c) Milandr
Imel sem srečo, da je mikrokontroler v plastičnem ohišju še vedno mogoče kupiti v maloprodaji pri LDM Systems, vsa vezja pa so prosto dostopna. Slaba stvar je, da je na mestu na fotografiji krmilnika vidna oznaka, ki pravi, da je to 4. revizija 2014, tj. z napakami. Dolgo sem razmišljal - kupiti ali ne kupiti. Tako je minilo nekaj let...
Ideja o ustvarjanju plošče za odpravljanje napak ni nikamor izginila. Postopoma sem oblikoval vse zahteve in razmišljal, kako vse to postaviti na eno ploščo, da bo kompaktna in ne draga. Vzporedno sem pri Kitajcih naročil manjkajoče komponente. Nikamor se mi ni mudilo - vse sem naredil zase. Kitajski dobavitelji so znani po povrhnosti - isto stvar sem moral naročiti na različnih mestih, da sem dobil vse, kar sem potreboval. Poleg tega se je izkazalo, da so nekateri pomnilniški čipi rabljeni - očitno spajkani iz pokvarjenih naprav. To me je kasneje doletelo.
Nakup mikrokontrolerja Milandr K1986BE1QI (letalski) ni lahka naloga. V isti trgovini Chip and Dip sem v razdelku »Pozicije za naročilo« našel samo K1986BE92QI za 740 rubljev, vendar mi ni ustrezal. Edina možnost je nakup nesveže revizije pri LDM-Systems za 2000 rubljev. Ker nikjer drugje nisem našel zamenjave, sem se odločil kupiti tisto, kar je bilo. Na moje prijetno presenečenje so mi prodali popolnoma nov krmilnik izdaje decembra 2018, revizija 6+ (1820). In spletno mesto ima še vedno staro fotografijo in v času pisanja krmilnik ni na voljo ...
Mikrokrmilnik K1986BE1QI (letalski) v tehnološki embalaži, (c) Fotografija avtorja
Glavne tehnične specifikacije moje razvojne plošče MDB1986 naslednje:
- vgrajen razhroščevalnik-programer, združljiv z J-Link in CMSIS-DAP;
- 4Mbit statični pomnilnik (256k x 16, 10 ns);
- flash pomnilniški čip 64Mbit, Winbond 25Q64FVSIG;
- oddajnik vmesnika RS-232 z linijama RTS in CTS;
- vmesniki in priključki za Ethernet, USB, CAN;
- 7-segmentni zaslonski krmilnik MAX7221;
- pin konektor za delo z MCIO (MIL_STD_1553) in ARINC429;
- fototranzistor Everlight PT17-21C;
- pet barvnih LED, gumb za ponastavitev in dva uporabniška gumba;
- napaja se preko USB priključka 5 voltov;
- tiskano vezje dimenzij 100 x 80, mm
Všeč so mi bile plošče serije STM-Discovery, ker imajo vgrajen programer-debugger - ST-Link. Lastniški ST-Link deluje samo s krmilniki STMicroelectronics, vendar je pred nekaj leti postalo mogoče posodobiti vdelano programsko opremo v ST-Linku in dobiti SEGGER J-Link OB (on-board) Debugger. Pravno velja omejitev za uporabo takega razhroščevalnika samo s ploščami STMicroelectronics, vendar potencial dejansko ni omejen. Tako imate lahko z J-Link OB vgrajen programer-debugger na plošči za odpravljanje napak. Opažam, da izdelki LDM-Systems uporabljajo pretvornik CP2102 (Usb2Uart), ki lahko samo utripa.
Mikrokontrolerji STM32F103C8T6, resnični in ne tako, (c) Fotografija avtorja
Torej je bilo treba kupiti originalni STM32F103C8T6, saj vdelana programska oprema z blagovno znamko ne bo pravilno delovala s klonom. Podvomil sem v to tezo in se odločil preizkusiti krmilnik CS32F103C8T6 kitajskega podjetja CKS. Nimam pritožb glede samega krmilnika, vendar lastniška vdelana programska oprema ST-Link v njem ni delovala. J-Link je deloval delno - naprava USB je bila zaznana, vendar programator ni opravljal svojih funkcij in je nenehno opozarjal, da je "pokvarjena".
Napaka pri zagonu razhroščevalnika na neoriginalnem krmilniku
Na to se nisem umiril in najprej napisal vdelano programsko opremo za utripanje LED, nato pa implementiral zahtevo IDCODE s protokolom JTAG. Programator ST-Link, ki sem ga imel na plošči Discovery in program ST-Link Utility mi je brez težav prešaltal CS32F103C8T6.Posledično sem se prepričal, da mi plošča deluje. Na moje veselje je ciljni krmilnik K1986BE1QI (letalstvo) veselo izdal svojo IDCODE prek linije TDO.
Oscilogram signalne linije TDO z IDCODE kodiranim odgovorom, (c) Fotografija avtorja
Tako so vrata SWD prišla prav za odpravljanje napak v samem razhroščevalniku in preverjanje IDCODE
Obstajala je možnost z razhroščevalnikom
Uspešno delovanje vgrajenega razhroščevalnika J-Link STLink V2
Ko so bile vse ključne komponente prihodnje plošče za odpravljanje napak na voljo, sem vstopil v Eagle CAD in ugotovil, da jih ni v knjižnici elementov. Ni kam iti - moral sem jih narisati sam. Hkrati sem naredil sedeže za pomnilnik, priključek HanRun za Ethernet ter dodal okvirje za upore in kondenzatorje. Najdete lahko projektno datoteko in knjižnico komponent
Shematski diagram plošče za odpravljanje napak MDB1986
Plošča se napaja iz 5-voltnega DC vira iz USB priključka. Na plošči sta dva priključka USB Type-B. Eden je za programator, drugi pa za krmilnik K1986BE1QI. Plošča lahko deluje iz katerega koli od teh virov ali obeh hkrati. Najenostavnejša nastavitev obremenitve in zaščita daljnovodov sta izvedena na Schottky diodah, v vezjih D2 in D3 (SS24). Na diagramu lahko vidite tudi samoobnovljive varovalke F1 in F2 pri 500mA. Signalne linije vrat USB so zaščitene s sklopom diod USBLC6-2SC6.
Vezje razhroščevalnika-programerja ST-Link je znano mnogim, najdete ga v dokumentaciji za plošče STM32-Discovery in drugih virih. Za primarno vdelano programsko opremo klona ST-Link / J-Link-OB / DAP (neobvezno) sem predstavil linije SWDIO (PA13), SWCLK (PA14), GND. Mnogi uporabljajo UART za vdelano programsko opremo in so prisiljeni potegniti mostičke BOOT. Toda SWD mi je bolj primeren, poleg tega ta protokol omogoča odpravljanje napak.
Skoraj vse komponente plošče se napajajo s 3.3 volti, ki prihajajo iz regulatorja napetosti AMS1117-3.3. Za zatiranje elektromagnetnih motenj in tokovnih sunkov se uporabljajo LC filtri iz kondenzatorjev in dušilk serije BLM31PG.
Ločeno je treba omeniti gonilnik 7-segmentnega zaslona MAX7221. Po specifikaciji je priporočeno napajanje od 4 do 5.5 voltov, visok nivo signala (logična ena) pa ni nižji od 3.5 V (0.7 x VCC) pri napajanju s 5 V. Za krmilnik K1986BE1QI (letalstvo) izhod logične enote ustreza napetosti od 2.8 do 3.3 V. Očitno obstaja neskladje v nivojih signala, ki lahko moti normalno delovanje. Odločil sem se, da napajam MAX7221 iz 4V in znižam nivoje signala na 2.8V (0.7 x 4 = 2.8). Da bi to naredili, je dioda D4 (RS1A ali FR103) zaporedno nameščena v napajalnem krogu gonilnika. Skupni padec napetosti je 0.9V (0.3V Schottky dioda in 0.6V dioda) in vse deluje.
Večina vrat na mikrokrmilniku K1986BE1QI (letalstvo) je združljivih s signali do 5 V. Zato uporaba oddajnika CAN MCP2551, ki prav tako deluje iz 5V, ne povzroča težav. Diagram prikazuje čip MAX232 kot oddajnik-sprejemnik RS-3232, v resnici pa sem uporabil SN65C3232D družbe Texas Instruments, ker deluje od 3.3V in zagotavlja hitrost do 1Mbit/s.
Na plošči so 4 kvarčni resonatorji - eden za razhroščevalnik (8 MHz) in trije za ciljni mikrokrmilnik K1986BE1QI (letalstvo) z nominalnimi vrednostmi 32.768 kHz, 16 MHz, 25 MHz. To so nujne komponente, saj. parametri vgrajenega RC generatorja so v širokem območju od 6 do 10 MHz. Za delovanje vgrajenega Ethernet krmilnika je potrebna frekvenca 25 MHz. Na spletni strani Milandre iz nekega razloga (morda pomotoma) piše, da v plastičnem ohišju ni Etherneta. Vendar se bomo zanašali na specifikacijo in dejstva.
Pomembna spodbuda za ustvarjanje lastne plošče za odpravljanje napak je bila priložnost za delo z zunanjim sistemskim vodilom EBC (external bus controller), ki je v bistvu vzporedna vrata. Mikrokrmilnik K1986BE1QI (letalski) vam omogoča povezavo in delo z zunanjimi pomnilniškimi čipi in perifernimi napravami, kot so ADC, FPGA itd. Možnosti zunanjega sistemskega vodila so precej velike - lahko delate z 8-bitnimi, 16-bitnimi in 32-bitnimi statičnimi pomnilniki RAM, ROM in NAND Flash. Za branje / pisanje 32-bitnih podatkov lahko krmilnik samodejno izvede 2 ustrezni operaciji za 16-bitna mikrovezja in 8 operacije za 4-bitna. Očitno bo 32-bitna V/I operacija najhitrejša z 32-bitnim podatkovnim vodilom. Pomanjkljivosti vključujejo potrebo, da program deluje z 32-bitnimi podatki, plošča pa bo morala položiti 32 skladb.
SRAM čipi, rabljeni (uganite kateri je okvarjen)
Uravnotežena rešitev je uporaba 16-bitnih pomnilniških čipov. Končal sem s čipi Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16x256k, 10ns, 3.3 V). Seveda ima podjetje "Milandr" svoje statične pomnilniške čipe
Zunanje vodilo in samostojni načinMikrokrmilnik K1986BE1QI (letalski) ima edinstven način StandAlone, ki je namenjen neposrednemu zunanjemu dostopu do krmilnikov Ethernet in MCIO (MIL_STD_1553) preko zunanjega vodila, medtem ko je jedro v stanju ponastavitve, tj. se ne uporablja. Ta način je uporaben za procesorje in FPGA, ki nimajo Etherneta in/ali MCIO.
Diagram povezave je naslednji:
- podatkovno vodilo MCU(D0-D15) => SRAM(I/O0-I/O15),
- naslovno vodilo MCU(A1-A18) => SRAM(A0-A17),
- Nadzor MCU (nWR,nRD,PortC2) => SRAM (WE,OE,CE),
- SRAM(UB,LB) sta povezana ali potegnjena na maso prek upora.
Linija CE se napaja prek upora, zatiči za pridobivanje bajtov MCU (BE0-BE3) se ne uporabljajo. Pod spojlerjem podajam kodo za inicializacijo vrat in krmilnika zunanjega vodila.
Inicializacija vrat in krmilnika EBC (zunanji krmilnik vodila)
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);
}
Mikrokrmilnik v ohišju LQFP-144 in pomnilnik v ohišju TSOP-44 imata veliko povezanih pinov in zavzameta veliko prostora na tiskanem vezju. Z izkušnjami pri reševanju optimizacijskih problemov na področju ekonomije mi je bilo očitno, da je treba ta mikrovezja najprej postaviti na ploščo. V različnih virih sem naletel na pohvalne ocene o
Sitotisk je pomemben element tiskanega vezja. Na plošči za odpravljanje napak ne smejo biti samo podpisi za elektronske komponente, ampak morajo biti podpisani vsi priključki. Na hrbtni strani plošče sem postavil tabele-opomnike s funkcijami priključkov krmilnika (glavni, alternativni, nadomestni, dejanski). Naročil sem izdelavo tiskanih vezij na Kitajskem v znani pisarni PCBWay. Ne bom hvalil, ker je kakovost dobra. Lahko se bolje obnesejo z manjšimi tolerancami, vendar
Izdelana tiskana vezja MDB1986, (c) Fotografija avtorja
Komponente sem moral odspajkati "na kolenu" s 40-vatnim spajkalnikom in spajkalom POS-61, ker spajkam redko, 1-2 krat na leto, spajkalna pasta pa se je posušila. Prav tako sem moral zamenjati kitajski krmilnik CS32F103 z originalnim STM32F103 in nato zamenjati tudi pomnilnik. Na splošno sem zdaj popolnoma zadovoljen z rezultatom, čeprav še nisem preveril delovanja RS-232 in CAN.
Plošča za odpravljanje napak MDB1986 v delovanju — sveti in greje, (с) Fotografija avtorja
Na spletnem mestu "Milandra" lahko najdete dovolj
Mislim na MilandraMikroelektronika v Rusiji se razvija in podjetje "Milandr" igra pomembno vlogo v tem procesu. Pojavijo se novi zanimivi mikrokontrolerji, na primer 1986BE81T in Elektrosila z vmesnikoma SpaceWire in MKIO (enako kot v 1986BE1 in po možnosti z enakimi težavami) itd. Toda za navadne študente, učitelje in gradbene inženirje ni realno kupiti takšnih mikrovezij. To pomeni, da inženirska skupnost ne bo mogla hitro prepoznati napak in težav tega čipa. Zdi se mi, da je treba najprej izdelati mikrovezja v plastičnem ohišju, jih razdeliti vsem zainteresiranim in šele po odobritvi (latinsko approbatio - odobritev, priznanje) lahko strokovnjaki pripravijo revizijo v keramično-kovinskem ohišju z zaščito pred vsi strašni dejavniki. Upam, da bomo v bližnji prihodnosti VSI zadovoljni z novimi projekti, napovedanimi na razstavah.
Vsakdo lahko ponovi, spremeni in uporabi tablo za odpravljanje napak, ki sem jo razvil v izobraževalnem procesu. Najprej sem si naredil tablo, ki pa je tako dobro izpadla, da
K1986BE1QI (zrak) je zelo zanimiv krmilnik z edinstvenimi vmesniki, ki se lahko uporablja na univerzah za poučevanje študentov. Mislim, da bo po odpravi ugotovljenih napak na krmilniku in opravljenih certifikacijskih testih krmilnik letel v pravem pomenu besede!
Vir: www.habr.com