* Ethernet MAC 10/100 Mbps

Issue List
Disabling the transmitter while sending data #10
Open ryzhyk opened this issue almost 13 years ago
ryzhyk commented almost 13 years ago

Problem symptoms:

Disabling the transmitter (writing 0 to the transmitter enabled bit of the MODER register) while the transmitter is working (i.e., there are buffer descriptors marked as ready in the circular buffer) and reenabling it later will cause the transmitter to skip the first buffer descriptor (BD#0) and to start sending from the second descriptor (BD#1).

Probable cause:

The exact sequence of events inside the device seems to be as follows:

  • The device is in the process of sending a packet when the user resets the transmitter enabled bit. The transmitter does not stop until the current frame is transmitted completely.
  • Once the transmission is complete, the
ryzhyk commented almost 13 years ago
  • Once the transmission is complete, the TxDonePacket_NotCleared register is set to 1 and, because TxEn is now deasserted, it will remain in this state until the transmitter is reenabled.
  • eventually, the transmitter is reenabled. At this point, the TxBDAddress register is set to 0.
  • The TxDonePacket_NotCleared register is finally reset to 0; however before this it will force the TxStatusWrite wire to 1 for a single cycle. This will in turn cause the TxBDAddress register to be incremented. And so, instead of starting the transmission from BD#0, the transmitter will start looking at BD#1.
ryzhyk commented almost 13 years ago

I think I've observed another similar bug, where disabling only the receiver, but leaving the transmitter on forced the transmitter to skip over one BD; however I don't have an explanation for this behaviour.

No one