A Node shall test each connected port of its PHY and if a bus reset is detected, portRArb[i] == BUS_RESET, and busInitializeActive, the PHY is currently in a bus initialize state (R1|T0|T1|T2|T3|S0|S1|S2|S3|S4), the PHY will block the propagation, repeat_Bus_Reset = FALSE, the received bus reset to its other active ports. The PHY port receiving the bus reset responds with bus reset, return_Bus_Reset[i] = TRUE. When the other ports transition out of a bus initialize state, busInitializeActive = FALSE, the received bus reset is then repeated to its other active ports, repeat_Bus_Reset = TRUE.
This behavior was designed into the IEEE-1394-2008 standard to detect a loop between Alpha nodes during bus initialization as described in the IEEE-1394-2008 section “14.7.13 Loop detection during bus initialization”:
Some loop conditions may be detected during bus initialization. They are:
- Configuration timeout (in the T0: Tree ID Start state), which can occur if the node is on a loop and either that loop includes one or more Alpha nodes or the loop is formed as a result of a connection on the bus being resumed.
- Arbitration state timeout, which can occur up to the time when the port enters the S1: Self-ID Grant or S2: Self-ID Receive state if the node is connected to a network of Alpha nodes that are in a loop.
- Repeated resets, which can occur in similar circumstances to condition b with a loop on a network that includes IEEE 1394 nodes that use a shorter arbitration state timeout.”
In most cases this functionality is desirable. Also, some applications can guarantee either Alpha nodes are not preset, Beta nodes only, or Alpha nodes cannot be connected in a loop. Furthermore, in some environments, it is possible that bus resets can be generated quickly enough to cause a Beta node PHY port to incorrectly disable a connection between two different nodes for reasons other than a loop between Alpha nodes.