Разработка на отладъчна платка за К1986ВЕ1QI (авиа)

Разработка на отладъчна платка за К1986ВЕ1QI (авиа)

Преди няколко години се запознах с руските микроконтролери на компанията Миландр. Това беше през 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ВЕ1QI (авиа)
Отладъчният комплект за микроконтролер 1986ВЕ1Т, © Миландр

Въпреки това, с времето започнаха да се проявяват „детските болести“ на новите микросхеми и библиотеки. Тестовите примери на фърмуерите работеха без видими проблеми, но при съществени модификации се появяваха сривове и грешки. Първото „птиче“ в моята практика бяха необяснимите сривове в работата на CAN контролера. След година на контролера 1986ВЕ1Т (авиа) от ранната ревизия беше открита проблем с модула МКИО (мултиплексен канал за информационен обмен). Като цяло, всички ревизии на тези микроконтролери до 2016 година бяха ограничено годни. Много време и нерви бяха изразходвани за откриването на тези проблеми, потвърждения на които сега могат да бъдат намерени в списъците с грешки (Errata).

Неприятната особеност беше, че трябваше да работя и да се справям с грешките не на отладъчни платки, а на прототипи на устройства, които бяха планирани за серийно производство. Освен JTAG конектора, обикновено нямаше нищо. Свързването с логически анализатор беше трудно и неудобно, а светодиодите и екраните обикновено отсъстваха. Поради тази причина ми хрумна идеята да създам собствена отладъчна платка.

От една страна, на пазара имаше фирмени отладъчни комплекти, както и страхотни платки от компанията LDM-Systems от Зеленоград. От друга страна, цените на тези изделия са шокиращи, а базовият функционал без разширителни платки не отговаря на очакванията. Платка с впечателен контролер и штифтов конектор не представлява интерес за мен. А по-интересните платки са скъпи.

Разработка на отладъчна платка за К1986ВЕ1QI (авиа)
Отладъчната платка MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems

Ценовата политика и маркетингът на фирма «Миландр» са своеобразни. Има възможност да получите безплатно проби на някои микросхеми, но това е достъпно само за юридически лица и е свързано с бюрократични препятствия. Общо микросхемите в металлокерамичен корпус са „златни“ в буквален и преносен смисъл. Например, контролерът 1986ВЕ1Т струва в Москва между 14 и 24 хиляди рубли. Микросхемата статична памет 1645РУ6У струва около 15000 рубли. И този ценови ред е приложим за цялата продукция. В крайна сметка дори профилирани НИИ с държавен поръчки икономисват и се плашат от такива цени. Микросхемите в пластмасов корпус за граждански приложения са значително по-евтини, но не са налични при популярните доставчици. Освен това, качеството на микросхемите в пластмасов корпус, както ми се струва, е по-ниско от това на „златните“. Например, не успях да стартирам контролера K1986BE1QI на честота 128МГц без увеличаване на параметъра flash latency. В същото време температурата на този контролер се повиши до 40-50°C. А контролерът 1986BE1T („златен“) се стартира на 128МГц без допълнителни настройки и оставаше хладен. Той наистина е добър.

Разработка на отладъчна платка за К1986ВЕ1QI (авиа)
«Златният» микроконтролер 1986BE1T, (с) Миландр

Имах късмет, че микроконтролерът в пластмасов корпус всъщност може да бъде купен на дребно от компанията LDM Systems, а всички схеми на платките са на разположение. Лошото е, че на сайта на снимката на контролера е видима маркировка, която показва, че това е 4-то ревизия от 2014 година, т.е. с недостатъци. Дълго се чудех – да купя ли или не. И така изминаха няколко години...

Мисълта за създаване на отладъчна платка не изчезна. Постепенно оформях всичките изисквания и се чудех как да ги поместя на едно платно, така че да бъде компактно и не скъпо. Паралелно поръчвах недостигащите компоненти от китайците. Не бързах – всичко правех за себе си. Китайските доставчици са известни с небрежността си – наложи се да поръчам едни и същи неща от различни места, за да получа всичко нужно. Освен това, част от микросхемите за памет се оказаха втора употреба – очевидно извадени от счупени устройства. Това по-късно ми изигра лоша шега.

Купуването на микроконтролер Миландр К1986ВЕ1QI (авиа) не е проста задача. В същия магазин „Чип и Дип“ в раздела «Позиции за поръчка» намерих само K1986BE92QI за 740 рубли, но той не ми подхождаше. Единственият вариант – да купя от компанията LDM-Systems стара ревизия за 2000 рубли. Тъй като не намерих заместител никъде другаде, реших да купя това, което имаше. Към моето приятно учудване ми продадоха нов контролер, произведен през декември 2018 година, ревизия 6+ (1820). А на сайта все още е старата снимка, и към момента на написването на статията контролерът не е наличен...

Разработка на отладъчна платка за К1986ВЕ1QI (авиа)
Микроконтролер К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), който може само да флашва.

Разработка на отладъчна платка за К1986ВЕ1QI (авиа)
Микроконтролерите STM32F103C8T6, истински и не толкова истински, (с) Снимка на автора

И така, необходимо беше да закупя оригиналния STM32F103C8T6, тъй като фирмените фърмуери няма да работят коректно с клона. Съмнявах се в този тезис и реших да опитам контролера CS32F103C8T6 на китайската фирма CKS. Нямам оплаквания към самия контролер, но фирменият фърмуер ST-Link не заработи с него. J-Link работеше частично – USB устройството беше разпознато, но програмистът не изпълняваше функциите си и постоянно напомняше, че е „дефектен“.

Разработка на отладъчна платка за К1986ВЕ1QI (авиа)
Грешка при работа на дебъгера с неоригинален контролер

Не се успокоих с това и първо написах фърмуер за мигане на светодиода, а след това реализирах запитване IDCODE по протокола JTAG. Програмистът ST-Link, който имах на платката Discovery, и програмата ST-Link Utility флашваха без проблеми CS32F103C8T6. В крайна сметка се убедих, че платката ми работи. За моя радост целевият контролер К1986ВЕ1QI (авиа) успешно предоставяше своя IDCODE по линията TDO.

Разработка на отладъчна платка за К1986ВЕ1QI (авиа)
Осцилограма на сигналната линия TDO с кодиран отговор IDCODE, (с) Снимка на автора

Разработка на отладъчна платка за К1986ВЕ1QI (авиа)
Ето, използваше се портът SWD за отладка на самия дебъгер и проверка на IDCODE

Оставаше вариантът с дебъгера CMSIS-DAP (Debug Access Port). Събирането на проект от изходни кодове от ARM не е лесна работа. Аз приех проекта от X893, а после опитах и DAP42. За съжаление, Keil uVision замръзваше и не искаше да работи с тях. В крайна сметка замених чипа на дебъгера с фирмения STM32F103C8T6 и повече не се връщах на този въпрос.

Разработка на отладъчна платка за К1986ВЕ1QI (авиа)
Успешна работа на вградения дебъгер J-Link STLink V2

След като всички ключови компоненти на бъдещата отладъчна платка бяха налични, влязох в Eagle CAD и установих, че ги няма в библиотеката с елементи. Нямаше как – трябваше да ги начертая сам. Веднага направих и посадъчните места за паметта, конектора HanRun за Ethernet, а за резисторите и кондензаторите добавих рамки. Файлът на проекта и библиотеката с компоненти могат да бъдат намерени при мен в GitHub.

Схема на отладъчната платка MDB1986Разработка на отладъчна платка за К1986ВЕ1QI (авиа)

Платката се захранва от източник на постоянен ток с напрежение 5 волта, който получаваме от USB порта. Общо на платката има два порта USB Type-B. Единят е за програматора, а другият е за контролера K1986BE1QI. Платката може да работи от един от тези източници или с двата едновременно. Най-простата регулация на натоварването и защита на захранващите линии са реализирани с Schottky диоди, на схемата 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В (Schottky диод 0.3В и диод 0.6В), и всичко работи.

Повечето портове на микроконтролера К1986ВЕ1QI (авиа) са съвместими със сигнали до 5V. Следователно, не възникват проблеми при използването на CAN предавател MCP2551, който също работи от 5V. На схемата за RS-232 предавател е посочен чипът MAX3232, но всъщност използвах SN65C3232D от Texas Instruments, тъй като работи от 3.3V и осигурява скорост до 1Mbit/s.

На платката са разположени 4 кварцови резонатора - един за дебъгера (8MHz) и три за целевия микроконтролер К1986ВЕ1QI (авиа) с номинали 32.768kHz, 16MHz, 25MHz. Те са необходими компоненти, тъй като параметрите на вградения RC генератор варират в широки граници от 6 до 10 MHz. Честотата от 25MHz е необходима за работа на вградения Ethernet контролер. На сайта на Миландра (вероятно по грешка) е посочено, че в пластмасовия корпус Ethernet липсва. Но ще се основаваме на спецификации и факти.

Важен стимул за създаването на собствена дебъг плоча беше възможността да работя с външната системна шина EBC (външен контролер на шина), която по същество е паралелен порт. Микроконтролерът К1986ВЕ1QI (авиа) позволява свързване и работа с външни чипове памет и периферийни устройства, като АЦП, ПЛИС и др. Възможностите на външната системна шина са значителни – може да се работи с 8-битови, 16-битови и 32-битови статични RAM, ROM и NAND Flash. За четене/запис на 32-битови данни контролерът автоматично извършва 2 съответни операции за 16-битови чипове, а за 8-битови – 4 операции. Очевидно е, че 32-битовата операция за вход/изход ще се изпълнява най-бързо с 32-битова шина за данни. Недостатъците включват необходимостта програмата да оперира с 32-битови данни, а на платката трябва да се прокарат 32 писти.

Разработка на отладъчна платка за К1986ВЕ1QI (авиа)
Чипове статична RAM, втора употреба (посочи коя има дефект)

Балансен вариант е използването на 16-битови паметни чипове. Разполагам с чипове на Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16 x 256k, 10 ns, 3.3V). Разбира се, фирмата „Миландр“ разполага със свои статични памети серия 1645РУ, но те са твърде скъпи и недостъпни. Като алтернатива, съществуват съвместими модули Samsung K6R4016V1D. По-рано споменах, че чиповете оказаха, че са вторични и единицата, която инсталирах първоначално, даваше грешки и хаотични стойности на 15-та линия данни. Отне ми няколко дни да намеря хардуерни дефекти, и радостта ми беше голяма, когато замених повредения чип с работещ. Както и да е, скоростта на работа с външната памет остава на желанията.

Външна шина и режим StandAloneМикроконтролерът К1986ВЕ1QI (авиа) разполага с уникален режим StandAlone, който е предназначен за директен достъп от външни контролери Ethernet и МКИО (MIL_STD_1553) през външната шина, като ядрото в момента е в режим на нулиране, т.е. не се използва. Този режим е удобен за процесори и FPGA, които нямат 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 (външен контролер на шина)

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 имат много свързани пинове и заемат много място на печатната платка. С опит в решаването на оптимизационни задачи в икономиката, ми беше ясно, че тези микросхеми трябва да бъдат разположени на платката на първо място. В различни източници срещнах похвални отзиви за CAD TopoR (Topological Router). Изтеглих пробната версия и успях да експортирам проекта си от Eagle CAD едва след като изтрих почти всичките компоненти. За съжаление, дори 10 елемента програмата TopoR не ми помогна да разположа на платката. Първоначално всички компоненти бяха поставени в ъгъла, а после по ръба. Тази опция не ме удовлетворяваше и дълго време извършвах трасировка на платката ръчно в познатата среда на Eagle CAD.

Важен елемент на печатната платка е шелкографията. На отладъчната платка трябва да има не само надписи на електронните компоненти, но и всички конектори трябва да бъдат надписани. На задната страна на платката разположих таблици с припомнящи функции на портовете на контролера (основна, алтернативна, преназначена, действителна). Изработването на печатни платки поръчах в Китай от известната компания PCBWay. Няма да хваля, защото качеството е добро. Те могат да направят и по-добре, с по-малки допуски, но за отделна такса.

Разработка на отладъчна платка за К1986ВЕ1QI (авиа)
Изработените печатни платки MDB1986, (с) Снимка на автора

Съединяването на компонентите се наложи да се извърши „на коляно“ с 40-ватов паялник и ПОС-61 спойка, защото паялните ми умения са редки, 1-2 пъти годишно, и спойката беше изсъхнала. Наложи се да сменя китайския контролер CS32F103 с оригиналния STM32F103 и после отново и паметта. В крайна сметка сега съм напълно удовлетворен от резултата, въпреки че все още не съм проверил работата на RS-232 и CAN.

Разработка на отладъчна платка за К1986ВЕ1QI (авиа)
Отладъчната платка MDB1986 в работа — свети и загрява, (с) Снимка на автора

На сайта на „Миландра“ може да намерите достатъчно учебни материали за изучаване на контролери серия 1986BE9 (ядро Cortex-M3), но за микроконтролера К1986ВЕ1QI (авиа) не откриваюсь никак. Прегледайки материалите, публикувани там, ръководствата и лабораторните работи за ВУЗ-ове, се радвам, че в цялата страна се подготвят кадри за работа с руски контролери. Повечето учебни материали подготвят за работа с входно-изходни портове, таймери, АЦП, ЦАП, SPI, UART. Използват се различни среди за разработка IDE (Keil, IAR, CodeMaster). Някъде програмират с регистра CMSIS, а някъде използват MDR Library. Необходимо е да се спомене ресурс Start Milandr, който съдържа много статии от практикуващи програмисти. И, разбира се, не бива да се забравя за форум Миландра.

Дума о МиландреМикроелектрониката в Русия се развива, и в този процес компанията «Миландр» играе значима роля. Появяват се нови интересни микроконтролери, например, 1986ВЕ81Т и «Електросила» с интерфейси SpaceWire и МКИО (такъв какъвто е в 1986BE1 и, може би, с подобни проблеми), и т.н. Но за обикновените студенти, преподаватели и граждански инженери е невъзможно да купят такива микросхеми. А това означава, че инженерната общност няма да може бързо да открие грешките и проблемите на тази микросхема. Смятам, че първо трябва да се издават микросхеми в пластмасов корпус, да се разпространяват между всички заинтересовани лица, а след апробацията (лат. approbatio — одобрение, признаване) от специалисти, вече да се подготвят ревизии в металокерамически корпус с защити от всички ужасни фактори. Надявам се в близкото бъдеще всички нас да ни зарадват с новите проекти, обявени на изложби.
Разработената от мен отладъчна платка може да бъде повторена, модифицирана и използвана от всеки в учебния процес. Първоначално направих платката за себе си, но стана толкова добре, че реших да споделя с всички.

К1986ВЕ1QI (авиа) – това е много интересен контролер с уникални интерфейси, който може да се използва във ВУЗ-ове за обучение на студенти. Смятам, че след поправяне на откритите в контролера грешки и преминаване на сертификационни изпитания, контролерът ще лети в пряк смисъл на думата!

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster