Other Protocols

(3) I3C - Bus Initialization Sequence with Dynamic Address Assignment

PCIeMaster 2024. 11. 21. 19:23

5.1.4.2 동적 주소 할당을 사용하는 버스 초기화 시퀀스

버스 초기화와 동적 주소 할당은 다음 시퀀스에 따라 실행되어야 합니다. 그림 170, 동적 주소 할당 FSM을 참조하십시오.

동적 주소 할당 프로세스는 오픈 드레인(Open Drain) 모드에서 수행되어야 하며, 단 Repeated START 및 7’h7E/R은 오픈 드레인 또는 푸시-풀(Push-Pull)일 수 있습니다. 오픈 드레인의 경우, 컨트롤러는 I3C 버스에 존재하는 디바이스에 적합한 오픈 드레인 속도로 SCL 라인을 클록으로 구동해야 합니다. Repeated START의 경우, Primary Controller는 SDA 라인을 안전하게 해제한 후에만 SDA 라인을 High로 능동적으로 구동하는 것을 선택할 수 있습니다.

 

아래 절차에서, 1단계와 2단계는 Primary Controller에 의해서만 수행되어야 하며, 이는 버스 초기화 중에만 가능합니다. 이후 단계는 동적 주소 할당이 필요한 경우, 활성 컨트롤러 역할을 담당하는 모든 유능한 컨트롤러에 의해 수행될 수 있습니다.

 

1. Primary Controller는 적절히 구성된 상태에서 시작해야 하며, 자체 비휘발성 메모리나 호스트로부터 받은 결과로 다음 데이터를 보유해야 합니다: (Primary Controller란 I3C Master 를 말합니다. , 호스트는 Primary Controller를 제어하거나 관리하는 상위 시스템 혹은 컴퓨터 입니다.)

  • a. 동적 주소를 할당받아야 하는 I3C 호환 디바이스의 수.
  • b. 이미 I2C 정적 주소를 보유한 I3C 버스에 상주하는 I3C 디바이스의 데이터.
  • c. I3C 버스에 상주하는 레거시 I2C 디바이스의 데이터.

2. Primary Controller는 알려진 정적 주소를 가진 모든 I3C 디바이스에 동적 주소를 할당해야 하며, 다음 명령 코드를 사용합니다:

  • Set Dynamic Address from Static Address (SETDASA, 섹션 5.1.9.3.10 참조).
  • 또는 Set All Addresses to Static Address 명령 코드(SETAASA, 섹션 5.1.9.3.23 참조)를 사용해 모든 I3C 디바이스에 알려진 I2C 정적 주소를 할당합니다.

이 전제 조건에서는, SETAASA CCC를 지원하는 대상과 SETDASA CCC만 지원하는 대상이 I3C 버스에서 혼합될 수 있습니다. SETDASA를 통해 컨트롤러는 SETAASA를 지원하지 않는 각 대상에 대해 동적 주소를 개별적으로 할당합니다.

 

I2C 지원 디바이스와 비지원 디바이스가 혼합된 시스템에서는, 컨트롤러가 I3C 전용 대상에 동적 주소를 할당하기 위해 ENTDAA CCC(섹션 5.1.9.3.4 참조)를 전송하기 전에 SETAASA CCC를 전송해야 합니다. 또한, 제한된 주소(테이블 8 참조)를 가진 대상은 SETAASA를 지원하지 않습니다.

모든 I3C 대상 디바이스는 위에서 언급된 동적 주소 할당 방법 중 적어도 하나를 지원해야 합니다.

 

3. Active Controller가 이미 모든 대상에 동적 주소를 할당했음을 알고 있다면, 이 절차의 이전 단계들을 건너뛸 수 있습니다(즉, ENTDAA CCC를 사용하지 않을 수 있음). 그렇지 않으면, Active Controller는 브로드캐스트 명령 코드 Enter Dynamic Address Assignment(ENTDAA, 섹션 5.1.9.3.4 참조)를 전송해야 합니다.

  • 참고:
    • ENTDAA 브로드캐스트 명령 코드를 구현하지 않은 대상 디바이스는 일반적인 I3C 버스에서 동적 주소를 할당받을 수 있다고 신뢰할 수 없습니다. DAA(동적 주소 할당)는 일반적인 I3C 버스의 필수 기본 기능이며, ENTDAA는 신중한 고려 없이 생략되어서는 안 됩니다.

4.Active Controller는 Repeated START를 전송해야 하며, I3C 브로드캐스트 주소(7’h7E)를 RnW 비트를 High(Read)로 설정하여 전송해야 합니다.
I3C 버스의 모든 I3C 디바이스 중 ENTDAA를 통한 동적 주소 할당을 지원하면서 아직 동적 주소를 할당받지 못한 디바이스는 I3C 브로드캐스트 주소를 인식해야 합니다(단, 섹션 5.1.5에 따라 Hot-Join 디바이스는 제외됨).

이 단계에서, I3C 버스에 있는 적어도 하나의 I3C 디바이스는 이전에 Hot-Join 요청을 통해 동적 주소가 필요하다는 신호를 보냈고 ENTDAA를 통해 동적 주소 할당에 참여할 수 있는 자격이 있었음을 나타내기 위해 I3C 브로드캐스트 주소를 인식해야 합니다.

  • 참고:
    • 섹션 5.1.5에 따라, Hot-Joining 디바이스는 최소한 한 번 Hot-Join 요청을 전송한 후에만 I3C 브로드캐스트 주소 **7’h7E(RnW 비트가 High)**를 인식하고 ENTDAA를 사용한 동적 주소 할당 절차에 참여할 수 있습니다.
      예를 들어, 표준 Hot-Join 메서드를 사용하는 디바이스는 버스가 Idle 상태인지 확인하기 위해 일정 최소 시간(즉, 버스 Idle 조건)을 기다려야 하며, 이후 Hot-Join 요청의 일부로 START를 요청할 수 있습니다(섹션 5.1.3.2.3 참조).
      디바이스가 이 최소 대기 시간을 기다리지 않고 버스가 Idle인지 확인하지 못한 경우, Hot-Join 요청을 전송하지 않으며, 결과적으로 ENTDAA를 사용한 동적 주소 할당 절차에 참여할 수 없습니다.
    • 이 I3C 브로드캐스트 주소(7’h7E, RnW 비트가 High)의 사용은 동적 주소 할당 모드에 고유하며, I²C 사양(NXP01)에도 적합합니다.

 

5.Active Controller는 오직 SCL 라인만 구동해야 합니다. Active Controller는 SDA 라인을 High-Z 상태로 설정하여, SDA 라인이 버스 풀업 저항에 의해 High 상태로 전환되도록 해야 합니다.

 

6.ENTDAA를 통해 참여 자격이 있는 각 I3C 디바이스는 단계 4에서 I3C 브로드캐스트 주소로 전송된 요청에 응답하며, 자신의 48비트 사전 할당된 ID(빅 엔디안 순서)를 SDA 라인을 통해 전송합니다.
이때, 구분자 또는 ACK/NACK 비트는 사용되지 않습니다.

참고:

  • Hot-Joining 디바이스가 버스가 Idle 상태임을 확인하기 위해 최소 대기 시간을 준수하지 않는다면, Hot-Join 요청을 전송하지 않으며 ENTDAA 동적 주소 할당 절차에 참여할 수 없습니다.

 

7.Active Controller는 동일한 클럭 신호로 SCL 라인을 계속 구동하면서, SDA 라인은 여전히 해제된 상태로 유지해야 합니다.
동적 주소 중재(Arbitration)에서 아직 탈락하지 않은 I3C 디바이스는 버스 특성 레지스터(BCR)와 디바이스 특성 레지스터(DCR)를 전송해야 하며, 이는 섹션 5.1.1.2.2에 따라 이루어집니다.
이 과정은 해당 디바이스가 결국 동적 주소 중재에서 탈락할 때까지 반복됩니다. 섹션 5.1.4.3도 참조하십시오.

 

8.중재 과정의 특성에 따라, 미리할당된 ID(Provisioned ID), BCR, 그리고 DCR을 결합한 값이 가장 낮은 디바이스가 중재 라운드에서 승리합니다. (버스에서 통신 권한을 얻습니다)

참고:

  • 여러 디바이스가 동일한 결합된 값을 가질 가능성이 있지만, 이는 매우 드문 경우입니다. (섹션 5.1.4.3 참조)
  • 섹션 5.1.2.5.4에 따르면, 컨트롤러는 DCR의 마지막 비트를 받은 후, 특정 디바이스가 해당 중재 라운드에서 승리했는지 확인하기 위해 추가 시간이 필요한 경우 SCL을 일시적으로 멈출 수 있습니다.

9.Active Controller는 Open Drain 모드에서 7비트 크기의 동적 주소(Dynamic Address)를 중재에서 승리한 디바이스에 전송해야 합니다.
이 동적 주소에는 Active Controller가 디바이스에 할당하는 우선순위 레벨(섹션 5.1.6.2 참조)이 포함됩니다.
중재에서 승리한 디바이스는 할당된 동적 주소를 인식(Acknowledge)해야 합니다.
이 동적 주소 전송 절차는 다음 단계로 이루어집니다:

  • Active Controller는 7비트 동적 주소를 구동하며, 그 뒤에 패리티 비트(PAR)를 추가로 전송합니다.
    이 패리티 비트는 홀수 패리티(Odd Parity)로 계산되며, 이는 7비트의 XOR 값을 반전한 값입니다.
    따라서 ~XOR(dynamic_address[7:1])가 위치 0에 배치됩니다.
  • 패리티가 유효한 경우, 대상(Target) 디바이스는 다음 SCL 클럭에서 동적 주소의 수신을 인식(Acknowledge)해야 합니다.
    반면, 패리티가 유효하지 않은 경우, 대상 디바이스는 다음 SCL에서 NACK(비인식)을 수동으로 응답합니다.

10.Active Controller는 I3C 버스에 존재하는 어떤 디바이스로부터도 ACK를 받지 못할 때까지 이 절차를 반복하며, 단계 4로 돌아가야 합니다.

 

11.이 동적 주소 할당 절차는 Active Controller가 STOP 신호를 전송함으로써 종료됩니다.

 

 

이 동적 주소 할당 절차(Dynamic Address Assignment Procedure)와 관련하여:

  • Active Controller는 사전 설정된 일부 I3C 디바이스가 동적 주소를 받지 못했더라도 언제든지 동적 주소 할당 절차를 종료할 수 있습니다.
  • 동적 주소 할당 절차는 버스가 유휴 상태(Bus Free Condition)에 있는 동안, 명령 코드 Enter Dynamic Address Assignment (ENTDAA)를 사용하여 다시 시작할 수 있습니다 (섹션 5.1.9.3.4 참조).
  • 특정 대상(Target)이 할당된 동적 주소를 인식(ACK)하지 않는 경우, 절차는 단계 4에서 계속 진행해야 합니다.
    • 해당 대상은 동일한 48비트 프로비저닝 ID를 사용하여 중재에 다시 참여하며, 결과적으로 해당 대상이 중재 라운드에서 승리할 수 있습니다.
    • 그러나 대상이 두 번째로도 동적 주소를 인식하지 않을 경우, Active Controller는 동적 주소 할당 절차를 종료하고 I3C 버스 설계자가 제공한 오류 관리 절차를 실행해야 합니다.
  • Secondary Controller가 I3C 버스에 있는 모든 디바이스에 할당된 동적 주소를 수신하려는 경우, 다음 중 하나 또는 둘 다 수행할 수 있습니다:
    1. 동적 주소 할당 절차(Dynamic Address Allocation Procedure)를 따르기:
      • Secondary Controller가 Primary Controller에 의해 초기화된 버스에 연결된 경우, 다른 모든 I3C 디바이스가 받은 데이터와 동일한 데이터를 수신하게 됩니다.
    2. 버스를 모니터링하고 명령 코드 "Define List of Targets (DEFTGTS)"가 Active Controller에 의해 전송될 때까지 대기(섹션 5.1.9.3.7 참조):
      • 이 경우, 브로드캐스트된 데이터를 통해 I3C 버스에 있는 모든 디바이스의 주소 및 특성 데이터를 획득합니다.

동적 주소 할당 절차가 완료된 후:

  • Active Controller는 I3C 버스에 있는 모든 디바이스를 파악하게 됩니다.
  • Active Controller는 명령 코드 Define List of Targets (DEFTGTS)를 사용하여 Secondary Controller를 주소 지정한 다음, I3C 버스에 있는 모든 디바이스의 데이터를 Secondary Controller에 전송합니다.

 

######

 

5.1.9.3.10 Set Dynamic Address from Static Address (SETDASA)

 

이 CCC(Figure 44Figure 45 참조)는 컨트롤러가 대상의 정적 주소(Static Address)를 사용하여 특정 대상에 동적 주소(Dynamic Address)를 할당할 수 있도록 합니다. 이는 ENTDAA 동적 주소 할당 절차(섹션 5.1.9.3.4 참조)보다 빠릅니다.
SETDASA CCC는 ENTDAA CCC가 사용되기 전에 사용해야 하며, 동적 주소가 할당되지 않은 모든 대상은 ENTDAA CCC에 응답합니다.

  • 참고:
    • SETDASA Command Code는 대상 I3C 디바이스를 할당된 동적 주소가 아닌, I2C 정적 주소(Static Address)를 통해 지정한다는 점에서 특이합니다. 그 결과, 이 CCC는 I2C 정적 주소를 가진 대상에게만 전송할 수 있습니다.
    • 섹션 5.1.4.2에 따라, SETDASA는 최적화를 위한 용도로 설계되었습니다.
      SETDASA를 지원하는 I3C 대상이 ENTDAA를 지원하지 않는 경우, 일반적인 I3C 버스에서 동적 주소를 할당받을 수 있다고 신뢰할 수 없습니다. 또한, 이러한 대상은 핫 조인(Hot-Join)을 지원하지 않습니다(섹션 5.1.5 참조).
      SETDASA를 사용하려면 I3C 컨트롤러가 I3C 대상에 대한 사전 정보를 알고 있어야 하며, 대부분의 사용 사례에서는 ENTDAA를 사용하는 동적 주소 할당이 권장됩니다.

 

새로 할당된 주소는 Figure 44에 나타난 동적 주소 바이트(Dynamic Address Byte)를 통해 전송됩니다. 상위 7비트(Bits[7:1])는 7비트 동적 주소를 포함하며, 가장 하위 비트(Bit[0])는 값 1’b0로 채워집니다.

SETDASA Direct CCC의 명령 코드는 0x87입니다. 이 CCC의 지원은 선택 사항이지만, 이 CCC를 지원하는 I3C 대상은 반드시 I2C 정적 주소를 가져야 합니다.

###########

 

5.1.9.3.23 Set All Addresses to Static Address (SETAASA)

이 CCC(Figure 73 참조)는 I2C 정적 주소(Static Address)를 가진 모든 연결된 대상(Target)들이 I2C 정적 주소를 동적 주소(Dynamic Address)로 사용하도록 요청할 수 있도록 합니다.
이는 I2C 정적 주소를 가진 모든 I3C 대상에 대해 동적 주소를 할당하는 가장 빠른 방법입니다 (섹션 5.1.4.2 참조).

 

  • 참고:
    • 섹션 5.1.4.2에 따라, SETAASA는 최적화를 목적으로 설계되었습니다.
      SETAASA를 지원하지만 ENTDAA를 지원하지 않는 I3C 대상은 일반적인 I3C 버스에서 동적 주소를 할당받을 수 있다고 신뢰할 수 없습니다. 또한, 이러한 대상은 핫 조인(Hot-Join)을 지원하지 않습니다 (섹션 5.1.5 참조).
      SETAASA를 사용하려면 I3C 컨트롤러가 대상 I3C 디바이스에 대한 사전 정보를 알고 있어야 하며, SETAASA를 지원하는 다른 모든 I3C 대상에 대한 정보도 필요합니다.
      대부분의 사용 사례에서는 ENTDAA를 사용한 동적 주소 할당이 권장됩니다.

SETAASA Broadcast CCC의 명령 코드는 0x29입니다.이 CCC에 대한 지원은 선택 사항이지만, 이 CCC를 지원하는 모든 I3C 대상은 반드시 I2C 정적 주소를 가져야 합니다.

 

 

##########

5.1.9.3.4 Enter Dynamic Address Assignment (ENTDAA)

 

이 브로드캐스트 CCC(Figure 37 참조)는 컨트롤러가 섹션 5.1.4에 설명된 동적 주소 할당 절차(Dynamic Address Assignment Procedure)에 모든 I3C 디바이스가 참여할 것을 요청한다는 것을 나타냅니다.
이미 동적 주소가 할당된 대상 디바이스는 이 명령에 응답하지 않아야 합니다.

ENTDAA 브로드캐스트 CCC의 명령 코드0x07입니다.이 CCC에 대한 지원은 필수적이며, 단 I3C 디바이스가 I2C 정적 주소를 가지는 경우는 예외입니다.