Некалькі гадоў таму я пазнаёміўся з расійскімі мікракантролерамі фірмы Міландр. Гэта быў 2013 год, калі інжынеры бурна абмяркоўвалі першыя вынікі ФЦП "Развіцця электроннай кампанентнай базы і радыёэлектронікі" на 2008-2015 гады. На той момант ужо быў выпушчаны кантролер К1986ВЕ9x (ядро Cortex-M3) і толькі-толькі з'явіўся кантролер 1986ВЕ1Т (ядро Cortex-M1). Ён жа ў пластыкавым корпусе LQFP-144 меў у дакументацыі абазначэнне К1986ВЕ1QI (авія), а на самай мікрасхеме абазначэнне MDR32F1QI. На сайце вытворцы ў яго варта суфікс "авія", бо ён мае інтэрфейсы спецыфічныя для авіябудавання (ARINC 429, MIL_STD_1553).
Дзіўна, але на момант распаўсюджвання гэтых кантролераў фірмай "Міландр" былі падрыхтаваны адладкавыя наборы і бібліятэка падпраграм для работы з перыферыяй, "але без якіх-небудзь дадатковых гарантый і абавязацельстваў па карэктнасці бібліятэкі". Бібліятэка падобная на Standard Peripheral Library ад кампаніі STMicroelectronics. Увогуле, усе ARM-кантролеры пабудаваныя на ядры Cortex-M маюць шмат агульнага. З гэтай прычыны азнаямленьне з новымі расейскімі кантролерамі ішло хутка. А для тых хто купляў фірмовыя адладкавыя камплекты давалася тэхнічная падтрымка падчас выкарыстанні.
Адладкавы камплект для мікракантролера 1986ВЕ1Т, © Міландр
Аднак, з цягам часу пачалі праяўляцца "дзіцячыя хваробы" новых мікрасхем і бібліятэк. Тэставыя прыклады прашывак працавалі без бачных праблем, але пры істотнай мадыфікацыі сыпаліся збоі і памылкі. Першай ластаўкай у маёй практыцы былі невытлумачальныя збоі ў працы CAN-кантролера. Праз год на кантролеры 1986ВЕ1Т (авія) ранняй рэвізіі выявілася праблема з модулем
Непрыемнай асаблівасцю было тое, што працаваць і разбірацца з памылкамі прыходзілася не на адладкавых поплатках, а на поплатках прататыпаў прыбораў, якія планаваліся для серыйнага завадскога выраба. Акрамя раздыма JTAG там звычайна нічога не было. Падключыцца лагічным аналізатарам было складана і няёмка, а святлодыёдаў і экранаў звычайна не было. Па гэтай прычыне ў мяне ў галаве з'явілася думка аб стварэнні сваёй адладкавай платы.
З аднаго боку, на рынку былі фірмовыя адладкавыя камплекты, а таксама выдатныя поплаткі ад кампаніі LDM-Systems з Зеленаграда. З іншага боку, кошты на гэтыя вырабы ўганяюць у ступар, а базавы функцыянал без поплаткаў пашырэння не адпавядае чаканням. Поплатак з разлітаваным кантролерам і штыревым раздымам не ўяўляе для мяне цікавасці. А цікавейшыя платы каштуюць дорага.
Адладкавая плата MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems
У фірмы "Міландр" коштавая палітыка і маркетынг своеасаблівыя. Так, ёсць магчымасць атрымаць бясплатна ўзоры некаторых мікрасхем, але даступна гэта толькі юрыдычным асобам і звязана з бюракратычным квэстам. У цэлым мікрасхемы ў металакерамічным корпусе з'яўляюцца залатымі ў прамым і пераносным сэнсах. Напрыклад, кантролер 1986ВЕ1Т каштуе ў Маскве ад 14 да 24 тысяч рублёў. Мікрасхема статычнай памяці 1645РУ6У каштуе ад 15000 рублёў. І такі парадак коштаў на ўсю прадукцыю. У выніку, нават профільныя НДІ з дзяржзаказам эканомяць і кідаюцца ад такіх коштаў. Мікрасхемы ў пластыкавым корпусе для грамадзянскага прымянення істотна таннейшыя, але іх няма ў наяўнасці ў папулярных пастаўшчыкоў. Акрамя таго, якасць мікрасхем у пластыкавым корпусе, як мне здаецца, горш "залатых". Напрыклад, я не змог запусціць кантролер K1986BE1QI на частаце 128Мгц без павелічэння параметра flash latency. Адначасова тэмпература гэтага кантролера паднялася да 40-50С. А вось кантролер 1986BE1T («залаты») запусціўся на 128Мгц без дадатковых налад і заставаўся лядоўням. Ён сапраўды добры.
«Залаты» мікракантролер 1986BE1T, (з) Міландр
Мне павезла, што мікракантролер у пластыкавым корпусе ўсёткі можна купіць у розніцу ў кампаніі LDM Systems, а ўсе схемы поплаткаў ёсць у вольным доступе. Дрэнна тое, што на сайце на фатаграфіі кантролера бачная маркіроўка, якая кажа, што гэта 4 рэвізія 2014 года, г.зн. з дэфектамі. Я доўга думаў - купляць ці не купляць. Так прайшло некалькі гадоў...
Думка аб стварэнні адладкавай платы нікуды не знікла. Паступова я сфарміраваў усе патрабаванні і думаў, як усё гэта размясціць на адной плаце, каб атрымалася кампактна і не дорага. Паралельна я заказваў у кітайцаў адсутнічаюць камплектуючыя. Я нікуды не спяшаўся - усё рабіў для сябе. Кітайскія пастаўшчыкі славяцца разгільдзяйствам - мне прыйшлося заказваць адно і тое ж у розных месцах, каб атрымаць усё, што трэба. Больш таго, частка мікрасхем памяці апынуліся былымі ва ўжыванні відавочна выпаянымі з зламаных прыбораў. Гэта мне пазней адгукнулася.
Купіць мікракантролер Міландр К1986ВЕ1QI (авія) - не простая задача. У той жа краме «Чып і Дып» у раздзеле «Пазіцыі на замову» я знайшоў толькі K1986BE92QI за 740 рублёў, але ён мне не падыходзіў. Адзіны варыянт - купіць у кампаніі LDM-Systems за 2000 рублёў не свежую рэвізію. Бо знайсці замену я нідзе больш не змог, то вырашыў купіць тое, што было. Да майго прыемнага здзіўлення мне прадалі новенькі кантролер выпуску снежань 2018 гады, рэвізія 6+ (1820). А на сайце да гэтага часу старая фатаграфія, і на момант напісання артыкула кантролера ў наяўнасці няма…
Мікракантролер К1986ВЕ1QI (авія) у тэхналагічным пакаванні, (з) Фота аўтара
Асноўныя тэхнічныя характарыстыкі маёй адладкавай платы MDB1986 наступныя:
- убудаваны адладчык-праграматар, сумяшчальны з J-Link і CMSIS-DAP;
- статычная памяць 4Мбіт (256k x 16, 10 ns);
- мікрасхема флэш памяці 64Мбіт, Winbond 25Q64FVSIG;
- прыёмаперадатчык інтэрфейсу RS-232 з лініямі RTS і CTS;
- інтэрфейсы і раздымы для Ethernet, USB, CAN;
- кантролер 7-сегментнага дысплея MAX7221;
- штыревой раздым для працы з МКИО (MIL_STD_1553) і ARINC429;
- фотатранзістар Everlight PT17-21C;
- пяць каляровых святлодыёдаў, кнопка скіду і дзве прыстасаваныя кнопкі;
- харчаванне ён порта USB 5 вольт;
- памеры друкаванай платы 100 х 80, мм
Мне падабаліся поплаткі серыі STM-Discovery тым, што тамака ёсць убудаваны программатор-адладчык – ST-Link. Фірмовы ST-Link працуе толькі з кантролерамі фірмы STMicroelectronics, але пару гадоў таму з'явілася магчымасць абнавіць у ST-Link прашыўку і атрымаць SEGGER J-Link OB (on-board) Debugger. Юрыдычна маецца абмежаванне на выкарыстанне такога адладчыка толькі з поплаткамі STMicroelectronics, але фактычна патэнцыял не абмежаваны. Такім чынам, маючы J-Link OB можна на адладкавай плаце мець убудаваны программатор-адладчык. Адзначу, што ў прадукцыі "LDM-Systems" выкарыстоўваецца пераўтваральнік CP2102 (Usb2Uart), які можа толькі прашываць.
Мікракантролеры STM32F103C8T6, сапраўдныя і не вельмі, (з) Фота аўтара
Такім чынам, неабходна было купіць арыгінальны STM32F103C8T6, бо фірмовыя прашыўкі не будуць карэктна працаваць з клонам. Я сумняваўся ў гэтай тэзе і вырашыў паспрабаваць у працы кантролер CS32F103C8T6 кітайскай фірмы CKS. Да самога кантролеру ў мяне прэтэнзій няма, але фірмовая прашыўка ST-Link у ім не зарабіла. J-Link працаваў часткова - USB-прылада вызначалася, але свае функцыі программатор не выконваў і ўвесь час нагадваў, што ён "defective".
Памылка пры працы адладчыка на не арыгінальным кантролеры
Я на гэтым не супакоіўся і напісаў спачатку прашыўку для мігцення святлодыёдам, а потым рэалізаваў запыт IDCODE па пратаколе JTAG. Праграматар ST-Link, які быў у мяне на плаце Discovery, і праграма ST-Link Utility прашывалі без праблем CS32F103C8T6. У выніку я пераканаўся ў тым, што мой поплатак працуе. На маю радасць мэтавай кантролер К1986ВЕ1QI (авія) бадзёра выдаваў свой IDCODE па лініі TDO.
Асцылаграма сігнальнай лініі TDO з закадаваным адказам IDCODE, (с) Фота аўтара
Вось і спатрэбіўся порт SWD для адладкі самога адладчыка і праверкі IDCODE
Заставаўся варыянт з адладчыкам
Паспяховая праца ўбудаванага адладчыка J-Link STLink V2
Калі ўсе ключавыя кампаненты будучай адладкавай платы былі ў наяўнасці, то я палез у Eagle CAD і выявіў, што іх няма ў бібліятэцы элементаў. Дзявацца няма куды - іх прыйшлося чарціць самому. Заадно я зрабіў пасадачныя месцы для памяці, раздыма HanRun для Ethernet, а для рэзістараў і кандэнсатараў дадаў рамачкі. Файл праекта і бібліятэку кампанентаў можна знайсці
Прынцыповая схема адладкавай платы MDB1986
Сілкуецца поплатак ад крыніцы сталага току напругай 5 вольт, атрымоўваных з порта USB. Усяго на плаце два порта USB Type-B. Адзін – для праграматара, другі – для кантролера K1986BE1QI. Плата можа працаваць ад любой з гэтых крыніц або з абодвума адначасова. Найпростае рэгуляванне нагрузкі і абарона ліній сілкавання рэалізаваны на дыёдах Шотткі, на схеме D2 і D3 (SS24). Таксама на схеме можна ўбачыць самааднаўляльныя засцерагальнікі F1 і F2 на 500мА. Сігнальныя лініі порта USB абаронены дыёднай зборкай USBLC6-2SC6.
Схема адладчыка-праграматара ST-Link шматлікім вядомая, яе можна знайсці ў дакументацыі на поплаткі STM32-Discovery і іншых крыніцах. Для першаснай прашыўкі клона ST-Link/J-Link-OB/DAP (на выбар) я вывеў лініі SWDIO (PA13), SWCLK (PA14), GND. Многія выкарыстоўваюць для прашыўкі UART і вымушаны тузаць перамычкі BOOT. Але мне зручней SWD, да таго ж гэты пратакол дазваляе весці адладку.
Амаль усе кампаненты поплатка сілкуюцца ад 3.3 вольт, якія паступаюць ад рэгулятара напругі AMS1117-3.3. Для падаўлення электрамагнітных перашкод і кідкоў току выкарыстоўваюцца LC-фільтры з кандэнсатараў і дроселяў серыі BLM31PG.
Асобна варта згадаць аб драйверы 7-сегментнага дысплея MAX7221. Згодна з спецыфікацыі рэкамендуемае харчаванне ад 4 да 5.5 вольт, а ўзровень высокага сігналу (лагічная адзінка) не менш за 3.5В (0.7 x VCC), пры харчаванні 5В. У кантролера К1986ВЕ1QI (авія) вынахад лагічнай адзінкі адпавядае напрузе ад 2.8 да 3.3В. Відавочна не адпаведнасць узроўняў сігналаў, якія могуць парушыць нармальную працу. Я вырашыў задаць MAX7221 ад 4В і знізіць ўзроўні сігналаў да 2.8В (0.7 x 4 = 2.8). Для гэтага паслядоўна ў ланцуг сілкавання драйвера ўсталяваны дыёд D4 (RS1A або FR103). Разам падзенне напругі складае 0.9В (дыёд Шотткі 0.3В і дыёд 0.6В), і ўсё працуе.
Большасць партоў мікракантролера К1986ВЕ1QI (авія) сумяшчальныя з сігналамі да 5В. Таму не выклікае праблем выкарыстанне CAN-прыёмаперадатчыка MCP2551, які таксама працуе ад 5В. У якасці RS-232 прыёмаперадатчыка на схеме паказана мікрасхема MAX3232, але насамрэч я выкарыстаў SN65C3232D ад кампаніі Texas Instruments, т.я. яна працуе ад 3.3В і забяспечвае хуткасць да 1Mbit/s.
На плаце размешчаны 4 кварцавых рэзанатара – адзін для адладчыка (8Мгц) і тры для мэтавага мікракантролера К1986ВЕ1QI (авія) наміналамі 32.768кГц, 16МГц, 25Мгц. Гэта неабходныя кампаненты, т.я. параметры ўбудаванага RC-генератара знаходзяцца ў вялікіх межах ад 6 да 10 Мгц. Частата 25Мгц неабходна для працы ўбудаванага Ethernet-кантролера. На сайце Міландра (магчыма, памылкова) чамусьці пазначана, што ў пластыкавым корпусе Ethernet адсутнічае. Але мы будзем абапірацца на спецыфікацыю і факты.
Важным стымулам для стварэння сваёй адладкавай платы была магчымасць папрацаваць з вонкавай сістэмнай шынай EBC (external bus controller), якая ў сутнасці з'яўляецца паралельным портам. Мікракантролер К1986ВЕ1QI (авія) дазваляе падлучаць і працаваць з вонкавымі мікрасхемамі памяці і перыферыйнымі прыладамі, напрыклад, АЛП, Пліс і г.д. Магчымасці вонкавы сістэмнай шыны досыць вялікія – можна працаваць з 8-бітнымі, 16-бітнымі і 32-бітнымі статычнымі АЗП, ПЗУ і NAND Flash. Для счытвання / запісы 32-бітных дадзеных кантролер умее аўтаматычна выконваць 2 адпаведныя аперацыі для 16-бітных мікрасхем, а для 8-бітных - 4 аперацыі. Відавочна, што 32-бітная аперацыя ўводу-высновы выканаецца хутчэй за ўсё з 32-бітнай шынай дадзеных. Да недахопаў можна аднесці неабходнасць у праграме апераваць 32-бітнымі дадзенымі, а на плаце давядзецца пракласці 32 дарожкі.
Мікрасхемы статычнага АЗП, б/к (угадай якая з дэфектам)
Збалансаваным рашэннем з'яўляецца выкарыстанне 16-бітных мікрасхем памяці. У мяне аказаліся ў наяўнасці мікрасхемы Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16 x 256k, 10 ns, 3.3V). Вядома, у фірмы "Міландра" ёсць свае мікрасхемы статычнай памяці.
Вонкавая шына і рэжым StandAloneМікракантролер К1986ВЕ1QI (авія) мае ўнікальны рэжым StandAlone, які прызначаны для прамога доступу звонку да кантролераў Ethernet і МКИО (MIL_STD_1553) па вонкавай шыне, прычым ядро знаходзіцца ў стане скіду, г.зн. не выкарыстоўваецца. Гэты рэжым зручны для працэсараў і Пліса, у якіх няма Ethernet і / або МКИО.
Схема падлучэння наступная:
- шына дадзеных MCU(D0-D15) => SRAM(I/O0-I/O15),
- шына адрасы MCU(A1-A18) => SRAM(A0-A17),
- кіраванне MCU(nWR,nRD,PortC2) => SRAM (WE,OE,CE),
- SRAM(UB,LB) падлучаныя або падцягнуты да зямлі праз рэзістар.
Лінія CE падцягнутая да сілкавання праз рэзістар, высновы для выбаркі байта MCU(BE0-BE3) не выкарыстоўваюцца. Пад спойлерам прыводжу код ініцыялізацыі партоў і кантролера знешняй шыны.
Ініцыялізацыя партоў і кантролера EBC (external bus controller)
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);
}
Мікракантролер у корпусе LQFP-144 і памяць у корпусе TSOP-44 маюць шмат звязаных высноў і займаюць шмат месца на друкаваным поплатку. Маючы за плячыма вопыт вырашэння аптымізацыйных задач у галіне эканомікі, мне было відавочна, што размяшчаць на плаце гэтыя мікрасхемы неабходна ў першую чаргу. У розных крыніцах мне сустракаліся хвалебныя водгукі аб
Важным элементам друкаванай платы з'яўляецца шаўкаграфія. На адладкавай плаце павінны быць не толькі подпісы да электронных кампанентаў, але і ўсе раздымы павінны быць падпісаны. На адваротным баку платы я размясціў табліцы-напамінкі з функцыямі партоў кантролера (асноўная, альтэрнатыўная, перавызначаная, фактычная). Выраб друкаваных поплаткаў я замовіў у Кітаі ва ўсім вядомай канторы PCBWay. Хваліць не буду, таму што якасць добрая. Яны могуць зрабіць лепш, з меншымі допускамі, але
Вырабленыя друкаваныя платы MDB1986, (с) Фота аўтара
Разорваць кампаненты прыйшлося «на каленцы» паяльнікам 40-ват і прыпоем пас-61, таму што паяю я рэдка, 1-2 разы на год, і паяльная паста засохла. Прыйшлося яшчэ мяняць кітайскі кантролер CS32F103 на арыгінальны STM32F103, а потым яшчэ і памяць замяніць. Увогуле зараз мяне вынік цалкам задавальняе, хоць яшчэ не праверыў працу RS-232 і CAN.
Адладкавая плата MDB1986 у працы - свеціць і грэе, (з) Фота аўтара
На сайце «Міландра» можна знайсці дастаткова
Дума пра МіландруМікраэлектроніка ў Расіі развіваецца, і ў гэтым працэсе кампанія "Міландр" гуляе прыкметную ролю. З'яўляюцца новыя цікавыя мікракантролеры, напрыклад, 1986ВЕ81Т і "Электрасіла" з інтэрфейсамі SpaceWire і МКИО (такі ж як у 1986BE1 і, магчыма, з тымі ж праблемамі), і г.д. Але простым студэнтам, выкладчыкам і грамадзянскім інжынерам купіць такія мікрасхемы не рэальна. А значыць, супольнасць інжынераў не зможа хутка выявіць памылкі і праблемы гэтай мікрасхемы. Мне здаецца, што спачатку неабходна выпускаць мікрасхемы ў пластыкавым корпусе, распаўсюджваць сярод усіх зацікаўленых асоб, а ўжо пасля апрабацыі (лац. approbatio - ухвала, прызнанне) спецыялістамі можна рыхтаваць рэвізію ў металакерамічным корпусе з абаронамі ад усіх страшных фактараў. Спадзяюся ў найбліжэйшай будучыні нас УСІХ парадуюць заяўленымі на выставах новымі праектамі.
Распрацаваную мной адладкавую плату любы можа паўтарыць, мадыфікаваць і выкарыстоўваць у навучальным працэсе. У першую чаргу я рабіў поплатак для сябе, але атрымалася настолькі добра, што
К1986ВЕ1QI (авія) - гэта вельмі цікавы кантролер з унікальнымі інтэрфейсамі, які можа выкарыстоўвацца ў ВНУ для навучання студэнтаў. Думаю, што пасля выпраўлення выяўленых у кантролеры памылак і мінанні сертыфікацыйных выпрабаванняў, кантролер паляціць у прамым сэнсе гэтага слова!
Крыніца: habr.com