Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)

Vor einigen Jahren habe ich die russischen Mikrocontroller von Milandr kennengelernt. Es war 2013, als Ingenieure die ersten Ergebnisse des Bundesprogramms "Entwicklung der elektronischen Bauelementebasis und der Radioelektronik" für die Jahre 2008-2015 lebhaft diskutierten. Zu diesem Zeitpunkt war bereits der Controller K1986ВЕ9x (Cortex-M3-Kern) veröffentlicht worden, und gerade erst war der Controller 1986ВЕ1Т (Cortex-M1-Kern) erschienen. Letzterer hatte im Plastikgehäuse LQFP-144 die Bezeichnung K1986ВЕ1QI (Aviation) in der Dokumentation und auf dem Chip selbst die Bezeichnung MDR32F1QI. Auf der Website des Herstellers hat er das Suffix "Aviation", da er Schnittstellen bietet, die spezifisch für die Luftfahrt sind (ARINC 429, MIL_STD_1553).

Es ist erstaunlich, aber zum Zeitpunkt der Veröffentlichung dieser Controller hatte die Firma "Milandr" bereits Debugging-Sets und Programmbibliotheken zur Ansteuerung von Peripheriegeräten vorbereitet, "jedoch ohne jegliche zusätzlichen Garantien und Verpflichtungen zur Richtigkeit der Bibliothek". Die Bibliothek ähnelt der Standard Peripheral Library des Unternehmens STMicroelectronics. Insgesamt haben alle ARM-Controller, die auf dem Cortex-M-Kern basieren, viele Gemeinsamkeiten. Aus diesem Grund verlief die Einarbeitung in die neuen russischen Controller zügig. Für diejenigen, die die proprietären Debugging-Sets kauften, wurde während der Nutzung technische Unterstützung angeboten.

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)
Debugging-Set für den Mikrocontroller 1986ВЕ1Т, © Milandr

Mit der Zeit traten jedoch die "Kinderkrankheiten" neuer Chips und Bibliotheken zutage. Die Testbeispiele der Firmware funktionierten ohne sichtbare Probleme, doch bei wesentlichen Modifikationen kam es zu Abstürzen und Fehlern. Der erste "Ausreißer" in meiner Praxis waren unerklärliche Abstürze des CAN-Controllers. Ein Jahr später wurde beim Controller 1986ВЕ1Т (Luftfahrt) der frühen Revision ein Problem mit dem Modul festgestellt. МКИО (Multiplexer-Kanal für den Informationsaustausch). Insgesamt waren alle Revisionen dieser Mikrocontroller bis 2016 nur begrenzt nutzbar. Viel Zeit und Nerven wurden darauf verwendet, diese Probleme zu identifizieren, deren Bestätigung man jetzt in Fehlerlisten (Errata).

Ein unangenehmes Merkmal war, dass man die Fehler nicht auf Entwicklungsboards, sondern auf Prototypen-Platinen der Geräte, die für die Serienproduktion vorgesehen waren, untersuchen musste. Neben dem JTAG-Anschluss gab es dort normalerweise nichts. Es war schwierig und unpraktisch, sich mit einem Logikanalysator anzuschließen, und meistens fehlten LEDs und Bildschirme. Aus diesem Grund kam mir die Idee, ein eigenes Entwicklungsboard zu erstellen.

Einerseits gab es auf dem Markt kommerzielle Entwicklungssets sowie hervorragende Boards von LDM-Systems aus Zelenograd. Andererseits sind die Preise für diese Produkte schockierend, und die Grundfunktionen ohne Erweiterungsplatinen entsprechen nicht den Erwartungen. Ein Board mit einem verlöteten Mikrocontroller und einem Stiftanschluss ist für mich uninteressant. Interessantere Boards sind teuer.

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)
Entwicklungsboard MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems

Die Preisgestaltung und das Marketing des Unternehmens „Milandr“ sind einzigartig. So gibt es die Möglichkeit, kostenlos Proben einiger Mikrochips zu erhalten, jedoch ist dies nur für juristische Personen möglich und mit einem bürokratischen Prozess verbunden. Insgesamt sind die Mikrochips im metallkeramischen Gehäuse buchstäblich und im übertragenen Sinne sehr wertvoll. Beispielsweise kostet der Controller 1986VE1T in Moskau zwischen 14.000 und 24.000 Rubel. Der Mikrochip für statischen Speicher 1645RU6U kostet mindestens 15.000 Rubel. Diese Preislage gilt für die gesamte Produktpalette. Selbst spezialisierte Forschungsinstitute mit staatlichen Aufträgen sparen und scheuen sich vor solchen Preisen. Mikrochips im Kunststoffgehäuse für den zivilen Einsatz sind erheblich günstiger, aber bei den gängigen Anbietern nicht verfügbar. Zudem scheint mir die Qualität der Mikrochips im Kunststoffgehäuse schlechter zu sein als die der „goldenen“. Zum Beispiel konnte ich den Controller K1986BE1QI bei einer Frequenz von 128 MHz nicht ohne Erhöhung des Wertes für die Flash-Latenz starten. Gleichzeitig stieg die Temperatur dieses Controllers auf 40-50 °C. Hingegen startete der Controller 1986BE1T („golden“) bei 128 MHz ohne zusätzliche Einstellungen und blieb kühl. Er ist wirklich gut.

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)
Der „Gold“-Mikrocontroller 1986BE1T, (c) Milandr

Ich hatte Glück, dass der Mikrocontroller im Kunststoffgehäuse doch im Einzelhandel bei LDM Systems erhältlich ist und alle Schaltpläne frei zugänglich sind. Schlecht ist, dass auf dem Foto des Controllers auf der Website eine Kennzeichnung zu sehen ist, die besagt, dass es sich um die Revision 4 aus dem Jahr 2014 handelt, d.h. mit Mängeln. Ich habe lange überlegt – kaufen oder nicht kaufen. So vergingen mehrere Jahre…

Der Gedanke an die Erstellung einer Entwicklungsplatine ist mir nicht aus dem Kopf gegangen. Allmählich habe ich alle Anforderungen formuliert und überlegt, wie ich alles auf einer Platine platzieren kann, um es kompakt und kostengünstig zu gestalten. Parallel dazu habe ich bei Chinesen die fehlenden Komponenten bestellt. Ich hatte es nicht eilig – ich machte alles für mich. Chinesische Anbieter sind für ihre Schlampigkeit bekannt – ich musste dasselbe an verschiedenen Orten bestellen, um alles zu bekommen, was ich brauchte. Außerdem stellte sich heraus, dass einige der Speichermodule gebraucht waren – offensichtlich aus defekten Geräten herausgelötet. Das hat sich später negativ ausgewirkt.

Der Kauf des Mikrokontrollers Milandr K1986VE1QI (Aviation) ist keine einfache Aufgabe. Im selben Geschäft „Chip und Dip“ habe ich in der Kategorie „Bestellungen“ nur den K1986BE92QI für 740 Rubel gefunden, der mir jedoch nicht passte. Die einzige Option war, bei LDM-Systems eine nicht frische Revision für 2000 Rubel zu kaufen. Da ich nirgends einen Ersatz finden konnte, entschied ich mich, das zu kaufen, was verfügbar war. Zu meiner angenehmen Überraschung wurde mir ein brandneuer Controller aus Dezember 2018, Revision 6+ (1820), verkauft. Auf der Website ist jedoch weiterhin ein altes Foto zu sehen, und zum Zeitpunkt des Schreibens dieses Artikels sind keine Controller verfügbar...

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)
Mikrokontroller K1986VE1QI (Aviation) in technischer Verpackung, (c) Foto des Autors

Die wichtigsten technischen Spezifikationen meiner Entwicklungsplatine MDB1986 sind folgende:

  • eingebauter Debugger/Programmierer, kompatibel mit J-Link und CMSIS-DAP;
  • statischer Speicher 4 Mbit (256k x 16, 10 ns);
  • Flash-Speicherchip 64 Mbit, Winbond 25Q64FVSIG;
  • RS-232 Schnittstelle Transceiver mit RTS- und CTS-Leitungen;
  • Schnittstellen und Anschlüsse für Ethernet, USB, CAN;
  • Controller für 7-Segment-Displays MAX7221;
  • Stiftverbindung zum Arbeiten mit MKIO (MIL_STD_1553) und ARINC429;
  • Fototransistor Everlight PT17-21C;
  • fünf farbige LEDs, eine Reset-Taste und zwei benutzerdefinierte Tasten;
  • Stromversorgung über USB-Port mit 5 Volt;
  • Abmessungen der Platine 100 x 80 mm

Ich schätzte die STM-Discovery-Boards, weil sie einen integrierten Programmer-Debugger – ST-Link – bieten. Der proprietäre ST-Link funktioniert ausschließlich mit STMicroelectronics-Kontrollern, aber vor ein paar Jahren gab es die Möglichkeit, die Firmware von ST-Link zu aktualisieren und den SEGGER J-Link OB (on-board) Debugger zu erhalten. Rechtlich gibt es eine Einschränkung, diesen Debugger nur mit STMicroelectronics-Boards zu verwenden, aber in der Praxis ist das Potenzial nicht begrenzt. Mit J-Link OB kann man in einem Entwicklungsboard einen integrierten Programmer-Debugger haben. Ich möchte darauf hinweisen, dass in den Produkten von „LDM-Systems“ der CP2102 (Usb2Uart) Konverter verwendet wird, der nur zum Programmieren fähig ist.

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)
STM32F103C8T6 Mikrocontroller, echte und weniger echte, (c) Foto des Autors

Ich musste also den Original STM32F103C8T6 kaufen, da die offiziellen Firmware-Versionen nicht korrekt mit dem Clone arbeiten. Ich war mir über diese Aussage unsicher und beschloss, den Controller CS32F103C8T6 des chinesischen Unternehmens CKS auszuprobieren. Mit dem Controller selbst habe ich keine Einwände, aber die offizielle ST-Link-Firmware funktionierte nicht. J-Link arbeitete teilweise – das USB-Gerät wurde erkannt, aber der Programmierer erfüllte seine Funktionen nicht und erinnerte ständig daran, dass er "defective" sei.

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)
Fehler beim Arbeiten des Debuggers mit einem nicht-originalen Controller

Damit gab ich mich nicht zufrieden und schrieb zunächst eine Firmware zum Blinken einer LED und implementierte dann die IDCODE-Abfrage über das JTAG-Protokoll. Der ST-Link-Programmierer, den ich auf dem Discovery-Board hatte, und das Programm ST-Link Utility programmierten CS32F103C8T6 problemlos. Letztendlich überzeugte ich mich davon, dass mein Board funktioniert. Zu meiner Freude gab der Zielcontroller K1986ВЕ1QI (Aviation) schnell seinen IDCODE über die TDO-Leitung aus.

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)
Osziogramm der Signalleitung TDO mit dem kodierten IDCODE-Antwort, (c) Foto des Autors

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)
Hier kam der SWD-Port zur Debugging des Debuggers und zur Überprüfung des IDCODE zum Einsatz

Es gab noch die Option mit dem Debugger CMSIS-DAP (Debug Access Port). Ein Projekt aus Quellcodes für ARM zusammenzustellen, ist keine einfache Aufgabe. Ich habe das Projekt von X893übernommen und danach auch DAP42 ausprobiert. Leider hatte ich Probleme mit Keil uVision, es hat sich aufgehängt und wollte nicht funktionieren. Am Ende habe ich den Debugger-Chip gegen das originale Modell STM32F103C8T6 ausgetauscht und das Thema damit abgehakt.

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)
Die erfolgreiche Funktion des integrierten Debuggers J-Link STLink V2

Als alle wichtigen Komponenten für die zukünftige Debugging-Platine vorhanden waren, habe ich Eagle CAD geöffnet und festgestellt, dass sie nicht in der Bauteilebibliothek enthalten sind. Es blieb mir nichts anderes übrig, als sie selbst zu zeichnen. Dabei habe ich auch die Platzierungen für den Speicher, den HanRun-Anschluss für Ethernet sowie Rahmen für Widerstände und Kondensatoren hinzugefügt. Die Projektdatei und die Bauteilbibliothek sind auf meinem GitHub zu finden.

Das Schaltbild der Debugging-Platine MDB1986Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)

Die Platine wird von einer Gleichstromquelle mit 5 Volt betrieben, die über einen USB-Anschluss bereitgestellt wird. Die Platine verfügt insgesamt über zwei USB Type-B-Anschlüsse. Einer ist für den Programmierer, der andere für den K1986BE1QI-Controller. Die Platine kann von einer dieser Quellen oder von beiden gleichzeitig betrieben werden. Eine einfache Lastregelung und der Schutz der Stromversorgungsleitungen sind durch Schottky-Dioden auf den Bauteilen D2 und D3 (SS24) realisiert. Auf dem Schaltplan sind auch selbstrestaurierende Sicherungen F1 und F2 mit 500 mA zu sehen. Die Signalleitungen des USB-Ports sind durch eine USBLC6-2SC6-Diodenbaugruppe geschützt.

Der Schaltplan des ST-Link-Debuggers ist vielen bekannt und kann in der Dokumentation zu den STM32-Discovery-Platinen und anderen Quellen gefunden werden. Für das erste Flashen des ST-Link/J-Link-OB/DAP-Klons (nach Wahl) habe ich die Linien SWDIO (PA13), SWCLK (PA14) und GND herausgeführt. Viele verwenden für das Programmieren UART und müssen die BOOT-Brücken ziehen. Mir ist jedoch SWD angenehmer, da dieses Protokoll auch das Debugging ermöglicht.

Fast alle Komponenten der Platine werden mit 3,3 Volt betrieben, die von dem Spannungsregler AMS1117-3.3 bereitgestellt werden. Zur Unterdrückung elektromagnetischer Störungen und Stromstöße werden LC-Filter aus Kondensatoren und Drosseln der Serie BLM31PG eingesetzt.

Es ist erwähnenswert, dass der MAX7221 7-Segment-Display-Treiber eine empfohlene Betriebsspannung von 4 bis 5,5 Volt hat, während das High-Level-Signal (logische Eins) mindestens 3,5V (0,7 x VCC) bei einer Versorgung von 5V betragen muss. Der Ausgang des K1986ВЕ1QI (Luftfahrt) entspricht bei logischer Eins einer Spannung von 2,8 bis 3,3V. Offensichtlich gibt es eine Diskrepanz zwischen den Signalpegeln, die den ordnungsgemäßen Betrieb stören könnte. Ich habe beschlossen, den MAX7221 mit 4V zu speisen und die Signalpegel auf 2,8V (0,7 x 4 = 2,8) zu senken. Dazu wurde ein Dioden D4 (RS1A oder FR103) in die Versorgungslinie des Treibers eingebaut. Insgesamt beträgt der Spannungsabfall 0,9V (Schottky-Diode 0,3V und Diode 0,6V), und alles funktioniert.

Die meisten Ports des K1986ВЕ1QI (Luftfahrt) sind mit Signalen bis zu 5V kompatibel. Daher gibt es keine Probleme bei der Verwendung des CAN-Transceivers MCP2551, der ebenfalls mit 5V betrieben wird. In dem Schaltplan ist der MAX3232 als RS-232 Transceiver angegeben, tatsächlich habe ich jedoch den SN65C3232D von Texas Instruments verwendet, da dieser mit 3,3V betrieben wird und Geschwindigkeiten von bis zu 1Mbit/s unterstützt.

Auf der Platine befinden sich 4 Quarzoszillatoren – einer für den Debugger (8 MHz) und drei für den Zielmikrocontroller K1986VE1QI (Luftfahrt) mit Nennfrequenzen von 32.768 kHz, 16 MHz und 25 MHz. Diese Komponenten sind erforderlich, da die Parameter des integrierten RC-Generators in einem weiten Bereich von 6 bis 10 MHz liegen. Die Frequenz von 25 MHz ist notwendig für den Betrieb des integrierten Ethernet-Controllers. Auf der Website von Milandra wird (möglicherweise fälschlicherweise) angegeben, dass das Ethernet im Kunststoffgehäuse fehlt. Wir werden jedoch auf die Spezifikation und die Fakten verweisen.

Ein wesentlicher Anreiz zur Entwicklung unserer eigenen Debugging-Platine war die Möglichkeit, mit dem externen Systembus EBC (External Bus Controller) zu arbeiten, der im Grunde genommen ein paralleler Anschluss ist. Der Mikrocontroller K1986ВЕ1QI (Luftfahrt) ermöglicht den Anschluss und die Interaktion mit externen Speicherchips und Peripheriegeräten, beispielsweise ADCs, FPGAs usw. Die Möglichkeiten des externen Systembusses sind beträchtlich – er unterstützt die Arbeit mit 8-Bit, 16-Bit und 32-Bit statischen RAM, ROM und NAND Flash. Um 32-Bit-Daten zu lesen/schreiben, kann der Controller automatisch 2 entsprechende Operationen für 16-Bit-Chips und 4 für 8-Bit-Chips ausführen. Offensichtlich wird die 32-Bit-Ein- und Ausgabeoperation am schnellsten mit einem 32-Bit-Datenbus durchgeführt. Ein Nachteil ist die Notwendigkeit, in der Software mit 32-Bit-Daten zu arbeiten, und auf der Platine müssen 32 Leiterbahnen verlegt werden.

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)
Statische RAM-Chips, gebraucht (rate mal, welcher defekt ist)

Eine ausgewogene Lösung ist die Verwendung von 16-Bit-Speichermodulen. Ich habe Chips von Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16 x 256k, 10 ns, 3.3V) vorrätig. Natürlich bietet die Firma „Milandr“ eigene statische Speicherchips an, aber diese sind zu teuer und nicht verfügbar. Als Alternative gibt es Kompatible mit den Anschlüssen: Samsung K6R4016V1D. Ich hatte bereits erwähnt, dass die Chips gebraucht waren und das Exemplar, das ich ursprünglich installiert hatte, Fehler und chaotische Werte in der 15. Datenleitung lieferte. Es dauerte mehrere Tage, um die Hardwarefehler zu finden, und das Gefühl der Zufriedenheit war umso größer, als ich den defekten Chip gegen einen funktionierenden austauschte. Dennoch lässt die Geschwindigkeit des Zugriffs auf externen Speicher zu wünschen übrig. der Serie 1645РУ, aber sie sind zu teuer und nicht verfügbar. Als Alternative gibt es kompatible Lösungen von Samsung K6R4016V1D. Früher erwähnte ich, dass die Chips gebraucht waren und das Exemplar, das ich ursprünglich installiert hatte, Fehler und chaotische Werte in der 15. Datenleitung lieferte. Es dauerte mehrere Tage, um die Hardwarefehler zu finden, und die Zufriedenheit war umso größer, als ich den defekten Chip gegen einen funktionierenden austauschte. Dennoch lässt die Geschwindigkeit des Zugriffs auf externen Speicher zu wünschen übrig.

Die externe Datenbus und der StandAlone-ModusDer Mikrocontroller K1986ВЕ1QI (Aviation) hat einen einzigartigen StandAlone-Modus, der für den direkten Zugriff von extern auf Ethernet-Controller und MKIO (MIL_STD_1553) über das externe Bus-System ausgelegt ist, wobei das Kernsystem im Reset-Zustand ist, d.h. nicht verwendet wird. Dieser Modus ist praktisch für Prozessoren und FPGAs, bei denen kein Ethernet und/oder MKIO vorhanden ist.
Das Anschlussdiagramm ist wie folgt:

  • Datenbus MCU(D0-D15) => SRAM(I/O0-I/O15),
  • Adressbus MCU(A1-A18) => SRAM(A0-A17),
  • Steuerung MCU(nWR,nRD,PortC2) => SRAM (WE,OE,CE),
  • SRAM(UB,LB) sind entweder verbunden oder über einen Widerstand an Masse gezogen.

Die CE-Leitung ist über einen Widerstand an die Versorgungsspannung angeschlossen, die Ausgänge für die Byteauswahl MCU(BE0-BE3) werden nicht verwendet. Im Spoiler finden Sie den Code zur Initialisierung der Ports und des externen Buscontrollers.

Initialisierung der Ports und des 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);
	//--------------------------------------------//
	// DATEN 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);	
	//--------------------------------------------//
	// Adresse PF3-PF15 (A0..A12), A0 - nicht verwendet. //
	//--------------------------------------------//
	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);	
	//--------------------------------------------//
	// Adresse 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);	
	//--------------------------------------------//
	// Adresse PE3, PE4 (A17, A18)                //
	//--------------------------------------------//
	initStruct.PORT_FUNC      = PORT_FUNC_ALTER;
	initStruct.PORT_Pin       = PORT_Pin_3 | PORT_Pin_4;
	PORT_Init (MDR_PORTE, &initStruct);	
	//--------------------------------------------//
	// Steuerung PC0,PC1 (nWE,nOE)                  //
	//--------------------------------------------//
	initStruct.PORT_FUNC      = PORT_FUNC_MAIN;
	initStruct.PORT_Pin       = PORT_Pin_0 | PORT_Pin_1;
	PORT_Init (MDR_PORTC, &initStruct);	
	//--------------------------------------------//
	// Steuerung 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);	

	//--------------------------------------------//
	// EBC-Controller initialisieren                   //
	//--------------------------------------------//
	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);

	// RAM einschalten (nCE)
	PORT_ResetBits (MDR_PORTC, MDB_SRAM_CE);
}

Ein Mikrocontroller im LQFP-144-Gehäuse und ein Speicher im TSOP-44-Gehäuse haben viele verbundene Pins und nehmen viel Platz auf der Platine ein. Mit Erfahrung in der Lösung von Optimierungsproblemen im Bereich der Wirtschaft war mir sofort klar, dass diese Chips zuerst auf der Platine platziert werden sollten. In verschiedenen Quellen stieß ich auf lobende Bewertungen über das CAD-Tool TopoR (Topologischer Router). Ich habe die Testversion heruntergeladen und konnte mein Projekt nur dann aus Eagle CAD exportieren, als ich fast alle Komponenten entfernt hatte. Leider konnte mir das Programm TopoR nicht einmal mit 10 Komponenten helfen, die Platine anzuordnen. Zunächst wurden alle Komponenten in die Ecke platziert, dann an den Rändern verteilt. Diese Lösung entsprach nicht meinen Erwartungen, weshalb ich lange im gewohnten Umfeld von Eagle CAD manuell die Platine nachverfolgen musste.

Ein wichtiger Aspekt von Leiterplatten ist die Siebdrucktechnik. Auf der Testplatine sollten nicht nur Bezeichnungen für die elektronischen Komponenten vorhanden sein, sondern auch alle Anschlüsse sollten beschriftet sein. Auf der Rückseite der Platine habe ich Erinnerungs Tabellen mit den Funktionen der Controller-Ports (primär, alternativ, überschrieben, tatsächlich) angebracht. Die Herstellung von Leiterplatten habe ich bei einem bekannten Unternehmen in China, PCBWay, in Auftrag gegeben. Ich will es nicht übertreiben, denn die Qualität ist gut. Sie könnten es besser machen, mit geringeren Toleranzen, aber gegen Aufpreis.

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)
Die hergestellten Leiterplatten MDB1986, (c) Foto des Autors

Ich musste die Komponenten „im Stehen“ mit einem 40-Watt-Lötgerät und dem Lot ПОС-61 löten, weil ich selten löte, nur 1-2 Mal im Jahr, und das Lötpaste ausgetrocknet war. Außerdem musste ich den chinesischen Controller CS32F103 gegen den originalen STM32F103 austauschen und später auch den Speicher wechseln. Im Allgemeinen bin ich mit dem Ergebnis jetzt vollkommen zufrieden, obwohl ich die Funktionalität von RS-232 und CAN noch nicht getestet habe.

Entwicklung eines Debugging-Boards für K1986ВЕ1QI (Luftfahrt)
Die Testplatine MDB1986 in Aktion – sie leuchtet und wärmt, (c) Foto des Autors

Auf der Website von „Milandra“ kann man ausreichend Lernmaterialien zur Untersuchung von Controllern finden Serien 1986BE9 (Cortex-M3-Kern), aber für den Mikrocontroller K1986ВЕ1QI (Luftfahrt) sehe ich dort nichts. Nachdem ich die dort veröffentlichten Materialien, Handbücher und Laborarbeiten für Hochschulen durchgesehen habe, freue ich mich, dass in ganz Russland Fachkräfte für die Arbeit mit russischen Controllern ausgebildet werden. Die meisten Lehrmaterialien bereiten auf die Arbeit mit I/O-Ports, Timern, ADC, DAC, SPI, UART vor. Verschiedene Entwicklungsumgebungen (IDE) werden verwendet (Keil, IAR, CodeMaster). Manchmal wird mit CMSIS-Registern programmiert, manchmal wird die MDR-Bibliothek verwendet. Es sollte eine Ressource erwähnt werden Start Milandr, die viele Artikel von praktizierenden Programmierern enthält. Und natürlich sollte man nicht den Milandr-Forum.

Duma über MilandrDie Mikroelektronik in Russland entwickelt sich, und dabei spielt das Unternehmen „Milandr“ eine bedeutende Rolle. Es erscheinen neue interessante Mikrocontroller, wie der 1986BE81T und „Elektrosila“ mit Interfaces wie SpaceWire und MKIO (wie der 1986BE1 und möglicherweise mit denselben Problemen), usw. Doch einfache Studenten, Dozenten und Bauingenieure können solche Chips nicht wirklich erwerben. Das bedeutet, dass die Ingenieurgemeinschaft Fehler und Probleme mit diesem Chip nicht schnell identifizieren kann. Ich denke, dass es zunächst notwendig ist, Chips in Kunststoffgehäusen herzustellen, diese unter allen Interessierten zu verbreiten, und erst nach der Erprobung durch Fachleute (approbatio) eine Revision im Metallkeramikgehäuse mit Schutz against aller gefährlichen Faktoren vorzubereiten. Ich hoffe, dass wir in naher Zukunft alle mit den auf Messen angekündigten neuen Projekten erfreut werden.
Das von mir entwickelte Debugging-Board kann jeder nachbauen, modifizieren und im Unterricht verwenden. Zunächst habe ich das Board für mich selbst gemacht, aber es ist so gut gelungen, dass ich beschlossen habe, es mit allen zu teilen..

Der K1986ВЕ1QI (Luftfahrt) ist ein sehr interessanter Controller mit einzigartigen Schnittstellen, der in Hochschulen zur Ausbildung von Studierenden eingesetzt werden kann. Ich bin überzeugt, dass der Controller, nachdem die aufgeführten Fehler behoben und die Zertifizierung abgeschlossen ist, im wahrsten Sinne des Wortes abheben wird!

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster