프로젝트용 개발 보드를 제작하거나 일반 MCU를 사용하는 경우, 다른 활성 구성 요소와 통신하기 위한 많은 프로토콜을 찾을 수 있습니다. USB와 이더넷과 같은 표준은 대부분의 컨트롤러에 내장되어 컴퓨터 주변기기와 작업하는 데 사용됩니다. 그러나 I2C, SPI, UART 등의 프로토콜은 하류 MCU나 프로그래밍 가능한 IC와 인터페이스하는 데 사용됩니다. SPI 대 I2C 대 UART 버스의 차이점은 간단하며, MCU를 사용하는 모든 설계자는 이러한 프로토콜에 대한 라우팅 및 레이아웃 지침을 따를 줄 알아야 합니다.
이 프로토콜들은 저속 신호 표준이므로, 이러한 프로토콜을 사용할 때 임피던스 제어나 전송선 동작과 같은 것들에 대해 거의 걱정할 필요가 없습니다. 그러나 버스 라인의 신호가 수신기에 의해 올바르게 읽히도록 보장하기 위해 고려해야 할 몇 가지 중요한 설계 포인트가 있습니다. 또한 주소 지정 문제도 있지만, 특정 제품과 코드가 이 점을 처리할 수 있습니다. 지금은 이 세 가지 일반적인 프로토콜을 PCB 레이아웃에 어떻게 사용할 수 있는지, 일부 레이아웃/라우팅 지침을 설정하고 신호 무결성을 유지하기 위한 몇 가지 중요한 점을 살펴보겠습니다.
8비트에서 32비트 MCU까지 모든 것은 프로그래밍 가능성과 간단한 주변 장치에 신호를 보내기 위해 이러한 프로토콜 중 적어도 하나와 GPIO를 함께 사용합니다. 이 세 가지 직렬 프로토콜은 버스 프로토콜입니다; I2C와 UART는 주소 지정 방식을 사용하는 반면, SPI는 주소가 없습니다. SPI는 주소가 없음에도 불구하고 버스 프로토콜이며 여전히 데이터를 받을 하류 장치를 선택하는 데 사용될 수 있습니다.
I2C(아이 제곱 C 또는 때때로 IIC로 발음되며, 인터-인티그레이티드 서킷을 의미함)는 다른 장치를 제어하기 위해 두 개의 선(표준, 빠른, 그리고 빠른 플러스 모드)을 사용합니다; 하나는 클록 라인(SCL)이고 다른 하나는 데이터 라인(SDA)입니다. 아래 표에서 요약된 세 가지 모드가 있습니다. 상승/하강 시간 값은 I/O에 전형적인 시리즈 저항이 설치되었다고 가정합니다.
모드 |
데이터 전송률/클록 속도 |
최대 상승/하강 시간 |
최소 상승/하강 시간 |
방향성 |
표준 |
100 kHz |
1000 ns |
- |
양방향 |
빠른 |
400 kHz |
300 ns |
20 ns* |
양방향 |
고속 플러스 |
1 MHz |
300 ns |
20 ns* |
양방향 |
고속 |
3.4 MHz (100 pF 버스) 1.7 MHz (400 pF 버스) |
120 ns** |
15 ns** |
양방향 |
초고속 |
5 MHz |
50 ns |
25 ns |
단방향 |
*VDD/VCC = 5.5 V일 때 가정합니다. VDD/VCC가 낮을 경우 선형적으로 감소합니다
**클록 라인의 경우 이 값들을 2로 나눕니다
초고속 모드는 하류 쓰기 작업에만 통신이 사용되는 유일한 모드임을 유의하십시오. 이 모드는 버스 임피던스가 일치해야 할 때를 알 수 있게 해주므로 중요합니다. 실제로는 거의 필요하지 않습니다. 비판적인 선 길이에 대해 매우 보수적인 10% 한도를 적용하면, 이 선들의 중요한 길이는 0.32m로, I2C를 사용할 대부분의 보드 크기보다 훨씬 길다는 것을 알 수 있습니다. 최소 상승/하강 시간에 대한 무릎 주파수를 사용하여 비판적 길이에 대한 10% 한도를 적용하면, 훨씬 긴 0.92m 값에 도달합니다. 초고속 모드의 경우 보다 보수적인 0.32m 숫자를 사용해야 합니다. 이 값보다 짧은 I2C 선은 전송선으로 동작하지 않으며, 종단 방식에 대해서만 걱정하면 됩니다.
종단에서 중요한 점은 올바른 풀업 및 직렬 저항을 선택하는 것입니다. 풀업 저항과 VDD/VCC 라인 버스의 용량은 방전 및 충전 RC 회로를 형성하는데, 이것이 드라이버가 전환될 때 수신기에 신호를 제공하는 것입니다. 신호 및 클록 라인의 풀업 저항 값(Rp)은 다음 부등식을 준수해야 합니다:
분모에 있는 숫자는 I2C 사양에서 표준인 30%에서 70% 전환 시간에 대해 정의되어 있음을 유의하십시오. 10%-90% 전환 시간의 경우, 0.8473을 2.2로 교체하십시오. 이는 풀업 저항의 값을 더욱 제한할 것입니다.
VCC 버스 임피던스에 대한 표준 공식을 사용하여 버스 용량을 결정할 수 있으며, 전송선(마이크로스트립 또는 스트립라인)에 사용하는 것과 동일한 방정식을 사용하여 계산할 수 있습니다. 그런 다음 임피던스와 선의 전파 지연을 사용하여 버스 용량을 계산할 수 있습니다. 이 계산을 하고 싶지 않다면, 온라인에서 찾을 수 있는 I2C 버스 용량 계산기를 사용할 수 있습니다. 마지막으로, 시리즈 저항은 I2C 표준에서 선택 사항이지만, 전압 스파이크로부터 장치를 보호하고 상승/하강 시간을 늦출 수 있으므로 포함될 수 있습니다. I2C 표준의 59페이지에 있는 그림 46을 보고 풀업 저항 값과 짝을 이룰 적절한 시리즈 저항 값을 결정하십시오.
SPI 프로토콜은 I2C와 유사합니다. 이 버스에서는 총 4개의 라인이 사용되며, 구성 요소는 두 가지 가능한 모드로 배열될 수 있습니다. 단일 제어 장치가 단일 하류 장치를 트리거하는 경우, 토폴로지는 단순히 점대점입니다. 여러 장치를 트리거하는 것은 드라이버가 제공하는 칩 선택 출력의 수에 따라 달라집니다(표준 모드). 두 번째 모드는 데이지 체이닝을 사용하는데, 여기서 단일 장치 선택 출력이 데이지 체인의 각 장치를 차례로 트리거합니다.
위의 예에서, 우리의 컨트롤러는 주변 장치가 호스트로부터 데이터를 받아들이고 수락할 때 트리거되는 두 개의 칩 선택 출력을 가지고 있습니다. 컨트롤러에서 직렬 데이터가 출력될 때, 필요한 주변 장치도 데이터 프레임 동안 컨트롤러에 의해 활성화되어야 하므로 주변 장치가 데이터를 수락하고 읽을 수 있습니다. 이는 컨트롤러의 로직에 프로그래밍됩니다. 예를 들어, 마이크로컨트롤러나 FPGA가 컨트롤러로 사용되는 경우, 이는 장치의 애플리케이션 코드에 구현될 것입니다.
I2C와 달리, SPI에서는 다양한 신호 매개변수가 매우 구성 가능합니다. 위에 표시된 추적 용량과 RC 방전 방법을 사용하면 인터페이스에서 출력 전류와 상승/하강 시간을 제어할 수 있습니다. SPI는 푸시-풀 인터페이스이며, 전력은 풀업 저항을 통해 소모되지 않습니다. 상승 시간은 외부 용량과 드라이버의 출력 임피던스에 의해 지배됩니다. 호스트 컨트롤러의 SPI 사양은 특정 전류를 버스로 드로우할 때 특정 총 용량(아마도 50 또는 100 pF)에 대한 구체적인 상승 시간을 제공할 수 있습니다. 예를 들어, PIC32 MCU의 SPI 버스에서는 외부 용량이 50 pF일 때 출력 전환 시간이 5 ns로 지정됩니다. 따라서 용량을 10 pF로 줄이면 주어진 전류 출력과 전압 수준에 대해 상승 시간이 1 ns로 줄어들 것으로 예상할 수 있습니다. 그 경우, 이제 매칭되지 않은 길이에 대해 매우 보수적인 10% 한도를 가정하여 대략 0.6인치 길이 한도를 가지게 됩니다. 그런 다음 라인이 매우 길어져 상승 시간이 짧아질 경우 드라이버의 저 임피던스 출력을 종료하기 위해 직렬 저항을 사용할 수 있습니다.
범용 비동기 수신기 송신기(UART) 프로토콜은 I2C 및 SPI와 유사합니다. 이 인터페이스는 최대 데이터 전송률이 약 5 Mbps입니다. UART 장치는 장치 간에 클록이 전송되지 않기 때문에 작업하기도 쉽습니다; 모든 것이 비동기적입니다. 각 UART 장치의 내부(시스템) 클록은 보드레이트의 배수로 실행되어야 한다는 점에 유의하십시오(즉, 각 비트는 N번 샘플링됩니다). 단일 컨트롤러 장치와 단일 다운스트림 장치 간의 통신에는 두 개의 전선만 사용됩니다.
UART 장치의 데이터 형식, 신호 레벨, 보드레이트는 외부 드라이버 회로로 구성 가능합니다. 고속 신호 동작을 보게 되는지 여부는 RS-232 또는 RS-485 신호 레벨로 전송하는지 여부에 따라 달라집니다. RS-232 레벨의 UART 신호는 일반적으로 종단이 없이 수행되며, 에지 속도가 느리기 때문입니다. 그러나, RS-485와 함께 사용되는 UART 신호는 일반적으로 종단 저항이 필요합니다. 전송선 동작으로의 전환을 보면서 종단이 필요한 시점을 결정하기 위해 표준 고속 설계 지침을 따르십시오(위에 링크된 기사를 참조하십시오).
전형적인 종단 방법으로 과도 현상이 발생할 경우 과도 현상을 줄이기 위해 직렬 종단을 적용하는 것입니다. UART는 고 또는 저 수준에서 유휴 상태가 될 수 있으며, 필요한 유휴 수준을 설정하기 위해 풀업 저항이 필요할 수 있습니다. 풀업 저항을 추가하기 전에 반드시 구성 요소 사양을 확인하십시오.
동기식 및 비동기식 버스의 타이밍 차이에 대해 2018 AltiumLive에서 Max Seeley가 발표한 이 프레젠테이션에서 자세히 알아볼 수 있습니다.
SPI와 UART 규칙이 다소 모호하게 느껴진다면, 펌웨어 수준에서 인터페이스를 설계할 수 있는 자유가 더 많기 때문입니다. 이러한 표준 중 어느 것이든 빠른 에지 속도에서 작동하면, 고속 신호 표준처럼 크로스토크에 취약해집니다. 하지만, 규격에서 상당한 유연성을 가지고 있기 때문에, 일반적으로 인덕턴스를 낮추고 유도성 크로스토크를 줄일 수 있는 트레이스를 설계할 수 있습니다. 이러한 신호를 라우팅하는 데 있어 일정한 유연성이 있으며, 다음 디지털 시스템에서 매우 쉽게 작업할 수 있습니다.
디지털 시스템을 설계할 때 일반적인 신호 표준을 사용한다면, Altium Designer®의 설계 규칙을 사용하여 I2C 대 SPI 대 UART 레이아웃 지침의 차이점을 설계할 수 있습니다. 레이어 스택 관리자와 Simberian의 통합 3D 필드 솔버는 보드 기하학과 트레이스 기하학을 사용하여 신호 라인의 기생 요소를 추출하고, 신호가 너무 길거나 속도가 높아질 경우 임피던스를 결정하는 데 도움을 줍니다.
Altium 365에서의 Altium Designer는 지금까지 소프트웨어 개발의 세계에 국한되었던 전자 산업에 전례 없는 수준의 통합을 제공하여, 디자이너가 집에서 작업하고 전례 없는 효율성 수준에 도달할 수 있게 합니다.
Altium 365에서 Altium Designer로 할 수 있는 일의 표면만 긁었을 뿐입니다. 더 심층적인 기능 설명이나 On-Demand 웨비나 중 하나를 확인하려면 제품 페이지를 확인하세요.