Wiznet makers

TheoIm

Published April 02, 2026 ©

80 UCC

27 WCC

7 VAR

0 Contests

0 Followers

0 Following

Original Link

GLITCH-Software

GLITCH-Software

COMPONENTS
PROJECT DESCRIPTION
# GLITCH 프로젝트 설명서 (WIZnet 포함)


 

## 1) 프로젝트 한눈에 보기


 

GLITCH 프로젝트는 **FPGA(실험 데이터 생성/수집) + MCU(ESP32, 통신 브리지) + Ground Station(Python GUI)**로 구성된 텔레메트리/텔레커맨드 통합 시스템입니다.


 

핵심 목표는 다음과 같습니다.


 

- FPGA에서 생성한 실험 데이터를 안정적으로 수집
- MCU에서 데이터 패킷을 정렬/검증/전송
- 지상국에서 실시간 시각화 및 저장
- 지상국 명령(TC)을 다시 MCU/FPGA로 전달해 실험 모드 제어


 

---


 

## 2) WIZnet 칩 사용 여부와 위치


 

결론: **이 프로젝트 MCU 경로에서 WIZnet W5500을 사용합니다.**


 

근거 코드:


 

- W5500 초기화 함수: `MCU/ethernet_test/components/ethernet/ethernet.c`
  - `init_wiz550io_eth()`
  - `ETH_W5500_DEFAULT_CONFIG(...)`
  - `esp_eth_mac_new_w5500(...)`
  - `esp_eth_phy_new_w5500(...)`
- 실제 이더넷 초기화 진입점에서 W5500 초기화 호출:
  - `ethernet_setup()` 내부 `init_wiz550io_eth()` 호출


 

즉, **ESP32 + SPI + W5500** 조합으로 Ethernet 인터페이스를 구성하고, TCP 서버를 통해 Ground Station과 통신합니다.


 

> 참고: 동일 파일에 내부 EMAC/IP101 계열 초기화 함수(`eth_init`)도 존재하지만, 현재 메인 초기화 경로는 `init_wiz550io_eth()`입니다.


 

---


 

## 3) 시스템 블록도


 

```mermaid
flowchart LR
    A[FPGA<br/>Sensor/GNSS/SRAM Bitflip Logic<br/>VHDL] -->|UART TM| B[MCU ESP32<br/>UART 수신 + 패킷 재포맷]
    B -->|TCP Downlink<br/>W5500 Ethernet| C[Ground Station<br/>Python GUI]
    C -->|TCP Uplink TC| B
    B -->|UART TC 전달| A


 

    B --> D[(SD Storage<br/>옵션)]
    C --> E[(CSV/LOG 저장)]
```


 

---


 

## 4) 전체 동작 시퀀스 (다운링크)


 

```mermaid
sequenceDiagram
    participant FPGA
    participant MCU_UART as MCU UART Task
    participant MCU_TCP as MCU TCP Server
    participant GS as Ground Station


 

    FPGA->>MCU_UART: UART 텔레메트리(HK/BF/RAD/ACK)
    MCU_UART->>MCU_UART: ID 판별, 길이 체크, pack_tm(), CRC 처리
    MCU_UART->>MCU_TCP: buffer_add_tm()로 전송 큐 적재
    MCU_TCP->>GS: TCP send(TM packet)
    GS->>GS: parse(), CRC 검증, 타입별 디코딩
    GS->>GS: GUI 갱신(그래프/통계) + 로그 저장
```


 

---


 

## 5) 전체 동작 시퀀스 (업링크/제어)


 

```mermaid
sequenceDiagram
    participant GS as Ground Station
    participant MCU_TCP as MCU TCP Server
    participant MCU_UART as MCU UART Task
    participant FPGA


 

    GS->>GS: build_telecommand(seq, tc_code), CRC 생성
    GS->>MCU_TCP: TCP로 TC 패킷 전송
    MCU_TCP->>MCU_TCP: unpack_tc(), CRC 검증
    MCU_TCP->>MCU_TCP: format_ack()로 ACK 생성
    MCU_TCP->>MCU_UART: buffer_add_tc(tc)
    MCU_UART->>FPGA: UART로 TC code 송신
    MCU_TCP->>GS: ACK 패킷 송신
```


 

---


 

## 6) 코드 기반 아키텍처 맵 (어떤 시퀀스가 어디에 있는가)


 

## A. Ground Station (Python)


 

- 진입점/앱 실행
  - `ground_station/main.py`
  - `TelemetryManager` 시작 + GUI 런치


 

- 네트워크 수신, 연결 재시도, 패킷 통계
  - `ground_station/telemetry/telemetry_manager.py`
  - TCP connect/recv 루프, 파싱 호출, 콜백 전달, 로그 처리


 

- 패킷 검증/파싱
  - `ground_station/receiver/packet_parser.py`
  - 길이 기반 타입 판별, CRC 검증, 필드 파싱


 

- 패킷 타입/필드 정의
  - `ground_station/receiver/packet_structures.py`
  - HK/BF/RAD/ACK 구조 정의


 

- GUI/시각화/명령 버튼
  - `ground_station/gui/dashboard.py`
  - HK/BF/RAD/ACK 패널, 그래프(온도/고도), TC 전송 UI


 

- 업링크 생성
  - `ground_station/uplink/uplink_sender.py`
  - TC 패킷 조립(시퀀스/CRC) 후 기존 TCP 소켓으로 송신


 

- TC 코드 정의
  - `ground_station/uplink/tc_types.py`
  - RESET, CHANGE MODE, SEND HELLO, SET RTC, CLEAR SD, CUT OFF


 

- 저장/기록
  - `ground_station/storage/logger.py`
  - 정상 패킷/손상 패킷 로그 저장


 

## B. MCU (ESP32 + Ethernet)


 

- 시스템 시작/태스크 구성
  - `MCU/ethernet_test/main/main.c`
  - `ethernet_setup()` + `tcp_server_task` + `uart_task` 초기화


 

- W5500 Ethernet 초기화 및 TCP 서버
  - `MCU/ethernet_test/components/ethernet/ethernet.c`
  - W5500 SPI 설정, netif attach, IP 이벤트, TCP accept/recv/send


 

- UART 브리지
  - `MCU/ethernet_test/components/uart/uart.c`
  - FPGA UART 수신, ID별 길이 처리, 패킷 버퍼 큐 전달


 

- 패킷 포맷/CRC/ACK
  - `MCU/ethernet_test/components/format/format.c`
  - `pack_tm`, `unpack_tc`, `format_ack`, CRC 검증


 

- 테스트 패킷 생성(개발용)
  - `MCU/ethernet_test/components/packet_generation/packet_generation.c`


 

## C. FPGA (VHDL)


 

- 텔레메트리 패킷 생성
  - `FPGA/Code/Packet_gen.vhd`


 

- TM 바이트 스트리밍(UART TX 연동)
  - `FPGA/Code/TM_packet_sender.vhd`


 

- 모드 제어(파워세이브/파워온/컷오프)
  - `FPGA/Code/Mode_control.vhd`


 

- 기타 센서/포맷/분배 블록
  - `FPGA/Code/HK_formatter.vhd`
  - `FPGA/Code/BITFLIP_formatter.vhd`
  - `FPGA/Code/RAD_formatter.vhd`
  - `FPGA/Code/TC_Distributor.vhd`
  - `FPGA/Code/I2C_*.vhd`, `GNSS_*.vhd`


 

---


 

## 7) 패킷 관점 요약


 

Ground Station 파서 기준 주요 타입:


 

- HK: 하우스키핑(시퀀스, RTC, GNSS, 온도, 고도 등)
- BF: 비트플립 정보(에러 주소/데이터/SRAM 인덱스 등)
- RAD: 대용량 방사선 데이터
- ACK: 텔레커맨드 응답


 

공통적으로 CRC 기반 무결성 검증을 수행하며, 실패 시 corrupt 로그로 분리 기록합니다.


 

---


 

## 8) 발표용 포인트 (WIZnet 사례 강조)


 

1. **왜 WIZnet인가**
   - ESP32에서 SPI 기반으로 Ethernet(TCP/IP) 연결을 안정적으로 제공
   - UART 전용 링크보다 지상국과의 네트워크 통합/운영이 용이


 

2. **프로젝트에서 실제로 어떻게 쓰였나**
   - `init_wiz550io_eth()`에서 W5500 MAC/PHY를 생성
   - `ethernet_setup()`에서 netif attach 및 IP/링크 이벤트 구성
   - `tcp_server_task`에서 수신(TC) + 송신(TM) 동시 처리


 

3. **시스템 기여**
   - FPGA 실험 데이터의 지상 전송 경로를 표준 TCP로 구성
   - Ground Station GUI와 실시간 양방향 제어(Downlink + Uplink) 달성


 

---


 

## 9) 현재 저장소 기준 실행 흐름 요약


 

1. MCU 부팅 후 Ethernet(W5500) 초기화
2. TCP 서버 태스크 시작
3. UART 태스크 시작, FPGA 데이터 수신
4. MCU가 패킷을 재포맷하여 TCP로 지상국 송신
5. Ground Station이 파싱/시각화/저장
6. Ground Station 명령을 TCP로 MCU에 전송
7. MCU가 FPGA로 TC 전달 + ACK 생성/반송


 

---


 

## 10) 관련 상위 문서


 

- 루트 소개: `README.md`
- Ground Station 소개: `ground_station/README.md`
- FPGA 개요: `FPGA/README.md`


 

이 문서는 위 코드 기준으로, **WIZnet(W5500) 사용이 포함된 실제 구현 경로**를 중심으로 정리한 프로젝트 설명서입니다.


 

Documents
Comments Write