Prije nekoliko godina sam se upoznao sa ruskim mikrokontrolerima iz Milandr-a. Bilo je to 2013. godine, kada su inženjeri žustro raspravljali o prvim rezultatima Saveznog ciljnog programa „Razvoj baze elektronskih komponenti i radio elektronike“ za 2008-2015. U to vrijeme, K1986BE9x kontroler (Cortex-M3 jezgro) je već bio objavljen, a 1986BE1T kontroler (Cortex-M1 jezgro) tek se pojavio. On je, u plastičnom LQFP-144 kućištu, u dokumentaciji imao oznaku K1986BE1QI (avijacija), a na samom čipu oznaku MDR32F1QI. Na web stranici proizvođača ima sufiks "air", budući da ima interfejse specifične za industriju aviona (ARINC 429, MIL_STD_1553).
Začudo, u vreme distribucije ovih kontrolera, kompanija Milander je pripremila komplete za otklanjanje grešaka i biblioteku potprograma za rad sa periferijama, „ali bez ikakvih dodatnih garancija i obaveza u pogledu ispravnosti biblioteke“. Biblioteka je slična Standardnoj perifernoj biblioteci kompanije STMicroelectronics. Generalno, svi ARM kontroleri izgrađeni na Cortex-M jezgri imaju dosta zajedničkog. Iz tog razloga, upoznavanje sa novim ruskim kontrolorima prošlo je brzo. A za one koji su kupili vlasničke komplete za otklanjanje grešaka, tehnička podrška je bila obezbeđena tokom upotrebe.
Komplet za otklanjanje grešaka za mikrokontroler 1986BE1T, © Milandr
Međutim, s vremenom su se počele pojavljivati "dječije bolesti" novih čipova i biblioteka. Testni primjeri firmvera su radili bez vidljivih problema, ali sa značajnim modifikacijama padali su i greške. Prva „lasta“ u mojoj praksi bili su neobjašnjivi kvarovi u CAN kontroleru. Godinu dana kasnije, problem sa modulom je otkriven na 1986BE1T (zračnom) kontroleru rane revizije
Neugodna karakteristika je bila da je bilo potrebno raditi i rješavati greške ne na pločama za otklanjanje grešaka, već na pločama prototipova uređaja koji su planirani za serijsku tvorničku proizvodnju. Osim JTAG konektora, tu obično nije bilo ničega. Bilo je teško i nezgodno povezati se s logičkim analizatorom, a obično nije bilo LED dioda i ekrana. Iz tog razloga mi se u glavi pojavila ideja da napravim vlastitu ploču za otklanjanje grešaka.
S jedne strane, na tržištu su se našli brendirani kompleti za otklanjanje grešaka, kao i divne ploče LDM-Systems-a iz Zelenograda. S druge strane, cijene ovih proizvoda dovode u omamljenost, a osnovna funkcionalnost bez kartica za proširenje ne ispunjava očekivanja. Ploča sa zalemljenim kontrolerom i pin headerom me ne zanima. A interesantnije ploče su skupe.
Razvojna ploča MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems
Kompanija "Milandr" ima jedinstvenu politiku cena i marketinga. Dakle, moguće je besplatno dobiti uzorke nekih mikro krugova, ali to je dostupno samo pravnim licima i povezano je s birokratskom potragom. Općenito, mikrokola u keramičko-metalnom paketu su zlatna u doslovnom i figurativnom smislu. Na primjer, kontroler 1986BE1T košta u Moskvi od 14 do 24 hiljade rubalja. Čip statičke memorije 1645RU6U košta od 15000 rubalja. A ovo je redoslijed cijena za sve proizvode. Kao rezultat toga, čak i specijalizovani istraživački instituti sa državnim narudžbinama štede novac i izbegavaju takve cene. Čipovi u plastičnoj kutiji za civilnu upotrebu su znatno jeftiniji, ali ih nema kod popularnih dobavljača. Osim toga, kvalitet čipova u plastičnom kućištu, čini mi se, lošiji je od "zlata". Na primjer, nisam mogao pokrenuti K1986BE1QI kontroler na 128MHz bez povećanja postavke latencije blica. Istovremeno, temperatura ovog regulatora porasla je na 40-50C. Ali 1986BE1T („zlatni“) kontroler je pokrenuo na 128 MHz bez dodatnih podešavanja i ostao je hladan. On je stvarno dobar.
"Zlatni" mikrokontroler 1986BE1T, (c) Milandr
Imao sam sreću da se mikrokontroler u plastičnom kućištu još uvijek može kupiti u maloprodaji od LDM Systems-a, a sve ploče su slobodno dostupne. Loša stvar je što je na sajtu na fotografiji kontrolora vidljiva oznaka koja kaže da je ovo 4. revizija 2014. godine, tj. sa nedostacima. Dugo sam razmišljao - kupiti ili ne kupiti. Tako je prošlo nekoliko godina...
Ideja o stvaranju ploče za otklanjanje grešaka nije nigdje nestala. Postepeno sam formirao sve zahtjeve i razmišljao kako sve to smjestiti na jednu ploču, tako da bude kompaktno i ne skupo. Paralelno s tim, naručio sam komponente koje nedostaju od Kineza. Nije mi se žurilo - sve sam radila za sebe. Kineski dobavljači su poznati po aljkavosti - morao sam naručiti istu stvar na različitim mjestima da bih dobio sve što mi je trebalo. Štaviše, ispostavilo se da su neki od memorijskih čipova polovni - očito zalemljeni od pokvarenih uređaja. Ovo me pogodilo kasnije.
Kupovina mikrokontrolera Milandr K1986BE1QI (avijacija) nije lak zadatak. U istoj prodavnici Chip and Dip, u odjeljku "Pozicije po narudžbi", našao sam samo K1986BE92QI za 740 rubalja, ali mi nije odgovarao. Jedina opcija je kupiti nesvježu reviziju od LDM-Systems-a za 2000 rubalja. Pošto nigde drugde nisam mogao da nađem zamenu, odlučio sam da kupim ono što je bilo. Na moje prijatno iznenađenje, prodali su mi potpuno novi kontroler izdanja iz decembra 2018, revizija 6+ (1820). I stranica još uvijek ima staru fotografiju, a u vrijeme pisanja kontrolor nije dostupan...
Mikrokontroler K1986BE1QI (avijacija) u tehnološkom pakovanju, (c) Fotografija autora
Glavne tehničke specifikacije moje razvojne ploče MDB1986 sledeće:
- ugrađeni programator za otklanjanje grešaka kompatibilan sa J-Link i CMSIS-DAP;
- 4Mbit statička memorija (256k x 16, 10 ns);
- fleš memorijski čip 64Mbit, Winbond 25Q64FVSIG;
- RS-232 interfejs primopredajnik sa RTS i CTS linijama;
- interfejsi i konektori za Ethernet, USB, CAN;
- 7-segmentni displej kontroler MAX7221;
- pin konektor za rad sa MCIO (MIL_STD_1553) i ARINC429;
- fototranzistor Everlight PT17-21C;
- pet LED dioda u boji, dugme za resetovanje i dva korisnička dugmeta;
- napaja se preko USB porta od 5 volti;
- dimenzije štampane ploče 100 x 80, mm
Sviđale su mi se ploče serije STM-Discovery jer imaju ugrađeni programator-debugger - ST-Link. Brendirani ST-Link radi samo sa STMicroelectronics kontrolerima, ali prije nekoliko godina postalo je moguće ažurirati firmver u ST-Link-u i dobiti SEGGER J-Link OB (on-board) Debugger. Zakonski postoji ograničenje da se takav debuger koristi samo sa STMicroelectronics pločama, ali u stvari potencijal nije ograničen. Dakle, ako imate J-Link OB, možete imati ugrađeni programator-debugger na ploči za otklanjanje grešaka. Napominjem da proizvodi LDM-Systems koriste CP2102 (Usb2Uart) pretvarač, koji može samo bljeskati.
Mikrokontroleri STM32F103C8T6, pravi i ne, (c) Fotografija autora
Dakle, bilo je potrebno kupiti originalni STM32F103C8T6, jer brendirani firmver neće raditi ispravno sa klonom. Sumnjao sam u ovu tezu i odlučio sam da isprobam kontroler CS32F103C8T6 kineske kompanije CKS. Nemam pritužbi na sam kontroler, ali vlasnički ST-Link firmver nije radio u njemu. J-Link je djelomično radio - USB uređaj je otkriven, ali programator nije obavljao svoje funkcije i stalno je podsjećao da je "neispravan".
Greška prilikom pokretanja programa za otklanjanje grešaka na neoriginalnom kontroleru
Nisam se smirio na ovo i prvo sam napisao firmware za treptanje LED-a, a zatim implementirao IDCODE zahtjev koristeći JTAG protokol. ST-Link programator koji sam imao na Discovery ploči i ST-Link Utility program su bez problema bljesnuli CS32F103C8T6.Kao rezultat toga, uvjerio sam se da moja ploča radi. Na moje oduševljenje, ciljni kontrolor K1986BE1QI (avijacija) je veselo izdao svoj IDCODE preko TDO linije.
Oscilogram TDO signalne linije sa IDCODE kodiranim odgovorom, (c) Fotografija autora
Tako je SWD port dobro došao za otklanjanje grešaka u samom debugeru i provjeru IDCODE-a
Postojala je opcija sa debagerom
Uspješno funkcioniranje ugrađenog debugera J-Link STLink V2
Kada su sve ključne komponente buduće ploče za otklanjanje grešaka bile dostupne, ušao sam u Eagle CAD i otkrio da ih nema u biblioteci elemenata. Nema se kuda - morao sam ih sam nacrtati. Istovremeno sam napravio sjedišta za memoriju, HanRun konektor za Ethernet i dodao okvire za otpornike i kondenzatore. Datoteka projekta i biblioteka komponenti se mogu pronaći
Šematski dijagram MDB1986 ploče za otklanjanje grešaka
Ploča se napaja od 5 volti DC izvora iz USB porta. Na ploči se nalaze dva USB Type-B porta. Jedan je za programator, drugi je za K1986BE1QI kontroler. Ploča može raditi iz bilo kojeg od ovih izvora ili oba u isto vrijeme. Najjednostavnije podešavanje opterećenja i zaštita električnih vodova implementirano je na Schottky diodama, u krugovima D2 i D3 (SS24). Također na dijagramu možete vidjeti samooporavljajuće osigurače F1 i F2 na 500mA. Signalne linije USB porta zaštićene su sklopom diode USBLC6-2SC6.
St-Link debuger-programerski krug je poznat mnogima, može se naći u dokumentaciji za STM32-Discovery ploče i drugim izvorima. Za primarni firmver ST-Link / J-Link-OB / DAP klona (opciono), izveo sam SWDIO (PA13), SWCLK (PA14), GND linije. Mnogi koriste UART za firmver i prisiljeni su povući BOOT džampere. Ali SWD mi je zgodniji, osim što ovaj protokol omogućava otklanjanje grešaka.
Gotovo sve komponente ploče se napajaju sa 3.3 volta, koji dolaze iz regulatora napona AMS1117-3.3. Za suzbijanje elektromagnetskih smetnji i strujnih udara koriste se LC filteri iz kondenzatora i prigušnica serije BLM31PG.
Odvojeno, vrijedi spomenuti MAX7 drajver za 7221-segmentni ekran. Prema specifikaciji, preporučeno napajanje je od 4 do 5.5 volti, a visoki nivo signala (logički) je najmanje 3.5V (0.7 x VCC), kada se napaja od 5V. Za kontroler K1986BE1QI (avijacija), izlaz logičke jedinice odgovara naponu od 2.8 do 3.3 V. Očigledno, postoji neusklađenost u nivoima signala koja može poremetiti normalan rad. Odlučio sam napajati MAX7221 sa 4V i smanjiti nivoe signala na 2.8V (0.7 x 4 = 2.8). Da biste to učinili, dioda D4 (RS1A ili FR103) se ugrađuje serijski u strujni krug vozača. Ukupni pad napona je 0.9V (0.3V Schottky dioda i 0.6V dioda), i sve radi.
Većina portova na mikrokontroleru K1986BE1QI (avijacija) je kompatibilna sa signalima do 5V. Stoga korištenje MCP2551 CAN primopredajnika, koji također radi od 5V, ne uzrokuje probleme. Dijagram prikazuje MAX232 čip kao RS-3232 primopredajnik, ali u stvari sam koristio SN65C3232D iz Texas Instruments, jer radi od 3.3V i pruža brzinu do 1Mbit/s.
Na ploči se nalaze 4 kvarcna rezonatora - jedan za debager (8 MHz) i tri za ciljni mikrokontroler K1986BE1QI (avijacija) sa nominalnim vrijednostima 32.768 kHz, 16 MHz, 25 MHz. To su neophodne komponente, jer. parametri ugrađenog RC generatora su u širokom rasponu od 6 do 10 MHz. Za rad ugrađenog Ethernet kontrolera potrebna je frekvencija od 25 MHz. Iz nekog razloga, Milandrina web stranica (možda greškom) navodi da u plastičnom kućištu nema Etherneta. Ali mi ćemo se osloniti na specifikacije i činjenice.
Važan poticaj za kreiranje vlastite ploče za otklanjanje grešaka bila je mogućnost rada sa eksternom EBC (eksterni bus kontroler) sistemskom magistralom, koja je u suštini paralelni port. Mikrokontroler K1986BE1QI (avijacija) omogućava vam povezivanje i rad sa eksternim memorijskim čipovima i perifernim uređajima, kao što su ADC, FPGA, itd. Mogućnosti eksterne sistemske magistrale su prilično velike - možete raditi sa 8-bitnim, 16-bitnim i 32-bitnim statičkim RAM-om, ROM-om i NAND Flash-om. Za čitanje / pisanje 32-bitnih podataka, kontroler može automatski izvršiti 2 odgovarajuće operacije za 16-bitna mikrokola i 8 operacije za 4-bitna. Očigledno, 32-bitna I/O operacija će biti najbrža sa 32-bitnom sabirnicom podataka. Nedostaci uključuju potrebu da program radi sa 32-bitnim podacima, a ploča će morati postaviti 32 staze.
SRAM čipovi, korišteni (pogodi koji je neispravan)
Balansirano rješenje je korištenje 16-bitnih memorijskih čipova. Završio sam sa čipovima Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16x256k, 10ns, 3.3V). Naravno, kompanija "Milandr" ima svoje čipove statičke memorije
Eksterna magistrala i samostalni način radaMikrokontroler K1986BE1QI (avijacija) ima jedinstveni StandAlone mod, koji je dizajniran za direktan eksterni pristup Ethernet i MCIO kontrolerima (MIL_STD_1553) preko eksterne magistrale, dok je jezgro u stanju resetovanja, tj. nije korišteno. Ovaj način rada je koristan za procesore i FPGA koji nemaju Ethernet i/ili MCIO.
Dijagram povezivanja je sljedeći:
- sabirnica podataka MCU(D0-D15) => SRAM(I/O0-I/O15),
- adresna sabirnica MCU(A1-A18) => SRAM(A0-A17),
- MCU kontrola (nWR,nRD,PortC2) => SRAM (WE,OE,CE),
- SRAM(UB,LB) su povezani ili povučeni na masu preko otpornika.
CE linija se povlači na napajanje preko otpornika, pinovi za preuzimanje bajta MCU (BE0-BE3) se ne koriste. Ispod spojlera dajem kod za inicijalizaciju portova i eksternog bus kontrolera.
Inicijalizacija portova i EBC kontrolera (eksterni bus kontroler)
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);
}
Mikrokontroler u LQFP-144 paketu i memorija u TSOP-44 paketu imaju mnogo povezanih pinova i zauzimaju puno PCB prostora. Imajući iskustva u rješavanju problema optimizacije iz oblasti ekonomije, bilo mi je očito da ova mikro kola prije svega treba postaviti na ploču. U raznim izvorima naišao sam na pohvalne kritike o
Sito štampa je važan element štampane ploče. Na ploči za otklanjanje grešaka, ne samo da moraju postojati potpisi za elektronske komponente, već i svi konektori moraju biti potpisani. Na poleđini ploče postavio sam tabele-podsjetnike sa funkcijama portova kontrolera (glavni, alternativni, nadjačani, stvarni). Naručio sam proizvodnju štampanih ploča u Kini u poznatom uredu PCBWay. Neću hvaliti jer je kvalitet dobar. Oni mogu bolje sa manjim tolerancijama, ali
Proizvedene štampane ploče MDB1986, (c) Fotografija autora
Komponente sam morao da odlemim „na koleno“ lemilom od 40 vati i POS-61 lemom, jer retko lemim, 1-2 puta godišnje, i pasta za lemljenje se osušila. Također sam morao promijeniti kineski CS32F103 kontroler u originalni STM32F103, a zatim i memoriju. Generalno, sada sam potpuno zadovoljan rezultatom, iako još nisam provjerio rad RS-232 i CAN-a.
Ploča za otklanjanje grešaka MDB1986 u radu — sija i grije, (s) Fotografija autora
Na sajtu "Milandra" možete pronaći dovoljno
Razmišljam o MilandruMikroelektronika u Rusiji se razvija, a kompanija "Milandr" igra značajnu ulogu u ovom procesu. Pojavljuju se novi zanimljivi mikrokontroleri, na primjer, 1986BE81T i Elektrosila sa SpaceWire i MKIO sučeljima (isti kao u 1986BE1 i, moguće, sa istim problemima) itd. Ali za obične studente, nastavnike i građevinske inženjere nije realno kupiti takva mikro kola. To znači da inženjerska zajednica neće moći brzo da identifikuje greške i probleme ovog čipa. Čini mi se da je prvo potrebno proizvesti mikro kola u plastičnom kućištu, distribuirati ih svim zainteresovanim stranama, a tek nakon odobrenja (lat. approbatio - odobrenje, priznanje) stručnjaci mogu pripremiti reviziju u keramičko-metalnom kućištu sa zaštitom od sve strašne faktore. Nadam se da ćemo u bliskoj budućnosti SVI biti zadovoljni novim projektima najavljenim na izložbama.
Svatko može ponoviti, modificirati i koristiti ploču za otklanjanje grešaka koju sam razvio u obrazovnom procesu. Prije svega, napravio sam ploču za sebe, ali je tako dobro ispala
K1986BE1QI (air) je vrlo zanimljiv kontroler sa jedinstvenim interfejsima koji se može koristiti na univerzitetima za podučavanje studenata. Mislim da će nakon ispravljanja grešaka uočenih u kontroloru i prolaska certifikacijskih testova, kontrolor letjeti u pravom smislu riječi!
izvor: www.habr.com