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

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

 

O autorze