- Napięcie zasilania 5 VDC.
- Płytka jednostronna o wymiarach 89 mm×60 mm.
- Interfejs USB lub RS232.
- Mikrokontroler AT89C2051.
- Programowanie układów HCS200 (KeeLoq) oraz HCS301.
Na rynku jest duży wybór programatorów uniwersalnych. Urządzenie tego typu są w stanie obsłużyć większość układów stosowanych w urządzeniach elektronicznych. Zazwyczaj programatory uniwersalne mają zaimplementowane ogólnie stosowane algorytmy programujące przeznaczone dla pewnych grup rozwiązań, takich jak pamięci stałe, pamięci z popularnym interfejsem szeregowym I²C, Microwire SPI. Obok opisanych grup układów istnieją także rozwiązania mniej popularne stosowane w pewnej wąskiej gałęzi aplikacji. Zdarza się, że nawet programatory wiodących producentów, obsługujące tysiące układów, nie zawierają na swojej liście interesującego nas rozwiązania. Programatory przeznaczone do tych konkretnych rozwiązań bywają drogie, a ich zastosowanie praktyczne bywa nieopłacalne, ponieważ czasami ogranicza się do zaprogramowania jednego lub kilku układów. W takiej sytuacji, w wypadku konieczności zaprogramowania nietypowego układu np. w układzie prototypowym, sensowne jest samodzielne skonstruowanie programatora.
Z problemem zaprogramowania układu za pomocą programatora uniwersalnego zmierzyłem się wykonując prototyp urządzenia z układem HCS200 firmy Microchip. Układ jest koderem przeznaczonym dla urządzeń dostępu zdalnego. Aby zapewnić bezpieczeństwo transmisji danych, układ używa algorytmu kryptograficznego KeeLoq będącego rozwiązaniem autorskim firmy Microchip. Popularnie, kod przesyłany pomiędzy nadajnikiem a odbiornikiem nazywa się kodem kroczącym. Nadajnik realizuje funkcje kodowania zbioru danych. Dane zapisane w wewnętrznej pamięci EEPROM są informacjami, które ze względu na bezpieczeństwo użytkowania aplikacji, muszą być szczególnie chronione. Dlatego też układ jest programowany w sposób niestandardowy. Weryfikacja poprawności zaprogramowania jest możliwa tylko raz, bezpośrednio po sekwencji programującej układ. Po jednym cyklu programowania i weryfikacji układu nie daje się odczytać. Oczywiście możliwe jest ponowne zaprogramowanie układu nowymi danymi.
Pamięć układu składa się 12 słów (192 bajty). Mapę pamięci EEPROM układu HCS200 zamieszczono w tabeli 1.
Zaprogramowanie układu sprowadza się do wysłania zawartości pamięci do układu oraz bezpośrednio po tym zweryfikowaniu poprawności zapisanych danych. Poszczególne fazy programowania pokazano na rysunku 1.
W pierwszym etapie układu jest wprowadzany w tryb programowania. Polega on na ustawieniu wyprowadzenia S2 układu (zegar), w czasie którego na wyprowadzeniu PWM (dane) są podawane kolejno poziomy: niski (3,5…4 ms), wysoki (co najmniej 3,5 ms) i ponownie niski (co najmniej 50 µs). Po wystąpieniu tych poziomów wyprowadzenie zegara jest zerowane i pozostaje w takim stanie przez czas Tp równy co najmniej 4 ms (rysunek 2).
Po wprowadzeniu układu w tryb programowania można przystąpić do wysyłania kolejnych słów przeznaczonych do zapisania w pamięci EEPROM. Bity słowa w kolejności od najmłodszego do najstarszego są zapisywane przy opadającym zboczu zegara. Po wysłaniu każdego słowa należy odczekać przez czas Twc potrzebny do wykonania operacji zapisu do pamięci (co najmniej 50 ms, rysunek 3).
Bezpośrednio po operacji programowania rozpoczyna się etap weryfikacji. Kolejne bity od najmłodszego do najstarszego są ustawiane na wyprowadzeniu PWM. Opadające zbocze zegara sygnalizuje przejście do kolejnego bitu (rysunek 4). Po zakończeniu etapu weryfikacji nie ma możliwości ponownej weryfikacji ani odczytu układu.
Interfejs programatora
Układ HCS200 jest programowany za pomocą interfejsu dołączanego poprzez złącze USB do komputera PC pracującego pod kontrolą Windows. Interfejs zawiera konwerter USB/RS232. Możliwa jest rezygnacja z tej części układu i podłączenie programatora poprzez złącze RS232. Schemat interfejsu pokazano na rysunku 5.
Sercem programatora jest mikrokontroler AT89C2051. Odpowiada on zarówno za komunikację z komputerem (RS232), jak i z programowanym układem. Programowanie może odbywać się bezpośrednio w nadajniku zdalnego sterowania przy użyciu klipsa. Tranzystor T1 kluczuje napięcie zasilające układy sterujące oraz programowany układ. Tranzystory T2 i T3 sterują linią danych natomiast tranzystory T4, T5 – linią zegarową. W trakcie weryfikacji dane wystawiane na linii danych przez programowany układ są odczytywane za pomocą wyprowadzenia P1.1 mikrokontrolera. Komendy sterujące programatorem oraz zawartość bufora danych są przesyłane z komputera na wyprowadzenia UART (P3.0 i P3.1) mikrokontrolera. W opisywanym interfejsie zastosowany jest wirtualny port szeregowy dostępny poprzez złącze USB komputera. Rozwiązaniem sprzętowym realizującym konwersję USB/UART jest tutaj układ U2 (FT232BL). Alternatywnie można zastosować konwerter MAX232 i połączyć programator z komputerem poprzez złącze RS232. Rozmieszczenie elementów na obwodzie drukowanym przedstawione zostało na rysunku 6.
Oprogramowanie
Oprogramowanie programatora składa się z dwóch części: oprogramowania interfejsu oraz programu wiersza poleceń komputera.
Interfejs jest sterowany komendami wysyłanymi z komputera poprzez wirtualny port szeregowy. Na podstawie tych komend interfejs dokonuje programowania układu poprzez wygenerowanie odpowiednich przebiegów (opisanych wcześniej). Do interfejsu przekazywany jest bufor danych będący odwzorowaniem pamięci EEPROM. Po zaprogramowaniu układu wykonywana jest weryfikacja. Dane są wczytywane do bufora i odsyłane do komputera w celu sprawdzenia.
Oprogramowanie komputera oprócz komunikacji z interfejsem realizuje generowanie klucza kodującego (do pamięci EEPROM enkodera nie trafia numer producenta tylko wygenerowany klucz). Proces pokazano na rysunku 7.
Program sterujący programatorem jest uruchamiany z wiersza poleceń i przyjmuje trzy argumenty: nazwę portu szeregowego, 64-bitowy numer producenta oraz 28-bitowy numer seryjny. Pozostałe dane konfiguracyjne (np. CFG zawierające między innymi baud rate) są zapisane na stałe w kodzie. Przykłady komend programujących układy HCS zamieszczono na listingu 1.
C:\hcsprog>hcsprog.exe com8 41:4c:41:6d:72:61:6c:61 0:00:00:01
rozpoczynam programowanie: 10 01 00 00 00 00 00 00 00 00 00 01 00 00 00 00 08 d6 af 3c d8 a4 1c 11
programowanie zakonczone pomyslnie
C:\hcsprog>hcsprog.exe com8 41:4c:41:6d:72:61:6c:61 0:00:00:02
rozpoczynam programowanie: 10 02 00 00 00 00 00 00 00 00 00 02 00 00 00 00 73 1c e8 68 f0 da 1c d5
programowanie zakonczone pomyślnie
W wypadku problemów z uzyskaniem dostępu do wirtualnego portu szeregowego należy pobrać odpowiednie sterowniki ze strony producenta (http://www.ftdichip.com). Program i interfejs programują również enkoder HCS301.
Jakub Kietliński
jakub.kietlinski@gmail.com
Bibliografia:
- Nota katalogowa HCS200 http://ww1.microchip.com/downloads/en/devicedoc/40138c.pdf
- Nota katalogowa HCS301 http://ww1.microchip.com/downloads/en/devicedoc/21143b.pdf
- Nota TB041 – procedury dekodowania w języku C
- Nota FT232BL, sterowniki wirtualnego portu szeregowego, programator EEPROM-a zawierającego dodatkowe dane układu http://www.ftdichip.com
- R1…R5, R7…R9: 1 kΩ
- R2, R6, R19: 10 kΩ
- R10…R12, R15: 470 Ω
- R13, R14:220 Ω
- R16: 1,5 kΩ
- R17, R18: 27 Ω
- R20: 2,2 kΩ
- C1: 470 nF
- C2…C9: 100 nF
- C3: 33 nF
- C4: 10 nF
- C10, C11: 10 µF/6 V
- U1: AT89C2051 (SOL-20)
- U2: FT232BL (TQFP-32)
- U3: pamięć EEPROM 93C46 (SO-8)
- T1…T5: BC858 (SOT-23)
- LED1…LED5: LED SMD
- X1: Rezonator kwarcowy 12 MHz
- X2: Rezonator kwarcowy 6 MHz
- J1: Złącze mini USB
- Klips dla obudów SO-8