LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

Programowanie mikrokontrolerów Freescale Kinetis w trybie ISP

W 32-bitowych układach rodziny Kinetis firmy Freescale wbudowany został blok funkcjonalny o nazwie EzPort. Moduł ten jest odpowiedzialny za programowanie mikrokontrolerów w trybie ISP (In-System Programming). Aby ten proces mógł zostać wykonany, do głównych funkcji EzPort należy przede wszystkim odczyt pamięci Flash, kasowanie pamięci Flash i zapisywanie pamięci Flash. Co istotne, zgodnie z ideą ISP, czynności te mogą być wykonywane bez konieczności usuwania mikrokontrolera z systemu, w którym został zintegrowany.

Moduł EzPort może działać w dwóch trybach: włączonym i wyłączonym.

  • Tryb włączony: moduł EzPort przejmuje kontrolę nad sterowaniem pamięcią Flash, wyłączając jednocześnie dostęp innych zasobów mikrokontrolera do pamięci. Zapobiega to występowaniu konfliktów dostępu do pamięci;
  • Tryb wyłączony: zasoby mikrokontrolera mają normalny dostęp do pamięci Flash.

Budowa i zasada działania modułu EzPort

W procesie programowania ISP wykorzystywane są: moduł EzPort, pamięć Flash, rdzeń mikrokontrolera i kontroler resetu. Ich wzajemne połączenie przedstawiono na rysunku 1 w postaci schematu blokowego.

 

Rys. 1. Schemat blokowy przedstawiający połączenie modułu EzPort z modułami z nim współpracującymi

Rys. 1. Schemat blokowy przedstawiający połączenie modułu EzPort z modułami z nim współpracującymi

 

 

Moduł EzPort wyposażony jest w prosty interfejs komunikacyjny zgodny ze standardem transmisyjnym SPI (Serial Peripheral Interface), za pomocą którego moduł komunikuje się z urządzeniami zewnętrznymi. Opis wyprowadzeń modułu EzPort przedstawiono w tabeli 1.

 

Tab. 1. Opis wyprowadzeń modułu EzPort

Nazwa wyprowadzenia Funkcja wyprowadzenia Tryb pracy wyprowadzenia
EZP_CK Linia zegarowa Wejście
EZP_CS Chip Select Wejście
EZP_D Linia danych wejściowych Wejście
EZP_Q Linia danych wyjściowych Wyjście

 

Linia EZP_CK to linia, na której podawany jest sygnał zegarowy. Zgodnie z kolejnymi taktami zegara, na liniach danych (EZP_D oraz EZP_Q) podawane są bity danych. Częstotliwość sygnału zegarowego może przyjąć maksymalnie połowę wartości częstotliwości mikrokontrolera. Jedynym wyjątkiem jest sytuacja, gdy wykonywana jest operacja na pamięci oznaczona jako Read Data lub Read FlexRAM. W tym wypadku częstotliwość sygnału zegarowego nie może przekroczyć jednej ósmej częstotliwości pracy mikrokontrolera.

Linia EZP_CS to tak zwana linia Chip Select. Służy ona do sygnalizacji miejsc w ciągu danych, gdzie zaczyna się i kończy dana komenda. Negacja sygnału na linii EZP_CS oznacza zakończenie aktualnie przesyłanej komendy.

Linie EZP_D oraz EZP_Q służą do przesyłania danych. Każda sentencja, w tym kod komendy, adres i dane, rozpoczynana jest od najbardziej znaczącego bitu.

Konfiguracja sprzętowa i programistyczna do współpracy z modułem EzPort

Komunikacja między modułem EzPort i urządzeniem zewnętrznym może odbywać się w dwóch trybach pracy standardu SPI, różniącymi się polaryzacją sygnału zegarowego i zboczem zegara, dla którego zmienia się wartość bitu danych. Dostępne tryby pracy to:

  • CPOL = 0, CPHA = 0;
  • CPOL = 1, CPHA = 1.

Moduł EzPort podczas komunikacji SPI z urządzeniem zewnętrznym działa jako urządzenie Slave, co oznacza, że to urządzenie zewnętrzne steruje całym procesem działania modułu EzPort wysyłając do niego odpowiednie komendy do wykonania. Urządzeniem zewnętrznym może być np. mikrokontroler Freescale Coldfire MCF5282. Schemat połączenia mikrokontrolerów Kinetis i Coldfire MCF5282 przedstawiono na rysunku 2.

 

Rys. 2. Połączenie interfejsu SPI mikrokontrolera MCF5282 z liniami modułu EzPort

Rys. 2. Połączenie interfejsu SPI mikrokontrolera MCF5282 z liniami modułu EzPort

 

 

Przykładowy kod konfigurujący interfejs SPI w mikrokontrolerze Coldfire MCF5282 do pracy z modułem EzPort układu Kinetis pokazano w listingu:

// Configure as GPIO pins to monitor RSTOUT pins and assert RCON
MCF5282_GPIO_PQSPAR = 0x0; // GPIO function
MCF5282_GPIO_DDRQS = 0x08; // CS0 as output
MCF5282_GPIO_PORTQS = 0x08; // Drive CS0 HIGH
/* set up wrap register for a single 8-bit transfer */
MCF5282_QSPI_QWR = MCF5282_QSPI_QWR_CSIV;
/* Enable QSPI Pins */
MCF5282_GPIO_PQSPAR |= 0x7F;
// Configure as GPIO pins to monitor RSTOUT pins and assert RCON
MCF5282_GPIO_PQSPAR = 0x0; // GPIO function
MCF5282_GPIO_DDRQS = 0x28; // CS0 and CS2 as output
MCF5282_GPIO_PORTQS = 0x28; // Drive RCON HIGH & RSTIN HIGH
MCF5282_GPIO_PORTQS = 0x08; // Drive RCON HIGH & RSTIN LOW
while ((data_in & 0x10))//wait till RSTOUT LOW
{
data_in = MCF5282_GPIO_PORTQSP;
}
MCF5282_GPIO_PORTQS = 0x20; // Drive RCON LOW & RSTIN HIGH
while (!(data_in & 0x10))//wait till RSTOUT HIGH
{
data_in = MCF5282_GPIO_PORTQSP;
}
//Exiting reset and entering EZPORT mode
MCF5282_GPIO_PORTQS = 0x28; // Drive RCON HIGH again

 

Polski portal branżowy dedykowany zagadnieniom elektroniki. Przeznaczony jest dla inżynierów i konstruktorów, projektantów hardware i programistów oraz dla studentów uczelni technicznych i miłośników elektroniki. Zaglądają tu właściciele startupów, dyrektorzy działów R&D, zarządzający średniego szczebla i prezesi dużych przedsiębiorstw. Oprócz artykułów technicznych, czytelnik znajdzie tu porady i pełne kursy przedmiotowe, informacje o trendach w elektronice, a także oferty pracy. Przeczyta wywiady, przejrzy aktualności z branży w kraju i na świecie oraz zadeklaruje swój udział w wydarzeniach, szkoleniach i konferencjach. Mikrokontroler.pl pełni również rolę patrona medialnego imprez targowych, konkursów, hackathonów i seminariów. Zapraszamy do współpracy!