2P by neo 3일전 | favorite | 댓글 1개
  • 이더넷 패킷 전송

    • 저자는 "Networking from scratch"라는 시리즈를 만들고자 했으며, 마이크로컨트롤러에서 TCP/IP 스택을 구축하는 프로젝트를 시작했음.
    • 이 블로그 글은 첫 이더넷 패킷을 성공적으로 전송한 이야기와 프로젝트에서의 버그 및 디버깅에 대한 경험을 공유함.
  • 마이크로컨트롤러

    • 사용된 마이크로컨트롤러는 STM32F401이며, ARM Cortex-M4 기반으로 최대 84MHz로 동작함.
    • 96KiB의 RAM을 가지고 있어 여러 패킷을 처리할 수 있는 충분한 용량을 제공함.
  • 이더넷

    • 이더넷은 다양한 기술과 표준을 포함하는 개념으로, 물리적 수준의 하드웨어, 신호 형식, 버스 충돌 처리 전략, 프레임 레이아웃 등을 포함함.
    • 이 프로젝트에서는 Wiznet의 W5100 칩을 사용하며, 이 칩은 하드웨어 TCP/IP 스택을 내장하고 있음.
  • 문제 1: 공허 속에서 외치기

    • W5100 칩과의 통신을 위한 드라이버를 작성했으나, SPI 신호가 잘못 연결되어 통신이 이루어지지 않았음.
    • Arduino 쉴드의 ICSP 헤더가 SPI 신호를 잘못 연결하여 문제가 발생했으며, 이를 수정하기 위해 보드를 재작업함.
  • 문제 2: 코미디의 본질

    • SPI 신호가 올바르게 연결된 후에도, 이더넷 패킷 전송이 제대로 이루어지지 않았음.
    • 논리 분석기를 사용하여 디지털 신호를 분석하고, 칩 선택 신호의 타이밍 문제를 해결하여 통신을 성공적으로 수행함.
  • 문제 3: 알 수 없는 패킷

    • Wireshark에서 전송한 패킷이 아닌 잘못된 패킷이 나타났음.
    • Arduino 라이브러리를 참고하여 문제를 분석하고, 잘못된 메모리 주소에 데이터를 기록하는 버그를 수정하여 문제를 해결함.
  • 이야기의 교훈

    • 이더넷 패킷 전송은 작은 성과일 수 있지만, 프로젝트에서의 버그와 디버깅 경험은 가치가 있음.
    • 디버깅과 도구 작성은 개발 과정에서 중요한 부분이며, 탐구와 실험을 통해 시스템을 이해하는 것이 중요함.
    • 프로젝트는 더 높은 추상화 수준의 문제와 버그를 다루며 진행 중임.
Hacker News 의견
  • 도구를 작성하고 디버깅을 탐색하는 것은 항상 가치가 있음. 그러나 많은 사람들이 이를 이해하지 못하고, 특히 JIRA와 같은 개발 프로세스에서 탐색의 가치를 보지 못하는 경우가 많음.

  • 작은 도구를 만드는 능력은 10배 생산성을 가진 프로그래머의 핵심이며, 이는 종종 그림자 속에서 실천되는 예술임.

  • TCP/IP와 Ethernet 프레임 스택을 마이크로컨트롤러에서 처음부터 구축하는 시리즈의 시작임. W5100 칩을 사용하여 TCP/IP를 처리하고, 사전 구축된 Ethernet 프레임을 지원함.

  • FPGA 엔지니어링으로 경력을 전환하여 Ethernet에 집중하고 있으며, 네트워킹의 추상화를 이해하는 것이 매우 가치가 있었음.

  • STM32F401과 W5100 Ethernet 쉴드를 사용하는 대신 STM32F407 보드와 저렴한 Ethernet PHY 보드를 사용하는 것이 더 나을 것이라는 의견이 있음.

  • Ethernet 기능은 일반적으로 마이크로컨트롤러 내에 내장된 주변 장치로 포함되어 있음.

  • MOSI/MISO의 새로운 명칭인 main out/subordinate in을 처음 봤으며, COPI/CIPO 대안은 잘 이해되지 않음.

  • Linux에서 네트워크 스택을 작성하려면 socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))를 사용할 수 있음.

  • STM32 Nucleo 보드에는 100Mbps Ethernet이 내장되어 있으며, STM32Cube 소프트웨어는 혼합된 평가를 받지만 작동하는 예제를 제공함.

  • Ethernet은 프레임을 다루며, 패킷은 IP 개념임.

  • ENC28J60 'Stand-Alone Ethernet Controller with SPI Interface'를 고려할 수 있으며, 하드웨어 TCP/IP 스택이 없어 소프트웨어 구현이 필요함.