2.2. Bus Reset

A bus reset occurs whenever the state of any node changes (including addition and removal of nodes). At the beginning a root node is chosen, then the tree identification determines for every node which port is connected to a parent, child or nothing. Then the SelfID phase begins. The root node sends a SelfID grant on its first port connected to a child. If that is not a leaf node, it will itself forward the grant to its first child. When a leaf node gets a grant, it will pick the lowest physical ID not yet in use (starting with 0) and send out a SelfID packet with its physical ID and more information, then acknowledge the SelfID grant to its parent, which will send a grant to its next child until it configured all its children, then pick a physical ID itself, send SelfID packet and ack to parent.

After bus reset the used physical IDs are in a sequential range with no holes starting from 0 up to the root node having the highest ID. This also means that physical IDs can change for many or all nodes with the insertion of a new node or moving the role of root to another node. In libraw1394 all transactions are tagged automatically with a generation number which is increased in every bus reset and transactions with an obsolete generation will fail in order to avoid targetting the wrong node. Nodes have to be identified in a different way than their volatile physical IDs, namely by reading their globally unique ID (GUID) contained in the configuration ROM.