SMBus target address conflicts can be resolved by dynamically assigning a new unique address to each target device. The Address Resolution Protocol (ARP) outlined below is used by the UNICOMM-I2CC in this event.
- Prepare to ARP
- Controller sends a Prepare to ARP command to all the targets on the bus by using the default device address. All targets must ACK this command and clear own addresses.
- Get UDID
- Controller sends the Get UDID command to all the targets on the bus. All targets return the unique UDID back to the controller.
- Target arbitration happens since all targets are trying to send a UDID to the controller.
- Assign address
- Controller sends the Assign Address command to all the target UDID's to assign each device with a new unique address. The controller needs to keep track of the used address pool and corresponding UDID's in software during this process. All targets need to monitor the UDID bytes and change the own address to the assigned address in the event of a UDID match. For UNICOMM-I2CT instances, this can be done in software. The commander can repeat Step 2 and 3, until there are no ACK's from a target after sending a Get UDID command, meaning all ARP-capable targets now have valid target addresses assigned.
Additionally to support the ARP process, UNICOMM-I2CT Advanced instances contain a default device address. When the CTR.EN_DEFDEVADR bit is set, a default device address of 7’b110_0001 is always used by the target address match logic. When this bit is cleared, the default device address is not matched. If arbitration is lost, the RIS.ARBLOST interrupt is set, similar to the arbitration logic of the UNICOMM-I2CC module.