-
Pengiriman paket Ethernet
- Penulis ingin membuat sebuah seri bernama "Networking from scratch" dan memulai proyek membangun stack TCP/IP pada mikrokontroler.
- Tulisan blog ini membagikan kisah berhasil mengirim paket Ethernet pertama serta pengalaman menghadapi bug dan debugging dalam proyek tersebut.
-
Mikrokontroler
- Mikrokontroler yang digunakan adalah STM32F401, berbasis ARM Cortex-M4 dan berjalan hingga 84MHz.
- Mikrokontroler ini memiliki RAM 96KiB, sehingga menyediakan kapasitas yang cukup untuk memproses beberapa paket.
-
Ethernet
- Ethernet adalah konsep yang mencakup berbagai teknologi dan standar, termasuk perangkat keras pada level fisik, format sinyal, strategi penanganan tabrakan bus, tata letak frame, dan lain-lain.
- Dalam proyek ini digunakan chip W5100 dari Wiznet, yang memiliki stack TCP/IP perangkat keras bawaan.
-
Masalah 1: Berteriak ke kehampaan
- Penulis menulis driver untuk berkomunikasi dengan chip W5100, tetapi komunikasi tidak terjadi karena sinyal SPI terhubung secara salah.
- Masalah muncul karena header ICSP pada shield Arduino menghubungkan sinyal SPI secara keliru, dan papan kemudian dikerjakan ulang untuk memperbaikinya.
-
Masalah 2: Hakikat komedi
- Bahkan setelah sinyal SPI terhubung dengan benar, pengiriman paket Ethernet tetap tidak berjalan semestinya.
- Dengan menggunakan logic analyzer untuk menganalisis sinyal digital, penulis menyelesaikan masalah timing pada sinyal chip select dan berhasil membuat komunikasi berjalan.
-
Masalah 3: Paket yang tidak dikenal
- Di Wireshark, yang muncul adalah paket yang salah, bukan paket yang sebenarnya dikirim.
- Dengan merujuk ke library Arduino, penulis menganalisis masalah tersebut dan menyelesaikannya dengan memperbaiki bug yang menulis data ke alamat memori yang salah.
-
Pelajaran dari kisah ini
- Mengirim paket Ethernet mungkin tampak sebagai pencapaian kecil, tetapi pengalaman menghadapi bug dan debugging dalam proyek ini sangat berharga.
- Debugging dan pembuatan alat merupakan bagian penting dari proses pengembangan, dan memahami sistem melalui eksplorasi serta eksperimen adalah hal yang penting.
- Proyek ini masih terus berjalan sambil menangani masalah dan bug pada tingkat abstraksi yang lebih tinggi.
1 komentar
Opini Hacker News
Menulis alat dan mengeksplorasi debugging selalu bernilai. Namun banyak orang tidak memahaminya, dan terutama dalam proses pengembangan seperti JIRA, mereka sering tidak melihat nilai dari eksplorasi.
Kemampuan membuat alat kecil adalah inti dari programmer dengan produktivitas 10x, dan ini sering kali merupakan seni yang dipraktikkan dalam bayang-bayang.
Ini adalah awal dari seri membangun stack frame TCP/IP dan Ethernet dari nol di atas mikrokontroler. Chip W5100 digunakan untuk menangani TCP/IP dan mendukung frame Ethernet yang sudah dibangun sebelumnya.
Ada yang sedang mengalihkan karier ke rekayasa FPGA dengan fokus pada Ethernet, dan memahami abstraksi jaringan terbukti sangat berharga.
Ada pendapat bahwa alih-alih menggunakan STM32F401 dan Ethernet shield W5100, akan lebih baik memakai board STM32F407 dan board Ethernet PHY murah.
Fitur Ethernet umumnya disertakan sebagai periferal yang tertanam di dalam mikrokontroler.
Ini pertama kalinya melihat penamaan baru untuk MOSI/MISO, yaitu main out/subordinate in, dan alternatif COPI/CIPO tidak terlalu dipahami.
Untuk menulis stack jaringan di Linux, Anda dapat menggunakan
socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)).Board STM32 Nucleo memiliki Ethernet 100Mbps bawaan, dan perangkat lunak STM32Cube mendapat penilaian yang beragam tetapi menyediakan contoh yang berfungsi.
Ethernet menangani frame, sedangkan paket adalah konsep IP.
ENC28J60 'Stand-Alone Ethernet Controller with SPI Interface' dapat dipertimbangkan; karena tidak memiliki stack TCP/IP perangkat keras, implementasi perangkat lunak diperlukan.