Obsługa interfejsu pamięci zewnętrznej FlexBus w mikrokontrolerach Kinetis
Mikrokontrolery Kinetis wyposażono w uniwersalny interfejs zewnętrznych magistral danych/adresu o nazwie FlexBus. Można go wykorzystać do podłączenia asynchronicznych lub synchronicznych urządzeń I/O (na przykład pamięci ROM, Flash, układów PLD) lub dowolnych innych urządzeń slave. Przykłady przedstawione w artykule bazują na płytce TWR-MEM z pamięcią MRAM podłączoną do mikrokontrolera z rodziny Kinteis.
Interfejs FlexBus wyposażono w sześć niezależnych, programowalnych przez użytkownika sygnałów wyboru bloku obsługiwanej pamięci (FB_CS[5:0]), 8-/16- lub 32-bitowych portów skonfigurowanych dla multipleksowanych lub niemultipleksowanych magistrali adresowych oraz danych. Szerokość magistral danych jest konfigurowalna, dopuszczalne jest stosowanie portów 8-/16- lub 32-bitowych. Wymiana danych może odbywać się pakietami lub słowo po słowie.
Opisy sygnałów interfejsu FlexBus FB_A[31:0] – W trybie niemultipleksowanym jest to magistrala danych. FB_AD[31:0] – W trybie niemultipleksowanym jest to magistrala danych, w trybie multipleksowanym, magistrala FB_DA[31:0] służy do transferu adresu i danych. Liczba torów bajtów przenoszących dane jest określona przez rozmiar portu. FB_CS[5:0] – Sygnały wyboru struktury pamięci sygnalizują, które urządzenie jest wybrane. Konkretny sygnał wyboru struktury pamięci ukazuje się, gdy adres transferu należy do przestrzeni adresowej urządzenia. FB_BE/BWE[3:0] – Podczas sterowania niskim napięciem, wyjścia te sygnalizują zatrzymanie danych lub prowadzenie ich na konkretny tor magistrali danych. FB_OE – Sygnał wyzwolenia wyjścia jest wysyłany do sprzężonej pamięci, w celu uruchomienia transferu odczytu. Sygnał FB_OE pojawia się tylko wtedy podczas uzyskiwania dostępu do odczytu, kiedy sygnały wyboru struktury pamięci zgadzają się z aktualnym dekodowaniem adresu. FB_R/W – Procesor steruje tym sygnałem, w celu wskazania operacji wykonywanej obecnie przez magistralę: 1 podczas cyklu odczytu magistrali oraz 0 w trakcie cykli zapisu magistrali. FB_ALE – Pojawienie się tego sygnału wskazuje na to, że urządzenie rozpoczęło wymianę danych przez magistralę, a adresy i parametry są prawidłowe. FB_TSIZ[1:0] – Sygnały te, wraz z FB_TBST wskazują, rozmiar transferu danych aktualnej operacji wykonywanej przez magistralę. FB_TBST – Pakietowanie transferu wskazuje, że przeprowadzane jest pakietowe przenoszenie danych, sterowane przez urządzenie. FB_TA – Ten sygnał wejściowy wskazuje na to, że zakończył się transfer zewnętrznych danych. Wówczas, gdy procesor rozpoznaje sygnał FB_TA podczas cyklu odczytu, zatrzymuje dane, a następnie zakańcza cykl magistrali. FB_CLK – zegar FlexBus, system stanowi dedykowane źródło zegara dla zewnętrznego sygnału FB_CLK modułu FlexBus. Jego częstotliwość taktowania jest otrzymywana z dzielnika (SIM_CLKDIV1[OUTDIV3]), z rejestru MCGOUTCLK. |
Tryb multipleksowany
Na rysunku 1 przedstawiono obsługiwane przez interfejs FlexBus konfiguracje szerokości magistrali adresowej oraz danych. Magistrala w pierwszej kolejności (jasny niebieski) wysyła adres, a dane w drugiej kolejności (zielony).
Rys. 1. Tryby pracy multipleksowanej FlexBus
W tabeli 1 opisano funkcje sygnałów FlexBus dostępnych w mikrokontrolerach Kinetis, w zależności od ich obudowy.
Tab. 1. Sygnały interfejsu FlexBus w mikrokontrolerach Kinetis bez wbudowanego kontrolera LCD
Obudowa | 144-wypr. | 104-wypr. | 100-wypr. | 81-wypr. |
Sygnały | [29:16] AD[31:0] CS[5:0] | AD[31:0] CS[5:0] | AD[31:24] 5 CS | AD[19:0] 4 CS |
Tryb multipleksowany | Maksymalnie do 32 adresów. Maksymalnie do 32 linii danych = AD[31:0]. | Maksymalnie do 32 adresów. Maksymalnie do 32 linii danych = AD[31:0]. | Maksymalnie do 21 adresów. Maksymalnie do 16 linii danych – AD[15:0]. | Maksymalnie do 20 adresów. Maksymalnie do 16 linii danych – AD[15:0]. |
Tryb niemultipleksowany | Maksymalnie do 30 adresów = A[29:16] + AD[15:0]. Maksymalnie do 16 linii danych = AD[31:16]. | Maksymalnie do 24 adresów = AD[23:0]. Maksymalnie do 8 linii danych = AD[31:24]. Maksymalnie do 16 adresów = AD[15:0]. Maksymalnie do 16 linii danych = AD[31:16]. | Maksymalnie do 20 adresów = AD[20:0]. Maksymalnie do 8 linii danych = AD[31:24]. | N/D |
Obudowa | 60-wypr. | 64-wypr. | 48-wypr. | 32-wypr. |
Sygnały | AD[19:0] 2 CS | AD[17:0] 2 CS | N/D | N/D |
Tryb multipleksowany | Maksymalnie do 20 adresów. Maksymalnie do 16 linii danych – AD[15:0]. | Maksymalnie do 18 adresów. Maksymalnie do 16 linii danych – AD[15:0]. | N/D | N/D |
Tryb niemultipleksowany | N/D | N/D | N/D | N/D |