2 คะแนน โดย GN⁺ 2024-11-12 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การส่งแพ็กเก็ตอีเธอร์เน็ต

    • ผู้เขียนต้องการสร้างซีรีส์ชื่อ "Networking from scratch" และได้เริ่มโปรเจ็กต์สร้าง TCP/IP stack บนไมโครคอนโทรลเลอร์
    • บล็อกโพสต์นี้เล่าถึงเรื่องราวการส่งแพ็กเก็ตอีเธอร์เน็ตแพ็กเก็ตแรกได้สำเร็จ รวมถึงแบ่งปันประสบการณ์เกี่ยวกับบั๊กและการดีบักในโปรเจ็กต์
  • ไมโครคอนโทรลเลอร์

    • ไมโครคอนโทรลเลอร์ที่ใช้คือ STM32F401 ซึ่งใช้ ARM Cortex-M4 และทำงานได้สูงสุดที่ 84MHz
    • มี RAM ขนาด 96KiB ซึ่งเพียงพอสำหรับการจัดการหลายแพ็กเก็ต
  • อีเธอร์เน็ต

    • อีเธอร์เน็ตเป็นแนวคิดที่ครอบคลุมเทคโนโลยีและมาตรฐานหลากหลาย รวมถึงฮาร์ดแวร์ระดับกายภาพ รูปแบบสัญญาณ กลยุทธ์การจัดการการชนกันบนบัส และโครงร่างของเฟรม
    • ในโปรเจ็กต์นี้ใช้ชิป W5100 ของ Wiznet ซึ่งมีฮาร์ดแวร์ TCP/IP stack ในตัว
  • ปัญหาที่ 1: ตะโกนอยู่ในความว่างเปล่า

    • มีการเขียนไดรเวอร์สำหรับสื่อสารกับชิป W5100 แต่ไม่สามารถสื่อสารได้เนื่องจากต่อสัญญาณ SPI ผิด
    • ปัญหาเกิดจาก ICSP header ของ Arduino shield ต่อสัญญาณ SPI ผิด และได้แก้ไขด้วยการดัดแปลงบอร์ดใหม่
  • ปัญหาที่ 2: แก่นแท้ของคอเมดี้

    • แม้จะต่อสัญญาณ SPI ได้ถูกต้องแล้ว การส่งแพ็กเก็ตอีเธอร์เน็ตก็ยังไม่ทำงานอย่างถูกต้อง
    • มีการใช้ logic analyzer เพื่อวิเคราะห์สัญญาณดิจิทัล และแก้ปัญหาเรื่องจังหวะเวลาของสัญญาณ chip select จนสามารถสื่อสารได้สำเร็จ
  • ปัญหาที่ 3: แพ็กเก็ตที่ไม่รู้จัก

    • ใน Wireshark ปรากฏแพ็กเก็ตที่ผิดไปจากแพ็กเก็ตที่ตั้งใจส่ง
    • ผู้เขียนอ้างอิง Arduino library เพื่อวิเคราะห์ปัญหา และแก้บั๊กที่เขียนข้อมูลลงไปยังที่อยู่หน่วยความจำผิด จนแก้ปัญหาได้
  • บทเรียนจากเรื่องนี้

    • การส่งแพ็กเก็ตอีเธอร์เน็ตอาจเป็นความสำเร็จเล็ก ๆ แต่ประสบการณ์เรื่องบั๊กและการดีบักในโปรเจ็กต์มีคุณค่า
    • การดีบักและการเขียนเครื่องมือเป็นส่วนสำคัญของกระบวนการพัฒนา และการสำรวจพร้อมการทดลองเพื่อทำความเข้าใจระบบเป็นสิ่งสำคัญ
    • โปรเจ็กต์ยังคงดำเนินต่อไปพร้อมกับการจัดการปัญหาและบั๊กในระดับนามธรรมที่สูงขึ้น

1 ความคิดเห็น

 
GN⁺ 2024-11-12
ความเห็นบน Hacker News
  • การเขียนเครื่องมือและสำรวจเพื่อดีบักนั้นมีคุณค่าเสมอ แต่หลายคนไม่เข้าใจเรื่องนี้ โดยเฉพาะในกระบวนการพัฒนาอย่าง JIRA ที่มักมองไม่เห็นคุณค่าของการสำรวจ

  • ความสามารถในการสร้างเครื่องมือเล็ก ๆ คือหัวใจของโปรแกรมเมอร์ที่มีประสิทธิภาพสูงกว่าคนทั่วไป 10 เท่า และบ่อยครั้งมันเป็นศิลปะที่ถูกฝึกฝนอยู่เบื้องหลัง

  • นี่คือจุดเริ่มต้นของซีรีส์การสร้างสแตก TCP/IP และ Ethernet frame บนไมโครคอนโทรลเลอร์ตั้งแต่ศูนย์ โดยใช้ชิป W5100 เพื่อจัดการ TCP/IP และรองรับ Ethernet frame ที่สร้างไว้ล่วงหน้า

  • มีการเปลี่ยนสายอาชีพไปสู่งานวิศวกรรม FPGA และมุ่งเน้นที่ Ethernet โดยพบว่าการเข้าใจชั้นนามธรรมของระบบเครือข่ายมีคุณค่ามาก

  • มีความเห็นว่าแทนที่จะใช้ STM32F401 กับ Ethernet shield ของ W5100 การใช้บอร์ด STM32F407 กับบอร์ด Ethernet PHY ราคาถูกจะดีกว่า

  • โดยทั่วไปฟังก์ชัน Ethernet มักถูกรวมมาเป็นอุปกรณ์ต่อพ่วงที่ฝังอยู่ภายในไมโครคอนโทรลเลอร์

  • นี่เป็นครั้งแรกที่ได้เห็นชื่อเรียกใหม่ของ MOSI/MISO ว่า main out/subordinate in และยังไม่ค่อยเข้าใจทางเลือกอย่าง COPI/CIPO

  • หากต้องการเขียน network stack บน Linux สามารถใช้ socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)) ได้

  • บอร์ด STM32 Nucleo มี Ethernet 100Mbps ในตัว และแม้ซอฟต์แวร์ STM32Cube จะได้รับเสียงวิจารณ์แบบก้ำกึ่ง แต่ก็มีตัวอย่างที่ใช้งานได้จริง

  • Ethernet จัดการกับเฟรม ส่วนแพ็กเก็ตเป็นแนวคิดของ IP

  • อาจพิจารณา ENC28J60 ซึ่งเป็น 'Stand-Alone Ethernet Controller with SPI Interface' ได้ แต่เนื่องจากไม่มี hardware TCP/IP stack จึงต้องทำเองในซอฟต์แวร์