# Tworzenie Własnego Firmware dla Mesa 7i92TF (Efinix Trion T20)

Karta **Mesa 7i92TF** (wersja z żeńskim portem DB25 oraz złączem IDC26 2x13) jest oparta na układzie FPGA **Efinix Trion T20F256**. Oznacza to, że do edycji i kompilacji oprogramowania układowego wykorzystuje się środowisko **Efinity IDE** firmy Efinix, a sam kod opisany jest w języku VHDL (architektura HostMot2).

Poniżej znajduje się kompletny przewodnik krok po kroku, jak przygotować i skompilować własną konfigurację pinów.

---

## Krok 1: Instalacja Efinity IDE
1. Zarejestruj się na stronie producenta układu FPGA: [Efinix Inc.](https://www.efinixinc.com/).
2. Pobierz i zainstaluj oprogramowanie **Efinity IDE** (zalecana wersja to `2021.2` lub nowsza, zgodnie z konfiguracją projektu w pliku `.xml`).
3. Pobierz plik licencji Efinix (jest wymagany do działania kompilatora).

---

## Krok 2: Przygotowanie plików źródłowych
W Twoim katalogu ze źródłami (`source/`) znajduje się spakowany projekt dla tego układu:
1. Rozpakuj plik **`7i92t-hm2.zip`** (zawierający projekt dla układu T20F256) do nowego folderu roboczego, np.:
   ```bash
   unzip 7i92t-hm2.zip -d 7i92t_workspace
   ```
2. Przejdź do nowo utworzonego folderu.

---

## Krok 3: Stworzenie nowej konfiguracji pinów (VHDL)
Rozkład pinów dla złącz na karcie Mesa 7i92TF jest zdefiniowany w plikach o nazwie `PIN_*.vhd`.
*   **P2 (DB25 Female):** Piny wejścia/wyjścia od `I/O 00` do `I/O 16`.
*   **P1 (IDC26 2x13):** Piny wejścia/wyjścia od `I/O 17` do `I/O 33`.

### Instrukcja tworzenia własnego pliku pinów:
1. Skopiuj istniejący plik (np. popularny standard 5-osiowy `PIN_5ABOBx2D_34.vhd`) na nową nazwę:
   ```bash
   cp PIN_5ABOBx2D_34.vhd PIN_MOJA_KONFIGURACJA_34.vhd
   ```
2. Otwórz plik `PIN_MOJA_KONFIGURACJA_34.vhd` w edytorze tekstu.
3. Zmień nazwę pakietu (package) w nagłówku i stopce pliku:
   ```vhdl
   package PIN_MOJA_KONFIGURACJA_34 is
   ...
   end PIN_MOJA_KONFIGURACJA_34;
   ```
4. **Zdefiniuj moduły sprzętowe (`ModuleID`):**
   W sekcji `constant ModuleID` określasz, ile maksymalnie sprzętowych modułów (StepGen, QCount, PWM) ma być aktywnych w strukturze FPGA.
5. **Przypisz piny do funkcji (`PinDesc`):**
   W sekcji `constant PinDesc` przypisujesz fizycznym pinom `I/O` odpowiednie funkcje.
   *   Przypisanie jako StepGen (krok): `IOPortTag & x"00" & StepGenTag & StepGenStepPin`
   *   Przypisanie jako StepGen (kierunek): `IOPortTag & x"00" & StepGenTag & StepGenDirPin`
   *   Przypisanie jako standardowe wejście/wyjście (GPIO): `IOPortTag & x"00" & NullTag & NullPin`
   *   *Uwaga:* Druga kolumna bajtowa (np. `x"00"`, `x"01"`) określa numer instancji danego modułu (np. StepGen 0, StepGen 1...).

---

## Krok 4: Podłączenie konfiguracji w projekcie
Musisz poinstruować plik główny (Top-level), aby użył Twojej nowej konfiguracji:
1. Otwórz plik **`TopEthernet16HostMot2_efx.vhd`**.
2. Odszukaj listę klauzul `use work.PIN_...`.
3. Zakomentuj obecnie aktywną linię (wstawiając `--` na początku), np.:
   ```vhdl
   --use work.PIN_PBXMAXD_34.all;
   ```
4. Dodaj i odkomentuj swoją konfigurację:
   ```vhdl
   use work.PIN_MOJA_KONFIGURACJA_34.all;
   ```

---

## Krok 5: Kompilacja w Efinity IDE
1. Uruchom program **Efinity IDE**.
2. Otwórz projekt, wybierając plik **`seveni92t.xml`** z folderu roboczego.
3. Dodaj swój nowy plik `PIN_MOJA_KONFIGURACJA_34.vhd` do listy plików projektu w zakładce *Design* (jeśli nie został automatycznie dodany).
4. Kliknij przycisk **Generate Bitstream** (ikona odtwarzania/zielona strzałka).
5. Środowisko przeprowadzi syntezę, placement i routing. 
6. Po pomyślnej kompilacji, gotowy plik wyjściowy `.bin` znajdziesz w podkatalogu **`outflow/`** (np. `seveni92t.bin`).

---

## Krok 6: Wgranie nowego firmware na kartę
Gdy masz już skompilowany plik `.bin`, wgraj go za pomocą programu `mesaflash`:

1.  **Zapisz firmware do pamięci użytkownika:**
    ```bash
    mesaflash --device 7i92t --addr 192.168.1.121 --write outflow/seveni92t.bin
    ```
2.  **Zweryfikuj poprawność zapisu:**
    ```bash
    mesaflash --device 7i92t --addr 192.168.1.121 --verify outflow/seveni92t.bin
    ```
3.  **Załaduj nowy firmware (reset karty):**
    ```bash
    mesaflash --device 7i92t --addr 192.168.1.121 --reload
    ```
    *Po przeładowaniu karta zacznie działać z Twoją własną konfiguracją pinów.*
