SMBus Target address conflicts can be
resolved by dynamically assigning a new unique address to each Target device. The
Address Resolution Protocol (ARP) is used for this.
ARP Flow
Step 1:Prepare to ARP
- Controller sends Prepare to ARP command to all the Targets on the bus by using
Default Device Address
- All Targets will ACK this command and Targets will clear its own address
- All this can be done in software
Step 2: Get UDID
- Controller sends the Get UDID command to all the Targets on the bus
- All Targets return the unique UDID to controller
- Target arbitration happens since all Target are trying to send UDID to master.
This arbitration needs to happen in hardware.
Step 3: Assign address
- Controller sends the Assign Address command to all the Targets.
- This command assigns an address to a specific device. Address ->UDID
- Controller will need to keep track of the used address pool and corresponding to
UDID.
- All Targets will need to monitor the UDID bytes and if it matches then Target
will change the own address to assigned address.
- This step can also be done in software
Repeat Step 2 and 3, till no Ack from the Target on Get UDID command. We can assume
all ARP-capable devices have valid assigned Target addresses.
To support ARP, IP implements:
- Default device address inside Target logic. For this, EN_DEFDEVADR bit is
implemented. When this bit is set, default device address of 7’b110_0001 is
always matched by the Target address match logic. When this bit is reset, the
default device address is not matched.
- Target arbitration. This is similar to the arbitration that happens currently
inside the IP in Controller mode. If the arbitration is lost, TARBLOST interrupt
is set.