
Πριν από αρκετά χρόνια γνώρισα τους Ρώσους μικροελεγκτές της εταιρείας Milandr. Ήταν το 2013, όταν οι μηχανικοί συζητούσαν με θέρμη τα πρώτα αποτελέσματα του Ομοσπονδιακού Προγράμματος-Στόχου «Ανάπτυξη της Βάσης Ηλεκτρονικών Εξαρτημάτων και των Ραδιοηλεκτρονικών» για την περίοδο 2008-2015. Εκείνη την εποχή, ο ελεγκτής K1986BE9x (πυρήνας Cortex-M3) είχε ήδη κυκλοφορήσει και ο ελεγκτής 1986BE1T (πυρήνας Cortex-M1) μόλις είχε εμφανιστεί. Στην πλαστική θήκη LQFP-144, είχε την ονομασία K1986BE1QI (αεροπορία) στην τεκμηρίωση και στο ίδιο το μικροκύκλωμα την ονομασία MDR32F1QI. Στην ιστοσελίδα του κατασκευαστή έχει την κατάληξη "avia" επειδή διαθέτει διεπαφές ειδικές για την αεροναυπηγική βιομηχανία (ARINC 429, MIL_STD_1553).
Παραδόξως, κατά τη στιγμή της διανομής αυτών των ελεγκτών, ο Milandr είχε ετοιμάσει κιτ εντοπισμού σφαλμάτων και μια βιβλιοθήκη υπορουτινών για την εργασία με την περιφερειακή μονάδα, «αλλά χωρίς πρόσθετες εγγυήσεις ή υποχρεώσεις σχετικά με την ορθότητα της βιβλιοθήκης». Η βιβλιοθήκη είναι παρόμοια με την Standard Peripheral Library της STMicroelectronics. Γενικά, όλοι οι ελεγκτές ARM που είναι κατασκευασμένοι στον πυρήνα Cortex-M έχουν πολλά κοινά. Για αυτόν τον λόγο, η εξοικείωση με τους νέους Ρώσους ελεγκτές προχώρησε γρήγορα. Και για όσους αγόρασαν επώνυμα κιτ εντοπισμού σφαλμάτων, παρέχονταν τεχνική υποστήριξη κατά τη χρήση.

Κιτ εντοπισμού σφαλμάτων για μικροελεγκτή 1986BE1T, © Milandr
Ωστόσο, με την πάροδο του χρόνου, άρχισαν να εμφανίζονται τα «προβλήματα οδοντοφυΐας» των νέων μικροκυκλωμάτων και βιβλιοθηκών. Τα παραδείγματα δοκιμαστικού υλικολογισμικού λειτούργησαν χωρίς ορατά προβλήματα, αλλά με σημαντικές τροποποιήσεις, άρχισαν να εμφανίζονται σφάλματα και διακοπές λειτουργίας. Το πρώτο «χελιδόνι» στην πρακτική μου ήταν ανεξήγητες βλάβες στη λειτουργία του ελεγκτή CAN. Ένα χρόνο αργότερα, ανακαλύφθηκε ένα πρόβλημα με την ενότητα στον ελεγκτή 1986BE1T (avia) της πρώιμης αναθεώρησης. . Γενικά, όλες οι αναθεωρήσεις αυτών των μικροελεγκτών πριν από το 2016 είχαν περιορισμένη χρήση. Πολύς χρόνος και νεύρα δαπανήθηκαν για τον εντοπισμό αυτών των προβλημάτων, η επιβεβαίωση των οποίων μπορεί τώρα να βρεθεί στο .
Ένα δυσάρεστο χαρακτηριστικό ήταν ότι η εργασία και η αντιμετώπιση προβλημάτων έπρεπε να γίνονται όχι σε πλακέτες εντοπισμού σφαλμάτων, αλλά σε πλακέτες πρωτότυπων συσκευών που είχαν προγραμματιστεί για σειριακή παραγωγή στο εργοστάσιο. Εκτός από την υποδοχή JTAG, συνήθως δεν υπήρχε τίποτα εκεί. Η σύνδεση με έναν λογικό αναλυτή ήταν δύσκολη και άβολη και συνήθως δεν υπήρχαν LED ή οθόνες. Για αυτόν τον λόγο, μου ήρθε η ιδέα να δημιουργήσω τον δικό μου πίνακα εντοπισμού σφαλμάτων.
Από τη μία πλευρά, υπήρχαν στην αγορά επώνυμα κιτ εντοπισμού σφαλμάτων, καθώς και υπέροχες πλακέτες από την LDM-Systems από το Zelenograd. Από την άλλη πλευρά, οι τιμές για αυτά τα προϊόντα είναι εξωφρενικές και η βασική λειτουργικότητα χωρίς κάρτες επέκτασης δεν ανταποκρίνεται στις προσδοκίες. Η πλακέτα με τον συγκολλημένο ελεγκτή και την υποδοχή ακίδων δεν με ενδιαφέρει. Και οι πιο ενδιαφέρουσες σανίδες είναι ακριβές.

Πλακέτα εντοπισμού σφαλμάτων MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems
Η εταιρεία Milandr έχει μια μοναδική τιμολογιακή πολιτική και μάρκετινγκ. Έτσι, είναι δυνατό να λάβετε δωρεάν δείγματα ορισμένων μικροκυκλωμάτων, αλλά αυτό είναι διαθέσιμο μόνο σε νομικά πρόσωπα και συνδέεται με μια γραφειοκρατική αναζήτηση. Γενικά, τα μικροκυκλώματα σε μεταλλοκεραμική θήκη είναι χρυσά με την κυριολεκτική και μεταφορική έννοια. Για παράδειγμα, ο ελεγκτής 1986BE1T κοστίζει από 14 έως 24 χιλιάδες ρούβλια στη Μόσχα. Το στατικό τσιπ μνήμης 1645RU6U κοστίζει από 15000 ρούβλια. Και αυτή είναι η σειρά τιμών για όλα τα προϊόντα. Ως αποτέλεσμα, ακόμη και εξειδικευμένα ερευνητικά ιδρύματα με κυβερνητικές συμβάσεις κάνουν οικονομία και αποφεύγουν τέτοιες τιμές. Τα μικροκυκλώματα σε πλαστικό περίβλημα για πολιτική χρήση είναι σημαντικά φθηνότερα, αλλά δεν είναι διαθέσιμα από δημοφιλείς προμηθευτές. Επιπλέον, η ποιότητα των μικροκυκλωμάτων σε μια πλαστική θήκη, κατά τη γνώμη μου, είναι χειρότερη από τις "χρυσές". Για παράδειγμα, δεν μπόρεσα να κάνω τον ελεγκτή K1986BE1QI να λειτουργεί στα 128MHz χωρίς να αυξήσω την παράμετρο καθυστέρησης φλας. Ταυτόχρονα, η θερμοκρασία αυτού του ελεγκτή αυξήθηκε στους 40-50C. Αλλά ο ελεγκτής 1986BE1T ("χρυσός") ξεκίνησε στα 128 MHz χωρίς πρόσθετες ρυθμίσεις και παρέμεινε κρύος. Είναι πραγματικά καλός.

"Χρυσός" μικροελεγκτής 1986BE1T, (c) Milandr
Ήμουν τυχερός που ο μικροελεγκτής σε πλαστική θήκη μπορεί ακόμα να αγοραστεί σε λιανική τιμή από την LDM Systems και όλα τα σχηματικά της πλακέτας είναι ελεύθερα διαθέσιμα. Το κακό είναι ότι στην ιστοσελίδα, στη φωτογραφία του χειριστηρίου, μπορείτε να δείτε σημάνσεις που λένε ότι αυτή είναι η 4η αναθεώρηση του 2014, δηλαδή με ελαττώματα. Σκεφτόμουν για πολύ καιρό αν θα το αγοράσω ή όχι. Έτσι πέρασαν αρκετά χρόνια...
Η ιδέα της δημιουργίας ενός πίνακα εντοπισμού σφαλμάτων δεν έχει εξαφανιστεί. Σταδιακά, διαμόρφωσα όλες τις απαιτήσεις και σκέφτηκα πώς να τοποθετήσω όλα αυτά σε ένα χαρτόνι, ώστε να είναι συμπαγές και φθηνό. Ταυτόχρονα, παρήγγειλα τα εξαρτήματα που έλειπαν από τους Κινέζους. Δεν βιαζόμουν – έκανα τα πάντα μόνος μου. Οι Κινέζοι προμηθευτές είναι γνωστοί για την απερισκεψία τους - έπρεπε να παραγγείλω το ίδιο πράγμα από διαφορετικά μέρη για να πάρω όλα όσα χρειαζόμουν. Επιπλέον, αποδείχθηκε ότι ορισμένα από τα τσιπ μνήμης ήταν χρησιμοποιημένα – προφανώς συγκολλημένα από χαλασμένες συσκευές. Αυτό με στοιχείωσε ξανά αργότερα.
Η αγορά ενός μικροελεγκτή Milandr K1986BE1QI (αεροπορία) δεν είναι εύκολη υπόθεση. Στο ίδιο κατάστημα Chip and Dip, στην ενότητα "Προϊόντα προς παραγγελία", βρήκα μόνο το K1986BE92QI για 740 ρούβλια, αλλά δεν μου ταίριαζε. Η μόνη επιλογή είναι να αγοράσετε μια όχι και τόσο νέα αναθεώρηση από την LDM-Systems για 2000 ρούβλια. Αφού δεν μπορούσα να βρω αντικατάσταση πουθενά αλλού, αποφάσισα να αγοράσω ό,τι υπήρχε διαθέσιμο. Προς ευχάριστη έκπληξή μου, μου πουλήθηκε ένα ολοκαίνουργιο χειριστήριο, κατασκευασμένο τον Δεκέμβριο του 2018, έκδοση 6+ (1820). Και ο ιστότοπος έχει ακόμα μια παλιά φωτογραφία, και κατά τη στιγμή της σύνταξης αυτού του κειμένου ο ελεγκτής δεν είναι διαθέσιμος...

Μικροελεγκτής K1986BE1QI (αεροπορία) σε τεχνολογική συσκευασία, (c) Φωτογραφία από τον συγγραφέα
Κύρια τεχνικά χαρακτηριστικά της πλακέτας ανάπτυξής μου MDB1986 τα ακόλουθα:
- ενσωματωμένος προγραμματιστής εντοπισμού σφαλμάτων συμβατός με J-Link και CMSIS-DAP.
- στατική μνήμη 4Mbit (256k x 16, 10 ns);
- Τσιπ μνήμης flash 64Mbit, Winbond 25Q64FVSIG;
- Πομποδέκτης διασύνδεσης RS-232 με γραμμές RTS και CTS.
- διεπαφές και υποδοχές για Ethernet, USB, CAN;
- Ελεγκτής οθόνης 7 τμημάτων MAX7221;
- σύνδεσμος ακίδων για λειτουργία με MICO (MIL_STD_1553) και ARINC429;
- φωτοτρανζίστορ Everlight PT17-21C;
- πέντε έγχρωμες λυχνίες LED, κουμπί επαναφοράς και δύο κουμπιά χρήστη.
- Η τροφοδοσία από τη θύρα USB είναι 5 βολτ.
- Διαστάσεις πλακέτας τυπωμένου κυκλώματος 100 x 80, mm
Μου άρεσαν οι πλακέτες της σειράς STM-Discovery επειδή έχουν ενσωματωμένο προγραμματιστή-αποσφαλματωτή – ST-Link. Το ιδιόκτητο ST-Link λειτουργεί μόνο με ελεγκτές της STMicroelectronics, αλλά πριν από μερικά χρόνια κατέστη δυνατή η ενημέρωση του υλικολογισμικού στο ST-Link και η λήψη του ενσωματωμένου (on-board) Debugger του SEGGER J-Link OB. Υπάρχει νομικός περιορισμός στη χρήση ενός τέτοιου εργαλείου εντοπισμού σφαλμάτων μόνο με πλακέτες STMicroelectronics, αλλά στην πραγματικότητα οι δυνατότητες είναι απεριόριστες. Έτσι, έχοντας το J-Link OB, είναι δυνατό να έχετε ενσωματωμένο προγραμματιστή-αποσφαλματωτή στην πλακέτα εντοπισμού σφαλμάτων. Θα ήθελα να σημειώσω ότι τα προϊόντα LDM-Systems χρησιμοποιούν τον μετατροπέα CP2102 (Usb2Uart), ο οποίος μπορεί μόνο να αναβοσβήνει.

Μικροελεγκτές STM32F103C8T6, πραγματικοί και μη, (c) Φωτογραφία από τον συγγραφέα
Έτσι, ήταν απαραίτητο να αγοράσω το αρχικό STM32F103C8T6, καθώς το ιδιόκτητο υλικολογισμικό δεν θα λειτουργήσει σωστά με τον κλώνο. Αμφισβήτησα αυτή τη διατριβή και αποφάσισα να δοκιμάσω τον ελεγκτή CS32F103C8T6 από την κινεζική εταιρεία CKS. Δεν έχω παράπονα για τον ίδιο τον ελεγκτή, αλλά το ιδιόκτητο firmware ST-Link δεν λειτούργησε σε αυτό. Το J-Link λειτούργησε μερικώς - η συσκευή USB εντοπίστηκε, αλλά ο προγραμματιστής δεν εκτέλεσε τις λειτουργίες της και υπενθύμιζε συνεχώς ότι ήταν "ελαττωματική".

Σφάλμα κατά την εκτέλεση του προγράμματος εντοπισμού σφαλμάτων σε μη αρχικό ελεγκτή
Δεν σταμάτησα εκεί και πρώτα έγραψα firmware για να αναβοσβήνει η λυχνία LED και στη συνέχεια υλοποίησα το αίτημα IDCODE μέσω του πρωτοκόλλου JTAG. Ο προγραμματιστής ST-Link που είχα στην πλακέτα Discovery και το πρόγραμμα ST-Link Utility έκαναν flashing στο CS32F103C8T6 χωρίς κανένα πρόβλημα. Ως αποτέλεσμα, ήμουν πεπεισμένος ότι η σανίδα μου λειτουργεί. Προς μεγάλη μου χαρά, ο ελεγκτής στόχων K1986BE1QI (αεροσκάφος) εξέδωσε χαρούμενα τον κωδικό αναγνώρισης (IDCODE) μέσω της γραμμής TDO.

Παλμογράφο της γραμμής σήματος TDO με κωδικοποιημένη απόκριση IDCODE, (c) Φωτογραφία από τον συγγραφέα

Έτσι, η θύρα SWD ήταν χρήσιμη για τον εντοπισμό σφαλμάτων στο ίδιο το πρόγραμμα εντοπισμού σφαλμάτων και τον έλεγχο του IDCODE.
Η μόνη επιλογή που έμενε ήταν με ένα πρόγραμμα εντοπισμού σφαλμάτων. . Η δημιουργία ενός έργου από πηγές ARM δεν είναι εύκολη υπόθεση, πήρα το έργο από και μετά δοκίμασα το DAP42. Δυστυχώς, η Keil uVision πάγωσε και δεν ήθελε να συνεργαστεί μαζί τους. Ως αποτέλεσμα, αντικατέστησα το τσιπ εντοπισμού σφαλμάτων με ένα ιδιόκτητο STM32F103C8T6 και δεν επέστρεψα ποτέ ξανά σε αυτό το ζήτημα.

Επιτυχής λειτουργία του ενσωματωμένου προγράμματος εντοπισμού σφαλμάτων J-Link STLink V2
Μόλις είχα όλα τα βασικά στοιχεία της μελλοντικής πλακέτας ανάπτυξης σε απόθεμα, μπήκα στο Eagle CAD και ανακάλυψα ότι δεν υπήρχαν στη βιβλιοθήκη στοιχείων. Δεν υπήρχε άλλη επιλογή - έπρεπε να τα ζωγραφίσω μόνος μου. Ταυτόχρονα, έφτιαξα θέσεις προσγείωσης για μνήμη, μια υποδοχή HanRun για Ethernet και πρόσθεσα πλαίσια για αντιστάσεις και πυκνωτές. Το αρχείο έργου και η βιβλιοθήκη στοιχείων μπορούν να βρεθούν .
Σχηματικό διάγραμμα της πλακέτας εντοπισμού σφαλμάτων MDB1986
Η πλακέτα τροφοδοτείται από μια πηγή συνεχούς ρεύματος 5 βολτ που λαμβάνεται από τη θύρα USB. Υπάρχουν δύο θύρες USB Type-B στην πλακέτα. Το ένα είναι για τον προγραμματιστή, το δεύτερο είναι για τον ελεγκτή K1986BE1QI. Ο πίνακας μπορεί να λειτουργεί από οποιαδήποτε από αυτές τις πηγές ή και από τις δύο ταυτόχρονα. Η απλούστερη ρύθμιση φορτίου και η προστασία της γραμμής ισχύος υλοποιούνται χρησιμοποιώντας διόδους Schottky, στο κύκλωμα D2 και D3 (SS24). Επίσης στο διάγραμμα μπορείτε να δείτε τις αυτο-αποκαταστατικές ασφάλειες F1 και F2 για 500 mA. Οι γραμμές σήματος της θύρας USB προστατεύονται από το συγκρότημα διόδου USBLC6-2SC6.
Το κύκλωμα εντοπισμού σφαλμάτων-προγραμματιστή ST-Link είναι γνωστό σε πολλούς. Μπορεί να βρεθεί στην τεκμηρίωση για τις πλακέτες STM32-Discovery και σε άλλες πηγές. Για το αρχικό firmware του κλώνου ST-Link/J-Link-OB/DAP (προαιρετικό), έβγαλα τις γραμμές SWDIO (PA13), SWCLK (PA14), GND. Πολλοί άνθρωποι χρησιμοποιούν UART για firmware και αναγκάζονται να τραβούν jumpers BOOT. Αλλά θεωρώ το SWD πιο βολικό, και αυτό το πρωτόκολλο επιτρέπει επίσης τον εντοπισμό σφαλμάτων.
Σχεδόν όλα τα εξαρτήματα στην πλακέτα τροφοδοτούνται από 3.3 βολτ, τα οποία προέρχονται από τον ρυθμιστή τάσης AMS1117-3.3. Για την καταστολή των ηλεκτρομαγνητικών παρεμβολών και των υπερτάσεων ρεύματος, χρησιμοποιούνται φίλτρα LC κατασκευασμένα από πυκνωτές και στραγγαλιστικά πηνία της σειράς BLM31PG.
Αξίζει να αναφερθεί ξεχωριστά το πρόγραμμα οδήγησης οθόνης 7 τμημάτων MAX7221. Σύμφωνα με τις προδιαγραφές, η συνιστώμενη τροφοδοσία ρεύματος είναι από 4 έως 5.5 βολτ και η υψηλή στάθμη σήματος (λογική) δεν είναι μικρότερη από 3.5 V (0.7 x VCC), με τροφοδοσία ρεύματος 5 V. Ο ελεγκτής K1986BE1QI (avia) έχει μια λογική έξοδο που αντιστοιχεί σε τάση 2.8 έως 3.3V. Υπάρχει μια προφανής αναντιστοιχία στα επίπεδα σήματος που θα μπορούσε να διαταράξει την κανονική λειτουργία. Αποφάσισα να τροφοδοτήσω το MAX7221 από 4V και να μειώσω τα επίπεδα σήματος στα 2.8V (0.7 x 4 = 2.8). Για το σκοπό αυτό, η δίοδος D4 (RS1A ή FR103) εγκαθίσταται σε σειρά στο κύκλωμα τροφοδοσίας του οδηγού. Η συνολική πτώση τάσης είναι 0.9V (δίοδος Schottky 0.3V και δίοδος 0.6V) και όλα λειτουργούν κανονικά.
Οι περισσότερες θύρες του μικροελεγκτή K1986BE1QI (αεροπορίας) είναι συμβατές με σήματα έως και 5V. Επομένως, δεν υπάρχουν προβλήματα με τη χρήση του πομποδέκτη CAN MCP2551, ο οποίος λειτουργεί επίσης από 5V. Ο πομποδέκτης RS-232 στο σχηματικό είναι ο MAX3232, αλλά στην πραγματικότητα χρησιμοποίησα τον SN65C3232D από την Texas Instruments επειδή λειτουργεί στα 3.3V και παρέχει ταχύτητες έως και 1Mbit/s.
Η πλακέτα περιέχει 4 συντονιστές χαλαζία - έναν για τον εντοπιστή σφαλμάτων (8 MHz) και τρεις για τον μικροελεγκτή-στόχο K1986BE1QI (αεροπορία) με τις ακόλουθες ονομαστικές τιμές: 32.768 kHz, 16 MHz, 25 MHz. Αυτά είναι απαραίτητα εξαρτήματα επειδή οι παράμετροι της ενσωματωμένης γεννήτριας RC κυμαίνονται σε ένα ευρύ φάσμα από 6 έως 10 MHz. Για τη λειτουργία του ενσωματωμένου ελεγκτή Ethernet απαιτείται συχνότητα 25 MHz. Στην ιστοσελίδα της Milandra (πιθανώς κατά λάθος) για κάποιο λόγο αναφέρεται ότι δεν υπάρχει Ethernet στην πλαστική θήκη. Αλλά θα βασιστούμε στις προδιαγραφές και στα γεγονότα.
Ένα σημαντικό κίνητρο για τη δημιουργία της δικής μου πλακέτας εντοπισμού σφαλμάτων ήταν η ευκαιρία να συνεργαστώ με τον εξωτερικό δίαυλο συστήματος EBC (εξωτερικός ελεγκτής διαύλου), ο οποίος ουσιαστικά είναι μια παράλληλη θύρα. Ο μικροελεγκτής K1986BE1QI (avia) σας επιτρέπει να συνδέεστε και να εργάζεστε με εξωτερικά τσιπ μνήμης και περιφερειακές συσκευές, όπως ADC, FPGA κ.λπ. Οι δυνατότητες του εξωτερικού διαύλου συστήματος είναι αρκετά μεγάλες - μπορείτε να εργαστείτε με στατική μνήμη RAM 8-bit, 16-bit και 32-bit, ROM και NAND Flash. Για την ανάγνωση/εγγραφή δεδομένων 32-bit, ο ελεγκτής μπορεί να εκτελέσει αυτόματα 2 αντίστοιχες λειτουργίες για μικροκυκλώματα 16-bit και 8 λειτουργίες για μικροκυκλώματα 4-bit. Προφανώς, μια λειτουργία εισόδου/εξόδου 32-bit θα εκτελεστεί ταχύτερα με έναν δίαυλο δεδομένων 32-bit. Τα μειονεκτήματα περιλαμβάνουν την ανάγκη το πρόγραμμα να λειτουργεί με δεδομένα 32-bit και η πλακέτα θα πρέπει να τοποθετηθεί με 32 κομμάτια.

Χρησιμοποιημένα στατικά τσιπ RAM (μαντέψτε ποιο είναι ελαττωματικό)
Μια ισορροπημένη λύση είναι η χρήση τσιπ μνήμης 16-bit. Έχω σε απόθεμα τσιπ από την Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16 x 256k, 10 ns, 3.3V). Φυσικά, το Milandr έχει τα δικά του στατικά τσιπ μνήμης. , αλλά είναι πολύ ακριβά και μη διαθέσιμα. Εναλλακτικά, υπάρχουν τα Samsung K6R4016V1D συμβατά με pin. Νωρίτερα ανέφερα ότι τα τσιπ αποδείχθηκαν χρησιμοποιημένα και το αντίγραφο που εγκατέστησα αρχικά έδωσε αποτυχίες και χαοτικές τιμές στην 15η γραμμή δεδομένων. Χρειάστηκαν αρκετές μέρες για να βρω σφάλματα υλικού και το αίσθημα ικανοποίησης ήταν ακόμη μεγαλύτερο όταν αντικατέστησα το κατεστραμμένο τσιπ με ένα λειτουργικό. Όπως και να 'χει, η ταχύτητα εργασίας με εξωτερική μνήμη αφήνει πολλά να είναι επιθυμητή.
Εξωτερικός δίαυλος και λειτουργία StandAloneΟ μικροελεγκτής K1986BE1QI (αεροπορίας) διαθέτει μια μοναδική λειτουργία StandAlone, η οποία έχει σχεδιαστεί για άμεση εξωτερική πρόσβαση στους ελεγκτές Ethernet και MKIO (MIL_STD_1553) μέσω εξωτερικού διαύλου, με τον πυρήνα σε κατάσταση επαναφοράς, δηλαδή να μην χρησιμοποιείται. Αυτή η λειτουργία είναι βολική για επεξεργαστές και FPGA που δεν διαθέτουν Ethernet ή/και MICRO.
Το διάγραμμα σύνδεσης έχει ως εξής:
- Δίαυλος δεδομένων 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 τροφοδοτείται μέσω μιας αντίστασης, οι ακροδέκτες δειγματοληψίας byte της MCU (BE0-BE3) δεν χρησιμοποιούνται. Κάτω από το spoiler παρέχω τον κώδικα για την αρχικοποίηση των θυρών και του εξωτερικού ελεγκτή διαύλου.
Αρχικοποίηση θυρών και 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 σε πακέτο έχουν πολλές διασυνδεδεμένες ακίδες και καταλαμβάνουν πολύ χώρο στην πλακέτα τυπωμένου κυκλώματος. Έχοντας εμπειρία στην επίλυση προβλημάτων βελτιστοποίησης στον τομέα των οικονομικών, ήταν προφανές για μένα ότι ήταν απαραίτητο να τοποθετήσω αυτά τα μικροκυκλώματα στην πλακέτα πρώτα απ 'όλα. Έχω συναντήσει επαινετικές κριτικές γι' αυτό σε διάφορες πηγές . Κατέβασα τη δοκιμαστική έκδοση και μπόρεσα να εξαγάγω το έργο μου Eagle CAD εκεί μόνο όταν αφαίρεσα σχεδόν όλα τα στοιχεία. Δυστυχώς, το πρόγραμμα TopoR δεν με βοήθησε να τοποθετήσω ούτε 10 στοιχεία στον πίνακα. Αρχικά, όλα τα εξαρτήματα τοποθετήθηκαν στη γωνία και στη συνέχεια τοποθετήθηκαν κατά μήκος της άκρης. Δεν ήμουν ικανοποιημένος με αυτήν την επιλογή και για μεγάλο χρονικό διάστημα εκτελούσα τη δρομολόγηση της πλακέτας χειροκίνητα στο οικείο περιβάλλον Eagle CAD.
Ένα σημαντικό στοιχείο της πλακέτας τυπωμένου κυκλώματος είναι η μεταξοτυπία. Η πλακέτα εντοπισμού σφαλμάτων δεν θα πρέπει να έχει μόνο ετικέτες για τα ηλεκτρονικά εξαρτήματα, αλλά και όλες οι υποδοχές θα πρέπει να φέρουν ετικέτες. Στο πίσω μέρος της πλακέτας τοποθέτησα πίνακες-υπενθυμίσεις με τις λειτουργίες των θυρών του ελεγκτή (κύρια, εναλλακτική, επαναπροσδιορισμένη, τρέχουσα). Παρήγγειλα την παραγωγή τυπωμένων κυκλωμάτων στην Κίνα από την γνωστή εταιρεία PCBWay. Δεν θα το επαινέσω επειδή η ποιότητα είναι καλή. Μπορούν να τα πάνε καλύτερα, με μικρότερες ανοχές, αλλά .

Κατασκευασμένες πλακέτες τυπωμένων κυκλωμάτων MDB1986, (c) Φωτογραφία από τον συγγραφέα
Έπρεπε να κολλήσω τα εξαρτήματα "στο γόνατό μου" με ένα κολλητήρι 40 watt και συγκόλληση POS-61, επειδή κολλώ σπάνια, 1-2 φορές το χρόνο, και η πάστα συγκόλλησης στεγνώνει. Έπρεπε επίσης να αλλάξω τον κινεζικό ελεγκτή CS32F103 στον αρχικό STM32F103 και στη συνέχεια να αντικαταστήσω τη μνήμη. Γενικά, είμαι απόλυτα ικανοποιημένος με το αποτέλεσμα τώρα, αν και δεν έχω ελέγξει ακόμη τη λειτουργία του RS-232 και του CAN.

Η πλακέτα εντοπισμού σφαλμάτων MDB1986 σε λειτουργία — λάμπει και θερμαίνεται, (c) Φωτογραφία από τον συγγραφέα
Στην ιστοσελίδα της Milandra μπορείτε να βρείτε αρκετά Σειρά 1986BE9 (πυρήνας Cortex-M3), αλλά δεν βλέπω τίποτα εκεί για τον μικροελεγκτή K1986BE1QI (αεροπορία). Έχοντας εξετάσει το υλικό, τα εγχειρίδια και την εργαστηριακή εργασία για πανεπιστήμια που δημοσιεύονται εκεί, χαίρομαι που το προσωπικό εκπαιδεύεται σε όλη τη χώρα για να συνεργάζεται με Ρώσους ελεγκτές. Το μεγαλύτερο μέρος του εκπαιδευτικού υλικού προετοιμάζει την εργασία με θύρες εισόδου/εξόδου, χρονιστές, ADC, DAC, SPI, UART. Χρησιμοποιούνται διαφορετικά περιβάλλοντα ανάπτυξης IDE (Keil, IAR, CodeMaster). Κάπου προγραμματίζουν χρησιμοποιώντας καταχωρητές CMSIS και κάπου χρησιμοποιούν τη βιβλιοθήκη MDR. Ο πόρος πρέπει να αναφέρεται , το οποίο περιέχει πολλά άρθρα από έμπειρους προγραμματιστές. Και, φυσικά, δεν πρέπει να ξεχνάμε .
Σκέψεις για τη ΜιλάντραΗ μικροηλεκτρονική αναπτύσσεται στη Ρωσία και ο Milandr παίζει σημαντικό ρόλο σε αυτή τη διαδικασία. Νέοι ενδιαφέροντες μικροελεγκτές εμφανίζονται, για παράδειγμα, οι 1986BE81T και "Elektrosila" με διεπαφές SpaceWire και MKIO (οι ίδιες με αυτές του 1986BE1 και, ενδεχομένως, με τα ίδια προβλήματα) κ.λπ. Αλλά δεν είναι ρεαλιστικό για τους απλούς μαθητές, τους εκπαιδευτικούς και τους πολιτικούς μηχανικούς να αγοράζουν τέτοια μικροκυκλώματα. Αυτό σημαίνει ότι η κοινότητα των μηχανικών δεν θα είναι σε θέση να εντοπίσει γρήγορα σφάλματα και προβλήματα με αυτό το τσιπ. Μου φαίνεται ότι είναι απαραίτητο να παραχθούν πρώτα μικροκυκλώματα σε πλαστική θήκη, να διανεμηθούν σε όλα τα ενδιαφερόμενα μέρη και μόνο μετά από δοκιμές (λατινική έγκριση - έγκριση, αναγνώριση) από ειδικούς μπορεί να προετοιμαστεί μια αναθεώρηση σε μεταλλοκεραμική θήκη με προστασία από όλους τους τρομερούς παράγοντες. Ελπίζω ότι στο εγγύς μέλλον ΟΛΟΙ θα είμαστε ευχαριστημένοι με νέα έργα που θα ανακοινώνονται σε εκθέσεις.
Ο πίνακας εντοπισμού σφαλμάτων που ανέπτυξα μπορεί να επαναληφθεί, να τροποποιηθεί και να χρησιμοποιηθεί στην εκπαιδευτική διαδικασία από οποιονδήποτε. Πρώτα απ 'όλα, έφτιαξα την σανίδα για τον εαυτό μου, αλλά βγήκε τόσο καλή που .
Το K1986BE1QI (avia) είναι ένας πολύ ενδιαφέρων ελεγκτής με μοναδικές διεπαφές, ο οποίος μπορεί να χρησιμοποιηθεί σε πανεπιστήμια για τη διδασκαλία φοιτητών. Νομίζω ότι μετά τη διόρθωση των σφαλμάτων που βρέθηκαν στον ελεγκτή και την επιτυχία στις δοκιμές πιστοποίησης, ο ελεγκτής θα πετάξει με την κυριολεκτική έννοια της λέξης!
Πηγή: www.habr.com
