ISP przy użyciu USB w mikrokontrolerach LPC1300
Rodzina mikrokontrolerów LPC1300 jest zbudowana na rdzeniu ARM Cortex-M3. Rdzeń ten przeznaczony jest dla systemów embedded, posiada wiele zintegrowanych bloków dodatkowych i jest bardzo oszczędny energetycznie. Wśród peryferiów LPC1300 można znaleźć: 32kB pamięci Flash, do 8kB pamięci danych, interfejs USB, 1 kontroler SSP, interfejsy SPI, UART i I2C, 8-kanałowy 10-bitowy przetwornik A/C, 4 timery ogólnego zastosowania z PWM i do 40 wyprowadzeń wejścia/wyjścia ogólnego przeznaczenia.
Mikrokontroler jest też wyposażony we wbudowaną pamięć ROM zawierającą bootloader, pozwalający programować pamięć Flash już po zmontowaniu całego systemu (In-System Programming) przy pomocy interfejsu UART oraz przez USB. API pamięci Flash implementuje prosty interfejs dla wbudowanej w układ funkcji programowania Flash i pozwala na przejście w tryb In-System Programming (ISP) w dowolnym momencie. API dla USB pozwala na projektowanie urządzeń dwóch podstawowych klas: służących do wprowadzania danych przez człowieka (ang. Human Interface Device, HID) oraz pamięci masowych (ang. Mass Storage Class, MSC), bez potrzeby pisania własnych sterowników czy przechowywania ich w pamięci Flash.
W niniejszym opracowaniu poruszane i wyjaśniane są następujące tematy:
- Omówienie In-System Programming przy pomocy USB
- Szczegóły ISP z użyciem USB
- Automatyzacja ISP z użyciem USB
- Automatyzacja wejścia w tryb USB ISP
- Przykładowe programy
- Podsumowanie
In-System Programming (ISP) przy użyciu USB
Wbudowany w mikrokontroler LPC1300 firmware obsługujący ISP z użyciem USB pozwala na programowanie i aktualizację oprogramowania w miejscu pracy urządzenia przez użytkowników końcowych przy pomocy komputera osobistego. Niniejszy dokument będzie się odnosił w szczególności do mikrokontrolera LPC1343, ale opisane procedury powinny się sprawdzić także przy innych układach z rodziny LPC1300 wyposażonych we wbudowany kontroler USB.
Podanie na pin PIO0_1 stanu niskiego przy włączaniu mikrokontrolera uruchamia wbudowany firmware obsługujący tryb programowania In-System Programming i wprowadza mikrokontroler w tryb ISP (chyba że opcja ta została zablokowana przez tryb NO_ISP mechanizmu Code Read Protection; szczegóły na ten temat można znaleźć w nocie aplikacyjnej AN10968). Gdy układ wejdzie w tryb ISP, sprawdzana jest linia PIO0_3 (USB VBUS). Jeśli jest na niej stan wysoki, mikrokontroler wchodzi w tryb USB ISP, a jeśli niski – w tryb UART ISP. W podręczniku użytkownika User’s Manual można znaleźć diagram Boot Process Flowchart wyjaśniający ten proces w szczegółach.
Przy wchodzeniu w tryb USB ISP, układ LPC1300 uruchamia interfejs USB full-speed w trybie urządzenia pamięci masowej (MSC). Urządzenie to ma system plików FAT12, który jest widziany przez większość systemów operacyjnych jako standardowy dysk. Etykieta dysku wskazuje na status Code Read Protection (CRP), a sam dysk zawiera jeden plik – firmware.bin. Usunięcie lub nadpisanie tego pliku powoduje zapis w pamięci Flash, o ile jest to dozwolone przez ustawienia CRP. Odczytywanie zawartości pamięci Flash polega po prostu na skopiowaniu pliku firmware.bin i otworzenie go.
Rys. 1. ISP z użyciem USB – plik firmware.bin w systemie Windows XP
Wbudowany firmware obsługujący ISP z użyciem USB w mikrokontrolerach LPC1300 emuluje system plików FAT, aby ułatwić odczyt i zapis firmware’u za pomocą komputera PC. Opisane zostaną teraz szczegóły tej emulacji i sposoby aktualizacji firmware’u przy pomocy kilku typowych systemów operacyjnych działających na komputerze-hoscie.
Gdy procesor LPC1300 jest podłączony do hosta przez USB i tryb USB ISP jest zainicjowany, procesorowi są przypisane numery identyfikacyjne USB Vendor ID – 0x04CC oraz Device ID – 0x0003. Informacje te są zwykle niewidoczne dla użytkownika, ale mogą zostać wykorzystane przez program aktualizujący firmware do rozpoznania LPC1300 wśród wszystkich urządzeń podłączonych do hosta przez USB. Gdy mikrokontroler zostanie rozpoznany, można wysłać do niego komendę Mass Storage Class Inquiry (z ang. zapytanie o urządzenie typu pamięć masowa). W odpowiedzi zostanie przesłany łańcuch znakowy (string) zawierający opis mikrokontrolera LPC, z którym odbywa się komunikacja. String ten (Inquiry String) dla mikrokontrolerów LPC134x ma postać „NXP LPC134X IFLASH 1.0”. Układ można rozpoznać także przez nazwę dostawcy („NXP”) oraz modelu („LPC134X IFLASH.”). Istnieje także identyfikator modelu (Model ID), który ma postać „NXP_LPC13XX_IFLASH”.
Dysk emulowany przez LPC1300 ma różne etykiety woluminu, widoczne w managerze plików, w zależności od ustawień Code Read Protect (CRP). Występują też drobne różnice w zachowaniu układu podczas przeprogramowywania w zależności od tych ustawień. Krótkie podsumowanie różnic zostało przedstawione w tab. 1 (kompletna dokumentacja znajduje się w podręczniku użytkownika mikrokontrolerów LPC1300 o symbolu UM10375).
Tab. 1. Fragment podręcznika użytkownika – etykiety woluminu z opisami stanu CRP
Status CRP | Etykieta woluminu | Opis |
Bez CRP | CRP DISABLD | Pamięć Flash użytkownika może zostać odczytana i zapisana |
CRP1 | CRP1 ENABLD | Pamięci Flash nie można odczytywać, ale można do niej zapisać. Pamięć jest nadpisywana sektorami, w zależności od pliku z nowym firmwarem. |
CRP2 | CRP2 ENABLD | Pamięci Flash nie można odczytywać, ale można do niej zapisać. Cała pamięć jest wymazywana przed zapisem nowego firmware’u. |
CRP3 | CRP3 ENABLD | Pamięci nie można odczytywać, ani zapisywać. Bootloader zawsze wykonuje aplikację znajdującą się w pamięci, jeśli jest ona poprawna. |
Jeśli włączone są CRP1 lub CRP2, Flash użytkownika jest wymazywany przy usunięciu pliku i reprogramowany przy skopiowaniu nowego pliku. Jeśli CRP1 jest włączony lub nie ma żadnej ochrony CRP, Flash użytkownika jest wymazywany i reprogramowany przy skopiowaniu nowego pliku. W związku z tym, najlepiej byłoby, żeby nowy plik programujący miał rozmiar równy pojemności pamięci (32kB dla LPC1343), aby cała pamięć była w znanym stanie. Użycie pliku uzupełnionego do takiego rozmiaru (32kB lub pojemność pamięci Flash) daje też korzyść w postaci prostego narzędzia do sprawdzania czy podłączany jest właściwy mikrokontroler (poprzez porównywanie rozmiarów nowego firmware’u i pliku firmware.bin na urządzeniu), bez dodatkowej informacji konfiguracyjnej.
Uwaga: jedynymi komendami systemu Windows obsługiwanymi przez folder odzwierciedlający pamięć Flash LPC1300 są kopiuj i usuń. Operacja nadpisywania przy użyciu Eksploratora Windows nie powiedzie się, gdyż na emulowanym dysku nie ma wystarczającej ilości miejsca, by zapisać plik tymczasowy tworzony przez Windows podczas nadpisywania. |