Projektowanie elektroniki - metody i strategie implementacji nowości technologicznych
| TechnikaWspółczesny rynek konsumencki wymusza nieustanny postęp, redukcję kosztów oraz przyczynia się do sukcesywnego skracania czasu życia produktów. Z jednej strony jest to zjawisko korzystne, gdyż pozwala konsumentom nabywać coraz nowsze i bardziej funkcjonalne urządzenia, a tym samym zwiększa sprzedaż i dochody firm elektronicznych. Z drugiej strony jednak przyczynia się do zwiększania presji wywieranej na konstruktorów, którzy muszą opracowywać coraz bardziej złożone urządzenia w coraz krótszym czasie. Tym samym dokładne zapoznanie się z dokumentacją podzespołów oraz pisanie oprogramowania jest coraz bardziej utrudnione przez brak czasu.
Oprogramowanie
Producenci podzespołów elektronicznych są świadomi wyścigu z czasem, który jest udziałem ich klientów, dlatego udostępniają przykładowe oprogramowanie, biblioteki i aplikacje narzędziowe. Ma to na celu przyspieszenie pracy konstruktorów i tym samym uatrakcyjnienie oferowanych komponentów. Pierwszą grupę bibliotek dostarczanych przez producentów stanowią biblioteki obsługujące układy peryferyjne. Przykład może stanowić biblioteka STM32F10x_StdPeriph_Lib opracowana przez STMicroelectronics przeznaczona dla mikrokontrolerów z rodziny STM32.
Pozwala ona tworzyć oprogramowanie bez konieczności bezpośredniego operowania na rejestrach mikrokontrolera, co znacznie upraszcza pracę. Projektanci tracą mniej czasu na drobiazgowe analizowanie dokumentacji i określenia, które bity należy ustawić w poszczególnych rejestrach, aby zrealizować założony efekt. W konsekwencji takiego podejścia znacząco zwiększa się przejrzystość programu, co ułatwia nanoszenie ewentualnych zmian oraz przyspiesza wyszukiwanie błędów w kodzie.
Biorąc pod uwagę złożoność 32-bitowej architektury, podejście takie stanowi alternatywę wartą rozważenia. Ceną takiego uproszczenia pracy jest zwiększenie zajętości pamięci oraz mniejsza prędkość pracy mikrokontrolera na skutek wykonywania nadmiarowego kodu. Niemniej w układach wyposażonych w duże ilości pamięci oraz wymagających szybkiego napisania oprogramowania takie podejście staje się opłacalne.
Na listingu 1 pokazano przykładowy fragment programu dla układów STM32 napisany w oparciu o wspomnianą bibliotekę, odpowiedzialny za obsługę portu UART. Jego działanie powinno być zrozumiałe dla każdego, kto ma ogólne pojęcie o porcie szeregowym (np. na podstawie pracy z innymi rodzinami układów) oraz zna język angielski. Znajomość architektury rodziny STM32 nie jest w tym przypadku niezbędna. Warto zauważyć, że działanie programu nie będzie tak czytelne i oczywiste, gdy projektanci będą operowali bezpośrednio na rejestrach.
Drugim rodzajem bibliotek są biblioteki realizujące określone funkcje bądź zadania, kilka przykładów przedstawiono w tabeli 3. Można zauważyć, że oferta w tym względzie jest bardzo szeroka i wiele rzeczy daje się zrealizować, bazując na gotowych i sprawdzonych przez producentów bibliotekach. W ten sposób można uniknąć analizowania i opracowywania bardziej złożonych protokołów komunikacji (np. Ethernet czy USB) oraz algorytmów (filtracja cyfrowa, FFT) i skupić się na stronie funkcjonalnej urządzenia i testowaniu jego pracy.
Niekiedy nie istnieje uzasadniona potrzeba opracowywania własnych bibliotek, gdyż te dostarczone przez producenta są mocno zoptymalizowane i w pełni wykorzystują możliwości danego sprzętu, na jakim są uruchamiane. Dobrym przykładem jest złącze USB, którego obsługa nie należy do trywialnych, natomiast dzięki oprogramowaniu dostarczonemu przez producentów większości mikrokontrolerów taka się właśnie staje. Innym przykładem oprogramowania wymagającego tylko minimalnych zmian są bootloadery.
W przypadku kodu udostępnionego np. przez firmę Microchip wystarczy wybrać port I/O mikrokontrolera służący do aktywowania bootloadera po resecie, aby móc aktualizować oprogramowanie przez złącze USB. Dużym ułatwieniem są w tym przypadku gotowe aplikacje, odpowiedzialne za przesyłanie kodu wynikowego do pamięci Flash oraz wersje źródłowe ułatwiające opracowanie własnych programów. Warto wspomnieć również o dostarczaniu gotowych plików wykorzystywanych przez linker, dzięki czemu obecność bootloadera jest praktycznie niezauważalna.
Osobny rodzaj wsparcia ze strony producentów stanowią kreatory umożliwiające konfigurowanie wybranych układów peryferyjnych bądź generujące kod źródłowy. Ułatwiają one i przyspieszają przygotowanie wybranych układów do pracy. Najlepszym przykładem aplikacji tego typu jest Core Generator dołączony do pakietu ISE Design Suite firmy Xilinx przeznaczonego do projektowania logiki układów FPGA. Aplikacja Core Generator (rys. 2) umożliwia wygenerowanie najpopularniejszych modułów (bloków funkcyjnych) w oparciu o informacje wprowadzone do kreatora.
W ten sposób można przygotować dwuportową pamięć RAM, kontroler pamięci DDR2, dekoder 802.16e CTC, filtr cyfrowy, moduł analizy FFT. Powstały moduł jest opisany w wybranym języku opisu sprzętu (Verilog lub VHDL), zależnie od ustawionej opcji. W przypadku mikrokontrolerów aplikacje dostarczane przez producentów pozwalają graficznie określić działanie niektórych funkcji, takich jak: ochrona pamięci, źródło taktowania rdzenia, włączenie bądź wyłączenie interfejsów debugujących. Na rysunku 3 przedstawiono przykładową aplikację tego typu przeznaczoną dla mikrokontrolerów AVR.
Innym przykładem narzędzia ułatwiającego pracę konstruktorom jest program Digital Filter Design przeznaczony dla układów dsPIC produkowanych przez firmę Microchip. Umożliwia ono projektowanie, analizę i implementację filtrów cyfrowych za pomocą graficznego interfejsu użytkownika. Środowisko przeprowadza niezbędne obliczenia matematyczne i automatycznie generuje kod źródłowy oraz potrzebne współczynniki filtrów. Dodatkowo istnieje możliwość wyświetlenia charakterystyk zaprojektowanego filtru (m.in. amplitudy, fazy, opóźnienia grupowego, odpowiedzi impulsowej).