STM32F1 ETHERNET

  • 174 Replies
  • 5821 Views
*

Offline tha

  • *****
  • 2942
    • View Profile
Re: STM32F1 ETHERNET
« Reply #32 on: February 19, 2021, 07:07:15 am »
Transmit operation—Two packets in the buffer

1.    เนื่องจาก the DMA ต้องอัปเดต the descriptor status ก่อนปล่อยมันไปยัง the Host, สามารถมีได้มากที่สุดสองเฟรมภายใน a
       transmit FIFO. The second frame ถูก fetched โดย the DMA และใส่ลงใน the FIFO เฉพาะถ้า the OSF (ทำงานบน
       second frame) bit ถูกเซ็ต. ถ้าบิตนี้ไม่ถูกเซ็ต, the next frame ถูก fetched จาก the memory เฉพาะหลังจาก the MAC ได้
       กระบวนการ the frame เสร็จสมบูรณ์แล้วและ the DMA ได้ปลดปล่อย the descriptors.
2.    ถ้า the OSF bit ถูกเซ็ต, the DMA สตาร์ทการดึง the second frame โดยทันทีหลังจากเสร็จสิ้นการส่งถ่ายของ the first frame
       ไปยัง the FIFO. มันไม่รอให้ the status ถูกปรับปรุง. ในระหว่างนี้, the second frame ถูกรับลงใน the FIFO ในขณะที่ the first
       frame กำลังถูกส่ง. ทันทีที่ the first frame ถูกส่งถ่ายแล้วและ the status ถูกรับจาก the MAC, มันถูกผลักไปยัง the DMA. ถ้า
       the DMA เสร็จสิ้นการส่ง the second packet ไปยัง the FIFO แล้ว, the second transmission ต้องรอสำหรับ the status
       ของ the first packet ก่อนดำเนินการต่อ the next frame

*

Offline tha

  • *****
  • 2942
    • View Profile
Re: STM32F1 ETHERNET
« Reply #33 on: February 19, 2021, 09:20:55 am »
Retransmission during collision

ในขณะที่ a frame กำลังถูกส่งถ่ายไปยัง the MAC, a collision event อาจเกิดขึ้นบน the MAC line อินเตอร์เฟสใน Half-duplex mode. The MAC จากนั้นจะแสดงให้เห็น a retry พยายามโดยการให้ the status ก่อน the end of frame ถูกรับ. จากนั้น the retransmission ถูกเปิดการใช้งานและ the frame ถูก popped out อีกครั้งจาก the FIFO. หลังจากมากกว่า 96 bytes ถูก popped ไปยัง the MAC core, the FIFO controller ปลดปล่อยพื้นที่นั้นและทำมันให้มีประโยชน์ต่อ the DMA เพื่อใส่ data ให้มากขึ้น. นี้หมายความว่า the retransmission ไม่สามารถทำได้หลังจาก threshold นี้ถูกข้ามหรือเมื่อ the MAC core แสดงให้เห็น a late collision event

*

Offline tha

  • *****
  • 2942
    • View Profile
Re: STM32F1 ETHERNET
« Reply #34 on: February 20, 2021, 07:18:53 am »
Transmit FIFO flush operation

The MAC จัดให้มี a control ไปยัง the software เพื่อล้าง the Transmit FIFO ผ่านทางการใช้ของ Bit 20 ใน the Operation mode register. The Flush operation จะเกิดขึ้นทันทีและ the Tx FIFO และ the corresponding pointers ถูกเคลียร์ไปยัง the initial state ถึงแม้ว่า the Tx FIFO จะอยู่ในตรงกลางของการส่งถ่าย a frame ไปยัง the MAC Core. ซึ่งส่งผลให้เกิด an underflow event ใน the MAC transmitter, และ the frame transmission ถูกยกเลิก. The status ของ a frame ดังกล่าวถูกทำเครื่องหมายที่มีทั้ง underflow และ frame flush events (TDES0 bits 13 and 1). ไม่มี data มาถึง the FIFO จาก the application (DMA) ในระหว่าง the Flush operation. Transfer ส่ง status words ถูกส่งถ่ายไปยัง the application สำหรับจำนวนของ frames ที่ถูกล้าง (รวมทั้ง partial frames). Frames ที่ถูกล้างเสร็จสมบูรณ์มี the Frame flush status bit (TDES0 13) เซ็ต. The Flush operation เสร็จสมบูรณ์เมื่อ the application (DMA) ยอมรับทั้งหมดของ the Status words สำหรับ the frames ที่ถูกล้างแล้ว. The Transmit FIFO Flush control register bit จากนั้นถูกเคลียร์. ณ จุดนี้, new frames จาก the application (DMA) ถูกยอมรับ. data ทั้งหมดที่นำเสนอสำหรับ transmission หลังจาก a Flush operation ถูกละทิ้งเว้นแต่พวกมันสตาร์ทด้วย an SOF marker.

*

Offline tha

  • *****
  • 2942
    • View Profile
Re: STM32F1 ETHERNET
« Reply #35 on: February 20, 2021, 10:53:40 am »
Transmit status word

ที่ the end of the Ethernet frame ส่งถ่ายไปยัง the MAC core และหลังจาก the core เสร็จสมบูรณ์ the transmission of the frame แล้ว, the transmit status ถูกให้ไปยัง the application. The detailed description of the Transmit Status เป็นอย่างเดียวกับ bits [23:0] ใน TDES0. ถ้า IEEE 1588 time stamping ถูกเปิดการใช้งาน, a specific frames’ 64-bit time stamp ถูกส่งคืนกลับ, พร้อมกับ the transmit status.

*

Offline tha

  • *****
  • 2942
    • View Profile
Re: STM32F1 ETHERNET
« Reply #36 on: February 21, 2021, 07:26:41 am »
Transmit checksum offload

Communication protocols อย่างเช่น TCP and UDP จัดให้มีใช้ checksum fields, ซึ่งช่วยตรวจสอบความสมบูรณ์ของ data ที่ส่งผ่าน a network. เพราะแพร่หลายมากที่สุดการใช้ของ Ethernet คือเพื่อห่อหุ้ม TCP and UDP ผ่าน IP datagrams, the Ethernet controller มี a transmit checksum offload feature ที่รองรับ checksum calculation และใส่ใน the transmit path, และ error detection ใน the receive path. ส่วนนี้อธิบายการทำงานของ the checksum offload feature สำหรับ transmitted frames.

Note: The checksum สำหรับ TCP, UDP or ICMP ถูกคำนวณบน a complete frame, จากนั้นใส่ลงใน corresponding header
          field ของมัน. เนื่องจากความต้องการนี้, function นี้ถูกเปิดการใช้งานเฉพาะเมื่อ the Transmit FIFO ถูกกำหนดค่าสำหรับ Store-
          and-forward mode (นั่นคือ, เมื่อ the TSF bit ถูกเซ็ตใน the ETH_ETH_DMAOMR register). ถ้า the core ถูกกำหนดค่า
          สำหรับ Threshold (การตัดผ่าน) mode, the Transmit checksum offload จะถูกข้ามผ่าน.

          คุณต้องทำให้แน่ใจว่า the Transmit FIFO มีความลึกเพียงพอเพื่อเก็บ a complete frame ก่อนที่ frame ถูกส่งถ่ายไปยัง the
          MAC Core transmitter. ถ้า the FIFO depth น้อยกว่า the input Ethernet frame size, the payload
          (TCP/UDP/ICMP) checksum insertion function จะถูกข้ามผ่านและเฉพาะ the frame’s IPv4 Header checksum ถูก
          แก้ไข, แม้ใน Store-and-forward mode

*

Offline tha

  • *****
  • 2942
    • View Profile
Re: STM32F1 ETHERNET
« Reply #37 on: February 22, 2021, 07:23:20 am »
The transmit checksum offload รองรับ two types of checksum calculation และ insertion. checksum นี้สามารถถูกสำหรับแต่ละ frame โดยการเซ็ต the CIC bits (Bits 28:27 ใน TDES1, ที่อธิบายใน TDES1: Transmit descriptor Word1).

ดู IETF specifications RFC 791, RFC 793, RFC 768, RFC 792, RFC 2460 and RFC 4443 สำหรับ IPv4, TCP, UDP, ICMP, IPv6 and ICMPv6 packet header specifications, ตามลำดับ.
•    IP header checksum
      ใน IPv4 datagrams, ความสมบูรณ์ของ the header fields ถูกแสดงให้เห็นโดย the 16-bit header checksum field (ที่สิบเอ็ด
      และที่สิบสอง bytes ของ the IPv4 datagram). The checksum offload ตรวจพบ an IPv4 datagram เมื่อ the Ethernet
      frame’s Type field มีค่า 0x0800 และ the IP datagram’s Version field มีค่า 0x4. The input frame’s checksum field
      ถูกละเว้นในระหว่าง calculation และถูกแทนที่โดย the calculated value. IPv6 headers ไม่มี a checksum field; ดังนั้น, the
      checksum offload ไม่แก้ไข IPv6 header fields. ผลของ this IP header checksum calculation ถูกแสดงให้เห็นโดย the
      IP Header Error status bit ใน the Transmit status (Bit 16). status bit นี้ถูกเซ็ตเมื่อไรก็ตามที่ค่า the Ethernet Type
      field และ the IP header’s Version field ไม่มีความสม่ำเสมอ, หรือเมื่อ the Ethernet frame ไม่มี data เพียงพอ, ดังที่แสดงให้
      เห็นโดย the IP header Length field. กล่าวอีกนัยหนึ่ง, บิตนี้ถูกเซ็ตเมื่อ an IP header error ถูกถือสิทธิ์ภายใต้สถานการณ์ต่อไป
      นี้:
      a)    สำหรับ IPv4 datagrams:
      –    The received Ethernet type คือ 0x0800, แต่ the IP header’s Version field ไม่เท่ากับ 0x4
      –    The IPv4 Header Length field แสดงให้เห็น a value ที่น้อยกว่า 0x5 (20 bytes)
      –    The total frame length น้อยกว่า the value ที่ให้ไว้ใน the IPv4 Header Length field
      b)    สำหรับ IPv6 datagrams:
      –    The Ethernet type คือ 0x86DD แต่ the IP header Version field ไม่เท่ากับ 0x6
      –    The frame สิ้นสุดก่อน the IPv6 header (40 bytes) หรือ extension header (ดังที่ให้ไว้ใน the corresponding
            Header Length field ใน an extension header) ถูกรับเสร็จสมบูรณ์แล้ว. แม้ว่าเมื่อ the checksum offload ตรวจพบ an
            IP header error ดังกล่าว, มันแทรก an IPv4 header checksum ถ้า the Ethernet Type field แสดงให้เห็น an IPv4
            payload.

*

Offline tha

  • *****
  • 2942
    • View Profile
Re: STM32F1 ETHERNET
« Reply #38 on: February 22, 2021, 09:37:32 am »
•    TCP/UDP/ICMP checksum

      The TCP/UDP/ICMP checksum ประมวลผล the IPv4 or IPv6 header (รวมถึง extension headers) และตัดสินว่า the
      encapsulated payload คือ TCP, UDP or ICMP.

      โปรดทราบว่า :
      a)    สำหรับ non-TCP, -UDP, or -ICMP/ICMPv6 payloads, checksum นี้ถูกข้ามผ่านและไม่มีอะไรเพิ่มเติมถูกแก้ไขใน the
              frame.
      b)    Fragmented IP frames (IPv4 or IPv6), IP frames ที่มี security features (อย่างเช่น an authentication header
             หรือ encapsulated security payload), และ IPv6 frames ที่มี routing headers ถูกข้ามผ่านและไม่ถูกประมวลผลโดย
              the checksum.

      The checksum ถูกคำนวณสำหรับ the TCP, UDP, or ICMP payload และใส่ลงในฟิลด์ที่ตรงกันใน the header. Iมันสามารถ
      ทำงานในสองโหมดต่อไปนี้:
      –    ใน the first mode, the TCP, UDP, or ICMPv6 pseudo-header ไม่ถูกรวมไว้ใน the checksum calculation และถูก
            ทึกทักเอาว่ามีอยู่ใน the input frame’s checksum field. The checksum field ถูกรวมใน the checksum calculation,
            และจากนั้นถูกแทนที่โดย the final calculated checksum
      –    ใน the second mode, the checksum field ถูกละเว้น, the TCP, UDP, or ICMPv6 pseudo-header data ถูกรวมลงใน
            the checksum calculation, และ the checksum field ถูกเขียนทับด้วย the final calculated value.

      โปรดทราบว่า: for ICMP-over-IPv4 packets, the checksum field ใน the ICMP packet ต้องเป็น 0x0000 เสมอในทั้งสอง
      โหมด, เพราะว่า pseudo-headers ไม่ถูกกำหนดสำหรับ packets ดังกล่าว. ถ้ามันไม่เท่ากับ 0x0000, an incorrect checksum
      อาจถูกใส่ลงใน the packet.

*

Offline tha

  • *****
  • 2942
    • View Profile
Re: STM32F1 ETHERNET
« Reply #39 on: February 22, 2021, 10:58:36 am »
   ผลของการทำงานนี้ถูกแสดงให้เห็นโดย the payload checksum error status bit ใน the Transmit Status vector (bit 12).
   The payload checksum error status bit ถูกเซ็ตเมื่ออย่างใดอย่างหนึ่งของต่อไปนี้ถูกตรวจพบ :
   –    the frame ถูกส่งต่อไปยัง the MAC transmitter ใน Store-and-forward mode ไม่มี the end of frame ถูกเขียนไปยัง the
         FIFO
   –    the packet สิ้นสุดก่อนจำนวนของ bytes ที่แสดงให้เห็นโดย the payload length field ใน the IP header ถูกรับ.

   เมื่อ the packet ยาวกว่า the indicated payload length, the bytes ถูกละเว้นเช่น stuff bytes, และไม่มี error ถูกรายงาน. เมื่อ
   the first type of error ถูกตรวจพบ, the TCP, UDP or ICMP header ไม่ถูกแก้ไข. สำหรับ the second error type, ยังคง, the
   calculated checksum ถูกแทรกลงใน the corresponding header field.