Разработка на отладъчна платка за К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С. А контролерът 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;
  • интерфейси и раз connectors за 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. Платката може да работи от който и да е от тези източници или с двата едновременно. Най-простата регулировка на натоварването и защитата на захранващите линии са реализирани с диоди Шотки, на схемата 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.5V (0.7 x VCC), при захранване 5V. При контролера К1986ВЕ1QI (авиация) изходът на логическа единица отговаря на напрежение от 2.8 до 3.3V. Очевидно има несъвответствие в нивата на сигналите, което може да наруши нормалната работа. Реших да захраня MAX7221 с 4V и да намаля нивата на сигналите до 2.8V (0.7 x 4 = 2.8). За това верижно в захранването на драйвера е добавен диод D4 (RS1A или FR103). В крайна сметка спадът на напрежението е 0.9V (диод Шотки 0.3V и диод 0.6V), и всичко работи.

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

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

Важно стимул за създаването на собствена отладъчна платка беше възможността да се работи с външната системна шина EBC (external bus controller), която по същество представлява паралелен порт. Микроконтролерът К1986ВЕ1QI (авиа) позволява свързване и работа с външни паметови микросхеми и периферни устройства, например, АЦП, FPGA и др. Възможностите на външната системна шина са доста големи – може да се работи с 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). Изтеглих пробната версия (trial) и успях да експортирам проекта си от 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