배너
닫기
배너

[테스트 베드] PSM 어드레싱의 모든 것

  • 등록 2016.10.12 17:22:21
URL복사
[무료 등록] 최신 AI MCU 개발 트렌드와 함께 실제 산업 현장에서의 응용 방법을 소개합니다 (5/14, 코트야드 판교호텔 8층)

[헬로티]

LTC PSM(Power System Management)을 비롯한 모든 PMBus 애플리케이션의 기본은 PMBus 마스터(시스템 호스트)가 버스상의 모든 PMBus 슬레이브(PSM 컨트롤러, PSM 매니저, PSM μModule, PMBus 모놀리식 디바이스)와 통신할 수 있어야 한다는 것이다. 따라서 버스상의 모든 슬레이브는 다른 장치와 충돌을 일으키지 않는 고유의 어드레스를 갖고 있어야 한다. 여기서는 LTC PSM 제품의 기본 설계 원칙, 제품군별 차이점, 실제 예 및 권장 사항에 대해 살펴보고, 유효하지 않은 NVM과 같은 특수한 예도 다뤄 본다.


버스 마스터는 어드레스 식별, 전역 동작, 다위상 레일, 유효하지 않은 NVM, 버스 먹스(bus MUX)와 같은 다양한 상황에서 PSM 슬레이브와 통신할 수 있어야 한다.


디바이스 어드레싱은 베이스 레지스터와 외부 어드레스 선택(ASEL) 핀을 조합해서 할당할 수 있으며 전역, 레일, ARA (Alert Response Address–7bit 0C, 8bit 19에 해당), 기타 특수한 어드레스를 사용할 수 있다.


이 제품들의 가장 큰 장점은 디자인이다. 예를 들어 LTpowerPlayTM를 사용하여 NVM으로 쓰는 도중 전원이 중단되더라도 디자인을 복구할 수 있다. LTC의 린두이노(Linduino) 레퍼런스 코드에 들어 있는 ‘In Flight Update’ 시에도 디자인을 복구할 수 있다. 또한 훼손된 시스템 증상을 인식하고 이를 교정할 수도 있다.


여기서 ‘In Flight Update’는 LTpowerPlay가 내보낸 ISP/HEX 파일을 적용하는 프로그래밍 엔진(C 코드)이다. 린두이노 릴리즈에 들어 있는 In Flight Update 코드 예를 펌웨어로 이식할 수 있다.


LTC PSM 어드레싱을 어떻게 구현하는지 이해하면 신뢰할 수 있는 시스템을 빠르게 설계할 수 있다.


PMBus의 기본 동작


PMBus는 SMBus를 확장해서 만든 직렬 통신 표준이다. SMBus는 I2C와 비슷하다. 2개의 개방 드레인 와이어인 SCL과 SDA를 사용해서 마스터와 슬레이브 사이에 양방향 통신 버스를 사용할 수 있게 된다. 마스터는 통신을 제어하는 장치이며, 통상적으로 마이크로컨트롤러나 FPGA이다. 그리고 슬레이브는 마스터가 제어하는 장치이며, 통상적으로 소형 IC이다. 여기서는 LTC2977과 같은 전원장치 매니저나 LTC3880과 같은 전원장치 컨트롤러가 슬레이브다.


어떤 시스템은 하나 이상의 마스터를 가질 수 있지만, 사실 하나 이상의 마스터는 별로 흔하지 않다. 물론 슬레이브는 다수일 수 있다. 마스터는 어드레스를 사용해서 어느 한 슬레이브로 명령을 지정할 수 있다. 하나의 슬레이브만 사용하는 시스템이라도 이렇게 해야 한다. 그러므로 시스템이 적절하게 동작하기 위해서는 모든 슬레이브가 고유의 어드레스를 갖고 있어야 한다.


LTC PSM 디바이스는 EEPROM을 사용하는 것과 함께 핀의 저항을 조절하며, 각 장치(슬레이브)로 고유의 어드레스를 설정할 수 있다. 그러므로 EEPROM이 유효한 데이터를 갖고 있지 않아도, 마스터는 각 디바이스(슬레이브)가 고유의 어드레스를 가진 상태로 시스템을 복구할 수 있다.


다음에는 이와 같은 어드레스 구성 메커니즘에 대해 설명한다. 어드레스를 어떻게 설계하고 복구하는지 살펴보자.


PMBus 어드레싱


PMBus 어드레싱은 PMBus 표준이 따르고 있는 SMBus 표준의 정의를 따른다. SMBus 어드레싱은 I2C 표준과 같다. 여기서는 SMBus 표준에 한해 설명한다.


SMBus 3.0 표준에서 정의하고 있는 읽기 바이트 프로토콜을 살펴보자(그림 1). 어떤 트랜잭션의 어드레스 앞에는 시작 비트(S)가 오고, 뒤에는 ACK 비트(A)가 온다. (S)와 (A) 사이는 8비트이며 앞 7비트는 어드레스이고 1비트는 쓰기(Wr)나 읽기(Rd)를 지시한다.


▲ 그림 1. 읽기 바이트 프로토콜(SMBus 3.0 표준)


7비트인 경우 128가지의 어드레스가 가능하다. 여기서는 다음과 같이 (Wr/Rd) 비트 없이 어드레스를 표기했다.


0x00∼0x7F(7비트 어드레싱)


일부 어드레스는 특정 용도로 예비되어 있으며, 경우에 따라서는 다음과 같이 추가적인 (Wr/Rd) 비트를 사용해서 프로그래머가 어드레스를 표기하려고 할 수 있다.


0x00∼0xFE(8비트 어드레싱)


이들은 모두 짝수로 되어 있다. 여기서는 오실로스코프와 Total Phase Beagle 같은 스파이 툴도 같은 형식을 사용하고 있으며 0x00∼0x7F를 사용하는 것이 자연스럽다. 그러나 주어진 어드레스가 어떤 형식인지 알 수 없을 때는 주의해야 한다. 주어진 어드레스가 왼쪽으로 한 칸씩 이동한 것일 수 있으며, 이 경우 실제 크기의 두 배로 보일 수 있다.


읽기 바이트 프로토콜은 어드레스를 두 번 사용하고 있다는 것을 알 수 있다. 그런데 두 번째 어드레스 앞에는 반복 시작(Sr)이 온다. 반복 시작은 모든 읽기 트랜잭션의 한 부분이므로, (S)와 (Sr)에 동일한 어드레스를 사용해야 한다.


1. 어드레스 맵

PSM 슬레이브에 모든 어드레스를 사용할 수 있는 것은 아니다. SMBus 표준은 일부 어드레스를 특정 용도로 예비하고 있기 때문이다. 그러나 세세한 용도까지는 알 필요가 없으므로 간단하게 표 1과 같이 작성했다.


▲ 표 1. SMBus 어드레스 맵


표 1의 SMBus 어드레스 맵은 단순화된 코딩을 사용하고 있다. 보수적인 디자인은 설명(Description) 칸에서 흰색 바탕의 어드레스(Address)만 사용할 수 있다. 이렇게 할 경우 모든 예비용 및 특수 어드레스를 피할 수 있다. PSM 디자인은 어드레스 칸에 있는 흰색 바탕의 어드레스를 모두 사용할 수 있다. 다만 PMBus 3.0 영역 동작용으로 추가된 0x28 및 0x37은 예외이다.


2. PSM 전역 어드레스

어떤 디바이스로 지정하면 시스템 차원의 문제를 발생시킬 수 있는 어드레스가 있는데, 그중 첫 번째 특수 어드레스가 전역 어드레스(Global Address)이다. 이 어드레스는 0x5A와 0x5B이며, 이들은 버스 마스터가 한 번에 하나 이상의 장치와 통신하기 위해 사용한다.


0x5A는 LTC388X와 같은 제품에 사용되는 비페이징(Non-Paged) 전역 어드레스다. 그리고 0x5B는 LTC388X PSM 제품군과 LTC297X 제품군 같은 데 사용되는 페이징 전역 어드레스다.


어떤 PSM 디바이스를 어떤 전역 어드레스로 설정하면, 버스 마스터가 명령을 전송했을 때 버스상의 모든 PSM 디바이스가 이 명령에 응답할 것이다. 또한 LTpowerPlay가 예기치 않은 동작을 보일 것이다.


세 번째 전역 어드레스는 0x7C다. LTC388X PSM 디바이스는 EEPROM으로 CRC 오류가 발생했을 때 이 어드레스에 응답한다. 그러므로 이 어드레스는 사용하지 말아야 한다.


3. 기타 글로벌 어드레스

PSM이 아닌 디바이스도 전역 어드레스를 사용할 수 있다. 이 어드레스들도 사용하면 안 된다.


4. 레일 어드레스

일부 PSM 디바이스는 레일 어드레스(Rail Address)라고 하는 특수한 어드레스를 사용할 수 있다. 레일 어드레스를 사용할 경우 다중 디바이스 또는 페이지를 동시에 어드레싱할 수 있다.


레일 어드레스의 가장 중요한 기능은 버스 마스터가 하나의 명령을 사용해서 레일의 다수 위상과 통신할 수 있다는 점이다. 예를 들면, 다위상 레일의 VOUT 전압을 설정할 수 있다.


레일 어드레스는 MFR_RAIL_ADDRESS(0xFA) 레지스터를 사용해 설정할 수 있다. 이 레지스터의 디폴트값은 0x80이며 이때는 레일 어드레싱을 사용하지 않는다. 레지스터에 0x80이외의 다른 값을 지정하면 레일 어드레싱이 작동한다.


버스 마스터는 레일 어드레스를 별도의 장치가 아닌데도 버스상 하나의 장치로 취급한다. 버스 마스터는 차이를 인식하지 않기 때문에, 레일 어드레스를 시스템의 전체 어드레스 맵에 포함시키고 다른 어드레스와 충돌하지 않도록 해야 한다.


5. 채널 어드레스

마지막 특수 어드레스는 채널 어드레스(Channel Address)이다. 이 어드레스 역시 레일 어드레스와 마찬가지로 MFR_CHANNEL_ADDRESS(0xD8)라는 레지스터를 사용해 설정할 수 있다.


채널 어드레스는 버스로 특정 페이지를 지시하는 어드레스를 추가한다. 그러므로 채널 어드레스를 사용하면 PAGE 레지스터를 사용할 필요가 없다.


버스 마스터는 채널 어드레스를 버스상의 또 다른 장치로 인식하므로, 다른 어드레스와 충돌하지 않게 해야 한다.


어드레스 계획


어드레스 계획은 간단하게 세울 수 있다. 다음과 같은 모든 어드레스 타입을 포함하도록 장치와 어드레스에 관한 스프레드시트를 작성하면 된다.


• 일반 어드레스

• 전역 어드레스

• 레일 어드레스

• 채널 어드레스

• 특수 어드레스(ARA)

• PSM이 아닌 어드레스


전역 어드레스를 제외하고는 어떤 어드레스도 중복되지 않아야 하며, 공통 베이스 어드레스를 사용하더라도 모든 어드레스가 고유해야 한다.


어드레스 설정


LTC388X DC/DC 컨트롤러 제품군과 LTC297X 매니저 제품군은 대부분 비슷하지만, 어드레스를 어떻게 지정하고 디바이스들이 어떻게 동작하느냐에 따라 약간의 차이가 있다. 그러나 이 차이점들을 제외하고는 모든 디바이스가 대체로 비슷하게 동작한다고 할 수 있다.


버스상에서 PSM 디바이스의 실제 어드레스는 BASE ADDRESS라고 하는 레지스터값과 ASEL(Address Select) 핀상의 저항값을 조절해 생성된 값을 조합하여 설정된다.


사전 프로그래밍이 아닌 ASEL 핀을 사용하는 데에는 몇 가지 이유가 있다. 첫째, 사전 프로그래밍은 시간과 비용이 들며 통상적으로 디바이스를 사전 프로그래밍하는 것은 바람직하지 않을 수 있다. 둘째, 만약 디바이스에서 CRC NVM 오류가 일어나면 어드레스를 잃게 되며, 이 경우 버스 마스터가 각 디바이스와 통신하여 이들 디바이스를 재프로그램할 수 없게 된다.


이에 대한 해결책은 ASEL 핀과 베이스 어드레스를 사용하는 것이다. 버스 마스터는 전역 어드레스 0x5B를 사용해서 모든 디바이스와 통신할 수 있는데, 버스 마스터가 모든 디바이스와 통신할 수 있다면 베이스 어드레스(BASE ADDRESS)를 설정할 수 있다. 왜냐하면 모든 PSM 디바이스는 MFR_I2C_ BASE_ADDRESS 레지스터를 지원하기 때문이다. MFR_ I2C_BASE_ADDRESS는 다른 디바이스에서 이름이 다를 수 있지만 명령 코드는 항상 0xE6이다.


그 다음에 버스 마스터가 모든 디바이스로 하여금 각자 어드레스 핀을 읽게 할 수 있으며, 이 경우 모든 디바이스는 버스 마스터에게 알려져 있는 고유의 어드레스를 가질 수 있다. 버스 마스터가 각 디바이스와 개별적으로 통신할 수 있게 되면 EEPROM을 다시 프로그램할 수 있다.


이것은 다시 말해서, 버스상에 있는 모든 디바이스가 베이스 어드레스를 공유하면서도 각자의 ASEL 핀을 읽고 적용했을 때, 모든 디바이스가 고유의 어드레스를 갖도록 해야 한다는 것을 의미한다. 이것은 이 글에서 가장 중요한 내용이라고 할 수 있다.


이 원칙을 따르면 어떤 NVM 훼손이 발생했을 때 LTpowerPlay, 린두이노 레퍼런스 코드, 커스텀 펌웨어를 사용해 시스템을 수정할 수 있다. 따라서 시스템을 수정하기 위해 PSM 디바이스를 다시 솔더링하지 않아도 된다.


다음에는 어드레스 맵의 파라미터에 따라서 어드레스를 어떻게 설정할 수 있는지 살펴본다.


1. LTC388X PSM 제품군

LTC388X PSM 제품군은 베이스 어드레스값과 ASEL 핀으로부터의 값을 조합해서 어드레스를 설정한다. 어떤 제품은 단일 ASEL 핀을 사용하고, 어떤 제품은 2개의 ASEL 핀을 사용하므로 각각 다르게 취급해야 한다.


2. 단일 SEL 핀

표 2는 LTC3880 데이터 시트의 ASEL 핀을 나타낸 것이다. LTC3880은 단일(Single) ASEL 핀을 사용하는 제품이다. 슬레이브 어드레스에 있는 3개의 ‘xyz’ 비트는 베이스 어드레스다. 이것은 MFR_I2C_BASE_ADDRESS(0xE6) 레지스터에 저장된다. ASEL 핀은 4개의 LSB를 프로그램한다. 단, ASEL 핀으로 저항을 사용하지 않는 경우는 예외이다. 이때는 베이스 어드레스의 7개 비트가 전부 사용된다.


▲ 표 2. LTC3880 ASEL


버스상의 단일 장치일 경우에만 ASEL 핀으로 ‘open’을 사용할 수 있다. ASEL 핀을 사용하면 다중 장치 애플리케이션에서 어드레스를 프로그램할 수 있으며, 단일 ASEL 핀을 사용하면 프로그램할 수 있는 버스상의 어드레스 수가 16개로 제한된다. 그리고 버스 먹스를 사용하면 어드레스의 수를 확장할 수 있다. 이에 대해서는 ‘버스 세그멘테이션’ 부분에서 자세히 살펴본다.


3. 2개의 ASEL 핀

2개(Dual)의 ASEL 핀을 사용하면 16개의 어드레스에서 127개의 어드레스로 확장할 수 있다. 표 3은 LTC3882 데이터 시트의 ASEL 핀을 나타낸 것이다. ASEL1을 ‘from EEPROM’으로 설정하면 ASEL0이 LTC3880의 단일 ASEL 동작과 마찬가지로 동작한다. ASEL1 핀으로 연결되는 저항들이 디바이스 어드레스의 LSB 3개를 제어한다. 이렇게 함으로써 고유한 어드레스 수를 127개로 늘릴 수 있다.


▲ 표 3. LTC3882 ASEL


단일 및 2개의 ASEL 핀 디바이스로 이루어진 시스템의 경우, 단일 ASEL 핀 디바이스는 최대 16개까지, 2개의 ASEL 핀 디바이스는 가능한 어드레스 수만큼 많이 사용할 수 있다.


4. LTC297X PSM 제품군

LTC297X 제품군의 가장 큰 장점은 ASEL 핀에 의해 선택된 값을 베이스 어드레스로 더한다는 것이다. 비트를 교체하거나 마스킹하는 것이 아니라 더하는 것이다.


표 4는 LTC2975의 어드레스 룩업 테이블이다. 이들 ASEL 핀은 high(H), low(L), no connect(NC)의 세 가지 상태를 갖는다. 핀 두 개를 사용해 ‘N=’으로 표시된 9가지 값을 선택할 수 있다. 이 표에서 베이스 어드레스는 0x5C이고, N=0이면 어드레스는 0x5C이다.


▲ 표 4. LTC2975 ASEL


CRC 불일치


리니어 테크놀로지의 모든 PSM 디바이스는 EEPROM을 사용해서 출력 전압, 감시 한계, 기본 동작에 관한 설정을 저장한다. 이 메모리에서 오류가 발생되면 부하들로 인해 손상을 일으킬 수 있다. 리니어 테크놀로지의 PSM 디바이스는 10년 동안 EEPROM에 저장할 수 있다. 하지만 고온이나 전원 전압 제거와 같이 EEPROM 쓰기 중 예기치 않은 시스템 조건으로 인해 쓰기가 실패할 수 있으며, 이 경우 EEPROM 콘텐츠를 손상시킬 수 있다.


CRC의 용도는 EEPROM 콘텐츠가 유효한지 확인하는 것이다. 유효한 CRC면 디바이스가 안전하게 동작하고 있다는 것이며, 유효하지 않은 CRC면 디바이스 동작을 중지시키고 PMBus ALERTB를 사용해서 호스트로 알려준다.


1. CRC는 어떻게 작동하는가

PSM 디바이스를 처음 켜면 EEPROM의 콘텐츠를 램(RAM)으로 전송한다. 램이 디바이스의 실행 메모리이기 때문이다. 그러면 디바이스가 램 콘텐츠의 CRC를 계산하고 이것을 EEPROM에 저장된 CRC와 비교한다. 램을 통해서나 외부적으로 이루어지는 어떤 동작에서 EEPROM에 데이터를 쓸 경우, PSM 디바이스가 EEPROM으로 CRC를 생성한다. 두 CRC가 일치하면 디바이스가 동작하며, 일치하지 않으면 디바이스가 CRC 결함을 보고하고 리셋 상태로 존재한다.


모든 PSM 디바이스의 GPIOB/FAULTB 핀을 연결하고 이들 디바이스들의 결함을 공유하며 결함 시 동작을 중지하도록 프로그래밍하면, 전체 시스템 내에서 CRC 불일치가 발생했을 때 시스템 내의 모든 레일로 전원 공급을 중지시킬 수 있다. 다중 결함 분석을 통해서 모든 조합의 결함에 대해 안전하다고 확인되지 않는 한, 이렇게 하는 것이 통상적으로 가장 좋은 시스템 설계이다. 모든 레일이 오프일 때는 분석이 훨씬 간단하며, 시스템이 더욱 더 안전해진다. 어떤 결함이 발생하면 모든 레일을 완전히 파워 오프하기 때문이다.


2. LTC388X CRC

LTC388X 디바이스에서 CRC 불일치가 일어나면 이 어드레스는 0x7C가 된다. 그리고 또 다른 LTC388X 디바이스에서 CRC 불일치가 일어나면 이들 디바이스도 역시 동시에 0x7C가 된다. 이들 디바이스는 NVM을 유효한 데이터로 다시 쓸 때까지 0x7C로 존재하며, MFR_RESET(0xFD) 명령이나 파워 사이클에 의해 초기화된다.


3. LTC297X CRC

LTC297X 디바이스에서 CRC 불일치가 일어나면 두 어드레스 중 하나가 된다. 간단한 경우 디폴트 베이스 어드레스 0x5C가 되는데, 전체적인 EEPROM의 어떤 부분이 CRC 불일치일 때 이렇게 된다.


LTC297X는 EEPROM을 블록으로 처리하며, 하단 블록들은 유효한 CRC이고 상단 블록들은 그렇지 않을 수 있다. 이럴 때도 베이스 어드레스가 될 수 있다. 이것이 LTC388X와 다른 점이다. LTC388X는 전체적인 EEPROM의 CRC 검사를 실시한 후 어드레스를 계산하지만, LTC297X는 어드레스를 점증식으로 계산하기 때문이다.


4. CRC 불일치 교정

CRC 불일치는 보통 수작업으로 교정할 수 없다. LTpowerPlay의 프로그래밍 툴을 사용해야 쉽게 교정할 수 있으며, In Flight Update로도 교정할 수 있다. 이 툴들이 어떻게 CRC를 교정하는지 이해한다면 어드레싱을 더 잘 파악할 수 있을 것이다.


CRC 불일치를 교정하기 위한 첫 번째 단계는 CRC 불일치를 일으킨 모든 디바이스를 액세스하는 것이다. 다시 말하면, PMBus 명령을 전송해서 개별 어드레스를 복구하도록 하는 것이다. 그러기 위해서는 전역 어드레스 0x5B로 MFR_I2C_ BASE_ ADDRESS 명령을 전송한다. 그런 다음에 모든 디바이스로 하여금 자신의 ASEL 핀을 읽도록 하는 명령 시퀀스를 전송한다.


두 번째 단계는 그 디바이스로 데이터를 전송하는 것이다. 이론적으로는 디바이스가 지원하는 어떤 명령이든 사용할 수 있지만, MFR_EE_DATA 명령을 사용해서 벌크 데이터를 전송하는 것이 효율적이다. LTpowerPlay와 In Flight Update 모두 이 명령을 사용한다.


1단계의 경우 ASEL 핀을 사용해서 모든 디바이스를 고유 어드레스로 프로그램하고 있지 않은, 조악하게 설계된 어드레스 디자인에서는 작동하지 않을 수 있다.


MFR_I2C_BASE_ADDRESS를 설정해서 하나 이상의 PSM 디바이스가 동일한 어드레스를 갖게 하면 MFR_EE_ DATA를 사용해서 단일 디바이스를 수리할 수 없다. 동일한 어드레스를 공유하는 모든 디바이스가 동일한 데이터로 프로그램될 것이기 때문이다.


LTC388X의 0x7C나 LTC297X의 디폴트 베이스 어드레스와 같이 어드레스를 확실히 안다면 CRC 불일치를 일으키는 하나의 디바이스를 표적으로 할 수 있다. 하지만 전역 어드레스를 사용하는 것이 더 간단하다. 다른 디바이스로 어떤 문제를 일으키지 않기 때문이다. 그뿐 아니라 버스를 제대로 계획하지 않았거나 LTC297X가 PMBus 외 디바이스의 어드레스로 되어 있을 경우, 하나의 디바이스를 표적으로 하는 것은 부작용을 일으킬 수 있다.


버스 세그멘테이션


PMBus를 분할하는 데는 어드레싱과 커패시턴스·속도라는 두 가지 이유가 있다.


우선 어드레싱을 위해 버스 세그멘테이션하는 것은 규모가 큰 시스템에만 해당된다. 규모가 큰 시스템에서는 버스 마스터가 400kHz로 동작할 때 긴 버스 배선을 사용하므로 커패시턴스 문제가 발생할 수 있다. 그러면 타이밍 규격을 위반하거나 성능 목표를 달성하지 못할 수도 있다.


이럴 때는 LTC4306 다중화기를 사용한다. LTC4306의 중요한 특징은 개별 세그먼트를 한 번에 하나씩 연결하거나, 모든 세그먼트를 한꺼번에 연결할 수 있다는 것이다.


CRC 불일치를 교정할 때 이 디바이스를 사용해서 버스 마스터를 한 번에 한 세그먼트로 연결할 수 있다. 펌웨어에 의해 사용될 때는 이 디바이스를 사용해서 모든 세그먼트를 단일 버스로 연결할 수 있다. 세그먼트들을 단일 버스로 연결할 때는 모든 어드레스가 고유해야 한다.


다음에는 교정 프로세스를 어떻게 하고, 어떻게 단일 버스로 동작하는지 예를 통해 살펴본다.


1. 버스 세그멘테이션의 예

이 시스템 예는 다음과 같이 이루어졌다.

• 4개의 세그먼트(그림 2)


▲ 그림 2. 버스 세그멘테이션의 예


• 각 세그먼트가 16개의 LTC3880 디바이스로 이루어짐

• 하나의 LTC4306 다중화기


LTC4306의 어드레스는 3개의 ASEL 핀을 사용해서 0x50으로 설정된다. 여기서 전역 일괄 쓰기 어드레스는 0x5D다. 다수의 LTC3880은 0x5A와 0x5B의 전역 어드레스를 갖는다. 이 디자인은 4개의 세그먼트에 0x20, 0x30, 0x40, 0x60과 같이 4개의 베이스 어드레스를 사용하고 있다. 이렇게 함으로써 모든 리니어 테크놀로지 PSM 디바이스 어드레스를 프로그램하기 위한 0x50∼0x5F의 어드레스 범위를 피할 수 있다. 대부분의 리니어 테크놀로지I2C/SMBus 디바이스 역시 이 어드레스 범위를 지원한다. 또한 LTC4316 I2C 디바이스를 사용하면 다른 디바이스들을 손쉽게 이 어드레싱 범위와 호환하도록 만들 수 있다.


다위상 레일도 0x5X 범위로 어드레싱하거나, 0x10 아래 또는 0x6F 위의 어드레스를 사용할 수 있다.


2. 펌웨어 동작

보드 관리 컨트롤러(BMC: Board Management Controller)가 LTC4306의 레지스터 3을 0xF0으로 설정함으로써 입력 PMBus를 모든 출력 PMBus 세그먼트로 연결한다. 그러면 0x20∼0x2F, 0x30∼0x3F, 0x40∼0x4F, 0x60∼0x6F의 어드레스를 사용해서 버스상 64개의 디바이스를 사용할 수 있게 된다. 전역 어드레스 0x5A와 0x5B는 전역 동작에 사용된다. 그리고 CRC 불일치를 일으키지 않고 정상적으로 동작하는 디바이스는 0x7C 어드레스에 응답하지 않는다.


3. 시스템 프로그래밍

시스템 프로그래밍은 LTpowerPlay나 In Flight Update를 사용해서 버스 세그먼트를 처음으로 프로그래밍하는 것을 말한다. LTC4306이 레지스터 3을 0x80, 0x40, 0x20, 0x10으로 설정함으로써 한 번에 한 세그먼트씩 연결한다.


LTpowerPlay나 In Flight Update가 LTC4306에 의해 연결된 특정 세그먼트를 프로그램한다. 이렇게 연결된 세그먼트의 MFR_I2C_BASE_ADDRESS가 전역 어드레스 0x5B를 사용해 설정된다. 그리고 ASEL 핀 저항들이 연결된 세그먼트의 각 디바이스로 고유의 어드레스를 지정한다.


각 세그먼트에서 해당 디바이스의 ASEL 핀 저항들이 동일하고, 0x00∼0x0F 중 어드레스를 선택한다. 한 번에 한 세그먼트씩 연결하며 각 세그먼트에 대해 MFR_I2C_BASE_ ADDRESS를 설정하면 모든 64개의 디바이스에 대해 고유의 디바이스 어드레스를 지정할 수 있다.


2개의 ASEL 핀이 사용된 디바이스를 채용하면 세그먼트로 16개 이상의 디바이스를 포함시킬 수 있다. 2개의 ASEL 핀을 사용하면 하나의 베이스 어드레스를 사용해서 최대 128개의 디바이스를 생성할 수 있기 때문이다.


4. CRC 불일치 교정

시스템 프로그래밍할 때와 마찬가지라고 할 수 있다. LTpowerPlay와 In Flight Update가 프로그래밍 프로세스를 동일하게 처리한다.


두 경우 모두 프로그래밍 시 MFR_I2C_BASE_ADDRESS를 사용한다. 그리고 각 세그먼트를 하나씩 연결해 각 세그먼트를 프로그램한다.


5. 펌웨어 동작과 시스템 프로그래밍의 상호 작용

LTC4306은 디폴트로 모든 세그먼트가 연결되어 있지 않다. 그러므로 만약 시스템 디버깅을 위해 보드 관리 컨트롤러(BMC)를 리셋 상태로 유지하고 DC1613 PMBus 대 USB 컨트롤러를 연결하여 LTpowerPlay를 실행하면, DC1613이 버스상의 PSM 디바이스로 연결되지 않는다. LTpowerPlay와 함께 DC1613을 사용해서 PSM 디자인을 구성하고 디버그할 수 있다.


펌웨어가 LTpowerPlay와 간섭하지 않도록 하는 데에는 다음과 같은 두 가지 방법이 있다. 첫 번째는 BMC를 디버그 모드로 하는 것이다. 그렇게 하면 BMC가 리셋에서 빠져 나오며 모든 세그먼트를 연결하고 일시 중지한다. 그러면 LTpowerPlay가 전체적인 버스와 상호 작용하고, 시스템 브링업과 디버그가 가능해진다.


BMC가 일시 정지하면 LTpowerPlay와의 상호 작용을 막을 수 있다. LTpowerPlay는 멀티 마스터를 지원하지만 PAGE 명령을 사용하는 명령들이 상호 작용할 수 있다. 일시 정지하면 펌웨와 LTpowerPlay 둘 다 잘못된 텔레메트리를 얻는 것을 막을 수 있다.


두 번째 방법은 디버그 시 BMC를 리셋으로 유지하고 LTpowerPlay가 먹스를 제어하도록 하는 것이다. 이 방법이 통상적으로 가장 안전하다. 예를 들어 LTpowerPlay를 끈 다음과 같이 BMC가 리셋에서 해제되면 현재 상태에 상관없이 다중화기를 적절한 상태로 설정하기 때문이다.


BMC와 LTpowerPlay가 번갈아 버스를 제어할 경우, 어느 마스터이든 다중화기 상태에 대해 가정하지 않아야 한다. 그러므로 어느 쪽 마스터든 일시정지 상태에서 다시 동작할 때와 같이 중대한 동작을 진행할 때는 먼저 다중화기를 적절한 상태로 설정해야 한다.


PSM 어드레싱은 별로 복잡하지 않지만, 프로그래밍이나 CRC 불일치로부터 시스템을 복구하는 등에 대해서는 주의해야 한다. 여기서 모든 리니어 테크놀로지 PSM 디바이스는 호환 가능하다.


모든 리니어 테크놀로지 PSM 디바이스는 베이스 어드레스와 함께 ASEL 핀을 사용해서 고유의 어드레스를 생성할 수 있고, 프로그래밍 중에 전원이 중단되면 CRC 불일치가 일어날 수 있다. 베이스 어드레스를 설정하고 EEPROM을 재프로그래밍하며 디바이스를 리셋함으로써 시스템을 복구할 수 있다. LTpowerPlay와 In Flight Update를 사용해서 적절한 어드레스 플랜을 복구하는 것을 자동으로 처리할 수도 있다.


어드레싱할 때는 베이스 어드레스를 지정하고 ASEL 핀을 사용해서 어떤 경우에도 두 디바이스가 동일한 어드레스로 되지 않도록 해야 한다. 2개의 ASEL 핀을 사용한 디바이스를 채용하거나 LTC4306 같은 I2C 다중화기를 사용해서 버스를 분할하면 규모가 큰 시스템을 설계할 수 있다. 어드레스 계획은 PCB 설계에 앞서 실시해야 한다. 왜냐하면 ASEL 핀과 버스 세그멘테이션들이 저항과 핀을 사용하기 때문이다. 


Michael Jones _ 리니어 테크놀로지










배너









주요파트너/추천기업