Hot-Join Mechanism

The Hot-Join mechanism allows for the Target to join the I3C bus after it has already been configured as per I3C Bus Configuration. Hot-Join is used when the Target is mounted on the same I3C bus and remains depowered until needed, or the Target is physically inserted into the I3C bus without disrupting the SDA and SCL lines.

The Target module on this device can perform Hot-Join requests, which is represented in the HJCAP bit of the I3CxFEAT Features Register (HJCAP = 1).
Important: The Hot-Join mechanism does not allow Targets to join the I3C bus before the bus has been configured. The Controller cannot acknowledge the request until the bus is configured as described in I3C Bus Configuration.
Upon successful completion of the Hot-Join request, the following changes happen:

The Target undergoes the Dynamic Address Assignment procedure as outlined in section Dynamic Address Assignment once the Hot-Join request is acknowledged by the Controller.

If the Hot-Join request is unsuccessful, the Target will continue to attempt Hot-Join request at the next Bus Idle condition. This process continues until the Hot-Join is successfully completed, or the number of unsuccessful attempts reaches the Arbitration Request Retry Limit as specified in the I3CxRETRY register and the HJEIF error flag is set. The HJREQ bit clears when the Hot-Join request is completed, regardless of the outcome.

The frame format of a successful Hot-Join transaction is shown in Figure 1. The Hot-Join mechanism that the Target follows is described in Figure 2 and an example pseudo-code is shown in Hot-Join Request Pseudo-code Using Polling below.

Tip: It is recommended to check the value of HJEN bit in the I3CxEC Events Command register before requesting Hot-Join. The Controller can enable/disable Hot-Join (ENHJ/DISHJ) globally on the bus by broadcasting the ENEC/DISEC CCC (Enable/Disable Target Events Command) which is reflected in the I3CxEC register.
Important: The Target module will participate in the Hot-Join process only when it does not possess an assigned Dynamic Address in the I3CxDADR register and it is operating in I2C mode (OPMD = 0b00) with Hot-Join requests enabled on the bus (HJEN = 1).
Figure 1. Successful Hot-Join Frame Format
Figure 2. Flowchart of Hot-Join Mechanism

Hot-Join Request Pseudo-code Using Polling

uint8_t I3C1_Target_HotJoin()
{
    // Check Target's operating mode first
    if(I3C1STATbits.OPMD != 0) {
        // Target is already operating in I3C mode, no Hot-Join necessary
        return 0;
    }

    // Check if Controller has disabled Hot-Join requests
    if(!I3C1ECbits.HJEN) {
        // Controller has disabled Hot-Join requests
        return 0;
    }

    // Begin Hot-Join request
    I3C1CONbits.HJREQ = 1;

    // Dynamic Address Assignment occurs

    // Wait for Hot-Join process to complete (blocking)
    while(I3C1CONbits.HJREQ);       // HJREQ clears when process is complete

    // Check if Hot-Join completed successfully
    if(I3C1PIR1bits.HJDONEIF && I3C1STATbits.OPMD==0b01) { /* Success */ }
    else if(I3C1ERRIR0bits.HJEIF) { /* Unsuccessful attempt */ return 0; }

    return I3C1DADR;    // Return dynamic address