MAX16046–MAX16049 EEPROM 프로그래밍 가능 시스템 매니저를 위한 인 서킷 프로그래밍
저자: Eric Schlaepfer
개요: MAX16046–MAX16049 시스템 매니저는 애플리케이션 회로 보드에 납땜 처리 후 프로그래밍할 수 있다. 이는 소자를 프로그래밍하지 않은 상태로 실장해야 하며, 생산 테스트 시에 최신 버전의 구성 정보를 소자에 쓸 수 있다는 것을 의미한다. 몇 가지 간단한 조치로 애플리케이션 회로는 프로그래밍 하드웨어에서 I²C나 JTAG 버스 라인을 공유하도록 할 수 있으며 프로그래밍 중에 소자에 전력을 공급할 수 있다. I²C 버스와 JTAG 버스에 모두 프로그래밍 알고리즘이 제공된다.
MAX16046–MAX16049 EEPROM 프로그래밍 가능 시스템 매니저는 전원 시퀀서와 모니터, 그리고 최대 12개의 전원을 제어할 수 있는 마지너로 구성된다. 전원은 3개의 디지털 비교기에 의해 모니터링되고 프로그래밍 가능한 DAC 출력에 의해 마지닝되며 프로그래밍 가능한 스테이트 머신으로 시퀀싱된다.
이들 시스템 매니저는 SMBus™ 호환 I²C 인터페이스와 JTAG 인터페이스를 제공하며, 두 인터페이스는 모든 소자 레지스터에 액세스하고 내장된 구성 EEPROM을 프로그래밍할 수 있다. 몇 가지 간단한 지침을 수행하면 MAX16046–MAX16049는 인 서킷 프로그래밍할 수 있다.
전원 공급
MAX16046–MAX16049는 3V ~ 14V의 전원 전압 범위를 갖는다. 일반적인 애플리케이션은 VCC를 12V 중간 버스 전압이나 3.3V 보조 전원에 연결한다.
부분적으로 전원이 제공되는 보드에서 MAX16046–MAX16049를 프로그래밍할 수 있다. 예를 들어 다른 전압 없이 3.3V 보조 전압을 인가하거나 12V 중간 버스 전압을 인가할 수 있다. 이 시점에서는 시스템 매니저를 프로그래밍하지 않으므로 모든 다운스트림 전원은 꺼두어야 한다. 다른 방법으로는 흔히 이용되는 듀얼 다이오드를 사용하여 프로그래밍 커넥터로부터 전원을 공급하는 것이다. 이 방법은 다이오드에 의해 전압 강하가 발생하기 때문에 MAX16046–MAX16049가 12V 버스로부터 전원을 공급받을 때 사용하는 것이 가장 좋다.
다이오드 OR-ing을 사용하지 않고 보드에 인가된 전원으로 MAX16046–MAX16049를 프로그래밍할 경우 다운스트림 전원이 미리 켜지지 않도록 시퀀싱 출력 상태에 주의를 기울여야 한다.
프로그래밍하기 전의 MAX16046–MAX16049는 하이 임피던스 출력을 갖는다 액티브 하이 인에이블 입력을 갖는 전원은 풀 다운 저항을 가져야 하며 액티브 로우 인에이블 입력을 갖는 전원은 풀 업 저항을 가져야 한다. 시퀀싱 출력은 푸시 풀 또는 오픈 드레인으로 구성할 수 있다. 오픈 드레인 구성은 외부 풀 업 저항이 필요하기 때문에 액티브 로우 인에이블 입력만 함께 사용할 수 있다.
MAX16046–MAX16049를 JTAG 체인으로 연결하는 것은 바람직하지 않다. JTAG 체인에서는 전원을 업스트림 소자에 인가할 수 없어 MAX16046–MAX16049에 대한 액세스가 실제로 차단될 수 있기 때문이다. 대신 JTAG 멀티플렉서나 전용 JTAG 포트를 사용하도록 한다.
버스 공유
정상 동작 중에 µP 이외의 소자가 MAX16046–MAX16049와 통신해야 할 때 문제가 발생할 수 있다. 한 예로 시스템 감시 µP가 MAX16046의 ADC 읽기에 액세스 해야 하는 경우를 들 수 있다. 보드에 전원이 공급되지 않거나 부분적으로 전원이 제공될 때 MAX16046을 프로그래밍할 경우 I²C나 JTAG 버스에 연결된 다른 소자가 간섭할 수 있다. 가장 손쉬운 해결책은 MAX16046을 JTAG 인터페이스를 통해 프로그래밍하고 감시 µP를 I²C 인터페이스에 연결하는 것이다. µP가 완전한 오픈 드레인 I²C 버스 I/O(즉 ESD 다이오드-VCC가 없는 핀)를 지원하고 풀 업 저항이 충분히 크다면 I²C 버스를 프로그래밍과 정상 동작에서 모두 공유할 수 있다. µP의 I²C 버스 라인이 오픈 드레인이 아닌 경우에는 ESD 다이오드가 버스 라인을 클램핑하고 프로그래밍과 간섭한다.
시스템 µP가 완전한 오픈 드레인 I²C 버스 라인을 갖지 않을 경우 그림 1과 같은 회로를 사용하여 µP와 프로그래밍 I²C 버스 간에 자동 스위칭할 수 있다.
그림 1. MAX16046은 MAX4525 멀티플렉서/스위치를 통해 I²C 버스를 공유한다.
그림 1의 MAX4525 멀티플렉서는 시스템 µP에 연결된 I²C와 프로그래밍 테스트 포인트에 연결된 I²C 사이를 스위칭한다. 스위치는 시스템 µP의 VCC에 의해 제어된다. VCC가 인가되지 않고 12V가 인가될 경우 스위치는 I²C를 프로그래밍 테스트 포인트에 연결한다. 일단 VCC가 인가되면 스위치는 I²C를 시스템 µP에 연결한다.
애플리케이션 회로의 예
다음 그림은 인 서킷 프로그래밍을 위해 설계된 세 가지의 다른 애플리케이션 회로를 보여준다.
12V 중간 버스로부터 전원을 공급받고 I²C 버스를 통해 프로그래밍되는 경우
그림 2의 회로는 아날로그 인에이블 라인 EN에 의해 모니터링되는 12V 중간 버스로부터 MAX16046에 전원을 공급한다. 12V 버스가 EN상의 저항 분배기에 의해 설정된 임계값을 넘어 상승하면 MAX16046은 프로그래밍된 경우 시퀀싱을 시도한다. 프로그래밍되지 않은 MAX16046은 어떤 동작도 수행하지 않으며 시퀀싱 출력은 하이 임피던스 레벨을 그대로 유지한다.
그림 2. MAX16046은 12V 중간 버스로부터 전원을 공급받고 I²C 인터페이스를 통해 프로그래밍된다.
한 전원은 액티브 하이, 푸시 풀 인에이블 신호를 사용하며 다른 전원은 액티브 로우, 오픈 드레인 인에이블 신호를 사용한다. 적절한 풀 업 및 풀 다운 저항은 프로그래밍되지 않은 출력이 하이 임피던스 레벨에 있는 동안 이들 전원이 켜지지 않도록 방지한다.
푸시 풀 출력은 VDBP 이상으로 풀 업할 수 없으며 오픈 드레인 출력은 6V 이상으로 풀 업할 수 없으므로 주의한다. I²C 연결은 프로그래밍 테스트 포인트로 연결되며 프로그래밍 하드웨어에 의해 적절한 풀 업 저항이 제공되어야 한다. 회로 보드의 다른 소자들은 I²C 버스에 연결할 필요가 없으므로 회로는 간단하다.
3.3V 보조 전원으로부터 전원을 공급받고 JTAG 멀티플렉서를 통해 프로그래밍되는 경우
그림 3에서 MAX16046은 3.3V 보조 전원으로부터 전력을 얻는다. JTAG 연결은 똑같이 3.3V 보조 전원에서 전력을 공급받는 DS26900 JTAG 멀티플렉서를 사용하는 다른 소자와 공유된다. 프로그래밍은 12V 중간 버스를 파워 업하지 않아도 3.3V로 실행할 수 있다.
그림 3. MAX16046은 3.3V 보조 전원으로부터 전력을 공급받고 DS26900 JTAG 멀티플렉서를 통해 프로그래밍된다.
12V 중간 버스로부터 전력을 공급받고 JTAG을 통해 프로그래밍되는 경우
그림 4에 보이는 MAX16046은 다운스트림 전원을 켜지 않으면서 안전하게 전원이 인가될 수 있도록 다이오드-OR을 12V 중간 버스에 연결하여 전력을 공급받는다. JTAG 및 전원 연결은 프로그래밍 테스트 포인트로 연결된다.
그림 4. MAX16046은 12V 중간 버스로부터 전력을 공급받고 JTAG을 통해 프로그래밍된다.
프로그래밍 알고리즘
MAX16046–MAX16049는 소자의 구성 파라미터를 저장하는 EEPROM을 내장하고 있다. 전원이 인가되면 EEPROM의 내용은 RAM 레지스터로 옮겨진다. RAM과 EEPROM은 모두 JTAG과 I²C 인터페이스에서 액세스할 수 있다. MAX16046–MAX16049를 올바르게 프로그래밍하려면 원하는 파라미터를 EEPROM에 프로그래밍해야 한다. 표 1의 메모리 맵을 참조한다.
표 1. MAX16046 메모리 맵
구성 파일
MAX16046 EV 킷 (EV kit) 소프트웨어는 두 종류의 구성 파일을 제공한다. 하나는 File Save Configuration As를 선택할 때 생성되는 XML 파일로 사람이 읽을 수 있으며, I²C 프로그래밍을 위해 사용할 수 있다. 두 번째는 File Save as .SVF를 선택할 때 생성되는 파일로, 이 파일은 SVF (serial vector format) 형식으로 저장되며 3rd party JTAG 툴과 인 서킷 PCB 테스터를 이용한 JTAG 프로그래밍을 위해 사용된다.
XML 파일은 많은 웹 브라우저에서 컬러 코드를 갖는 계층적 형식으로 볼 수 있다. EV 킷 소프트웨어에 의해 생성되는 XML 파일은 여러 섹션으로 나누어지며 레지스터 데이터와 함께 셋업 탭 정보를 포함한다. 다음 두 섹션을 주목할 필요가 있다. EEPROM에 로드할 수 있는 구성 값이 포함된 Config_Register 섹션과 사용자 EEPROM에 로드할 값이 포함된 User_Register 섹션이다.
각 섹션 내에서 Register 태그는 특정 어드레스에 로드할 값을 지정한다. 레지스터 태그의 형식은 다음과 같다.
<Register Address="{register number}" Value="{register value}"
Description="{text description of register}"/>
모든 값은 십진수이다. 이들 어드레스는 RAM 레지스터와 EEPROM 어드레스에 해당된다. RAM 레지스터 0 ~ 14는 DAC 레지스터이지만 어드레스 0 ~ 어드레스 14의 EEPROM은 오류 데이터로 저장되므로 주의한다. EEPROM 프로그래밍 루틴은 어드레스 15에서 시작해야 한다.
MAX16046–MAX16049의 EEPROM 구성 메모리를 프로그래밍하려면 먼저 레지스터 r5Dh[0]의 구성 록 (lock) 비트가 영(zero)인지 확인한다. 영이 아닌 경우 해당 비트에 '1'을 써서 소거한다. EEPROM에 쓰려면 적절한 명령을 전송하여 EEPROM 페이지에 들어간 다음 시작 어드레스를 로드하고 일련의 블록-쓰기 명령을 전송한다. I²C 프로토콜에 대한 자세한 내용은 MAX16046/MAX16048 또는 MAX16047/MAX16049 데이터 시트를 참조한다.
일반적인 EEPROM 프로그래밍 과정을 위한 수도코드(Pseudocode)는 다음과 같다.
SendByte(5Dh) // Check lock bit
If ReadByte() & 2 == 2 Then
WriteByte(5Dh, 02h) // Clear lock bit if needed
SendByte(9Ah) // Access EEPROM page
Loop Address from 0Fh to 7Dh
SendByte(Address) // Load address
WriteBlock(Data, 10h) // Write a block of 16 bytes
Wait(16 * 11 milliseconds) // Wait for programming
SendByte(Address)
ReadBlock(DataRead, 10h) // Read back data block
If DataRead != Data Then
RepeatCount = RepeatCount + 1
If RepeatCount == 3 Then
Fail
Else
RepeatCount = 0
Address = Address + 10h // Advance to next block
SendByte(9Bh) // Return to default page
Success
사용자 EEPROM에 쓰려면 동일한 과정을 사용해도 되지만 0Fh ~ 7Dh 대신 9Ch ~ FFh의 어드레스 범위를 사용한다.
JTAG 프로그래밍 절차
표준 3rd party JTAG 툴, MAX16046 BSDL 파일, 그리고 EV 킷 소프트웨어에 의해 생성된 SVF 데이터 파일을 사용하여 JTAG 프로그래밍 케이블 또는 인 서킷 PCB 테스터에서 MAX16046–MAX16049를 프로그래밍한다. BSDL 파일은 Maxim 웹사이트에서 다운로드할 수 있다.