SPI 버스 종단 고려 사항


22

따라서 이전 질문 에서 보드 간 통신에 단거리 SPI 버스 사용에 대해 문의했습니다 . 종단 저항을 사용해 보는 것이 좋습니다. 나는 저항을 목적지에 가깝게 배치했지만 (정확히는 아니지만 1cm의 거리가있었습니다) 접지 저항 발자국이없는 보드 였으므로 즉흥적으로해야했습니다. TQFP이고 섬세한 핀이 있기 때문에 디바이스에 저항을 납땜 할 수 없습니다.]

몇 가지 기본 테스트에서 1K 저항이 오버 슈트를 거의 줄이지 않았다는 것을 알았습니다. 470 Ohms와 180 Ohms가 더 잘 작동했습니다. 내가 낮을수록 더 잘 작동했습니다. 180 Ohms에서 오버 슈트는 약 볼트 또는 약간 낮았습니다. 불행히도 전류는 MCU가 처리 할 수있는 것보다 많기 때문에 그 이상으로 내려갈 수는 없습니다. 보드의 현재 개정판에서 330 Ohm 저항을 직렬로 사용하여 문제를 해결했습니다. 이로 인해 오버 슈트가 3.7V가되었고 상승 시간은 10 또는 11ns였습니다. 그러나 나는 다음 개정판에서 '적절한'솔루션을 정말로 원합니다. 내 주파수 요구 사항은 동일하게 유지됩니다 : 2 MHz이지만 4 MHz를 선호합니다.

그래서 나는 여기에 물어봐야한다고 느꼈다 : 보드의 다음 개정판에서, 비프 버퍼를 라인에 놓아야 하는가? 버퍼를 찾는 것은 실제로 문제가되지 않지만 현재 드로우는 크게 증가합니다. SPI에는 8 개의 장치가 있으며 종료가 필요한 3 개의 라인이 있으며 항상 활성 상태입니다. 예를 들어, SCK는 8 개의 모든 장치로갑니다. 각 장치에는 100 옴 종단 저항이 있습니다. 따라서 12 * 3.3 / 100 = 390 mA의 전류 소모입니다!

그렇다면 가장 좋은 방법은 무엇입니까? 쇼트 키 다이오드를 클램프로 사용하여 '액티브 터미네이션'을 수행해야합니까?

편집 : 라인 임피던스에 관하여 : 앞에서 언급했듯이, 4 개의 외부 보드를 연결하는 것이 목적입니다. 패드 간 거리는 모두 동일합니다 (12 인치). 그러나 MCU와 동일한 보드에 장치가 있지만 터미네이션이 필요하지 않습니다. 길이는 약 1 인치 (또는 그 이하)이며 오버 슈트 (300 또는 mV)는 거의 없습니다. 외부 보드로가는 트레이스는 길이와 너비가 같습니다. 내 보드의 두 번째 레이어는 손상되지 않은 접지면입니다.


일반적인 방법은 라인 임피던스와 일치하는 직렬 저항을 배치하는 것입니다. 50ohm의 직렬 종단과 같은 것을 시도하십시오. 트레이스와 연결을 고정 임피던스로 설계하면 도움이됩니다. 그래도 직렬 종단을 낮추고 찾은 내용을 확인하십시오. 그는 32ohm의 접지에 대한 종단을 제안했습니다. 실제로 전력 레일에 64ohm을, 접지 레일에 64ohm을 넣어서 훨씬 낮은 전력, 3dB 적은 전력을 실제로 할 수 있습니다.
Kortuk

@Kortuk 불행히도 32 옴 저항은 오버 슈트를 크게 줄이지 않았다. 그러나 발자국도 소스가 아닌 잘못된 위치 (종료자가 아니 었습니다)에 있었으므로 확실하지 않을 수 있습니다. 라인 임피던스와 관련하여 모든 라인의 길이와 폭은 거의 같습니다. 그들은 모두 2 층에있는 비행기를 완전한 땅 위로 옮깁니다.
Saad

1
직렬 종단은 소스에 있으며로드에 배치하면 아무 것도 수행하지 않습니다. 영향을 보려면 직렬로 50ohm을 직렬로 연결하십시오.
Kortuk

이것을 stevenvh가 묘사 한 것처럼 생각할 수 있습니다. 커패시터로 작용하는 전체 라인이 있으며 저전압에 대해 저항이 R과 함께 작용합니다. 전송 라인 모델을 보면 저항이 일치하면 진폭 파동의 절반이 발생하고 다른 쪽 끝이 충돌하여 최대 값으로 범프를 반영한다는 의미입니다.
Kortuk

답변:


32

신호 종료에 대해 말하는 것은 웜 캔을 여는 것과 같습니다. 이것은 단지 수백 단어로 요약하기 어려운 거대한 주제입니다. 따라서 나는하지 않습니다. 나는이 답변에서 엄청난 양의 물건을 남길 것입니다. 그러나 나는 또한 당신에게 큰 경고를 줄 것이다. 넷에서 저항을 종료하는 것에 대한 많은 잘못된 정보가있다. 사실, 나는 인터넷에서 발견되는 대부분의 내용이 잘못되었거나 오도한다고 말합니다. 언젠가 나는 큰 것을 쓰고 내 블로그에 게시하지만 오늘은 게시하지 않을 것입니다.

가장 먼저 알아 두어야 할 것은 터미네이션에 사용할 저항 값은 트레이스 임피던스와 관련이 있어야한다는 것입니다. 대부분의 경우 저항 값은 트레이스 임피던스와 동일합니다. 트레이스 임피던스가 무엇인지 모른다면 알아 내야합니다. 사용 가능한 많은 온라인 임피던스 계산기가 있습니다. Google 검색은 수십 개를 더 불러옵니다.

대부분의 PCB 트레이스의 임피던스는 40 ~ 120 ohms이므로 1k 종단 저항이 거의 아무것도하지 않고 100ish 저항이 훨씬 우수하다는 것을 알았습니다.

종료에는 여러 유형이 있지만 소스와 종료 종료의 두 가지 범주로 대략적으로 분류 할 수 있습니다. 소스 터미네이션은 드라이버에 있고 엔드 터미네이션은 맨 끝에 있습니다. 각 범주에는 여러 유형의 해지가 있습니다. 각 유형은 다른 용도에 가장 적합하며 모든 유형에 적합한 유형은 없습니다.

맨 끝의 접지에 대한 단일 저항 인 종단은 실제로 그리 좋지 않습니다. 사실, 잘못되었습니다. 사람들은 그렇게하지만 이상적이지 않습니다. 이상적으로는 저항이 전원 레일의 절반에있는 다른 전원 레일로 연결되는 것이 이상적입니다. 따라서 I / O 전압이 3.3v 인 경우 해당 저항은 GND로 이동하지 않고 3.3v의 절반 (1.65v)의 다른 전원 레일로 이동합니다. 이 레일의 전압 레귤레이터는 전류 를 소싱 싱크 해야하기 때문에 특별해야합니다 . 대부분의 레귤레이터는 전류 만 소싱합니다. 이 용도로 작동하는 조정기는 데이터 시트의 첫 페이지에서 종료에 대해 언급합니다.

대부분의 최종 종료에서 큰 문제는 많은 전류를 소비한다는 것입니다. 이것에 대한 이유가 있지만, 나는 그것에 들어 가지 않을 것입니다. 저 전류 사용을 위해서는 소스 터미네이션을 살펴 봐야합니다. 가장 쉽고 가장 일반적인 소스 터미네이션 형태는 드라이버 출력에서 ​​간단한 직렬 저항입니다. 이 저항의 값은 트레이스 임피던스와 동일합니다.

소스 종료는 종료 종료와 다르게 작동하지만 순 효과는 동일합니다. 처음에는 반사를 방지하지 않고 신호 반사를 제어하여 작동합니다. 이 때문에 드라이버 출력이 단일 부하를 공급하는 경우에만 작동합니다. 부하가 여러 개인 경우 종단 처리 또는 여러 소스 종단 저항을 사용하는 등 다른 작업을 수행해야합니다. 소스 종료의 큰 장점은 종료 종료와 같이 드라이버를로드하지 않는다는 것입니다.

소스 터미네이션을위한 직렬 저항은 드라이버에 위치해야하며 트레이스 임피던스와 동일한 값이어야합니다. 그것은 지나치게 단순화되었습니다. 이것에 대해 알아야 할 중요한 세부 사항이 있습니다. 대부분의 드라이버는 출력에 약간의 저항이 있습니다. 이 저항은 일반적으로 10-30Ω 범위에 있습니다. 출력 저항과 저항의 합은 트레이스 임피던스와 같아야합니다. 트레이스가 50 옴이고 드라이버에 20 옴이 있다고 가정 해 봅시다. 이 경우 30 + 20 = 50 이후 저항은 30 옴입니다. 데이터 시트에 드라이버의 출력 임피던스 / 저항이 무엇인지 말하지 않으면 20 옴으로 가정 할 수 있습니다. 그런 다음 PCB의 신호를보고 조정해야하는지 확인하십시오.

또 다른 중요한 것은 o-scope에서이 신호를 볼 때 반드시 수신기를 조사해야합니다. 다른 곳에서 프로빙하면 파형이 왜곡되어 실제보다 더 나쁘다고 생각하도록 속일 수 있습니다. 또한 접지 클립이 가능한 짧아야합니다.

결론 : 33 ~ 50ohm 저항으로 소스 터미네이션으로 전환하면 괜찮을 것입니다. 일반적인주의 사항이 적용됩니다.


데이비드, 철저한 답변에 감사드립니다. 모든 것이 완벽하게 이해되었지만 시스템에 한 가지 더 복잡한 문제가 있다고 생각합니다. SPI 라인은 한 보드에서 다른 보드로 이동합니다. 따라서 라인 임피던스를 추정하는 것은 어려울 수 있습니다. 신호는 메인 보드에서 약 3 "에 대해 신호를 전달하고 6"리본 케이블을 통과 한 다음 목적지에 도달 할 때까지 다시 3 "트레이스를 따라 이동합니다. 리본 케이블의 전선은 번갈아 나타납니다. 접지 (SCK, GND, MOSI, GND 등) 30-20 Ohm 권장 사항이 여전히 유효합니까?
Saad

@Saad 그런 경우에 내가 한 일은 드라이버에서 단일 저항을 사용하고 프로토 타입이 만들어지면 그 값을 조정하는 것입니다. 타협이지만 작동합니다. 실제로 각 PCB에 3-6 인치의 트레이스가있는 1 피트 케이블을 통해 SPI를 실행하는 여러 시스템이 있습니다. 그 중 일부는 30MHz로 실행됩니다! 예, 33 또는 47 옴으로 시작하여 거기에서 조정하십시오.

3
+1은 이미 있지만 소스 종단을 연결하는 방법 (즉, 직렬이 아닌 직렬로 연결)을 보여주는 다이어그램이 매우 유용합니다.
광자

16

짧은 거리를 가고 있기 때문에 종단 저항이 좋은 생각은 아닙니다. 알다시피, 작업을 수행하려면 전류가 상당히 낮아야하며, 선은 많은 전류를 소비하고 동일한 임피던스로 선을 구동하면 전압은 2만큼 감쇠됩니다.

클럭 속도가 그다지 높지 않으므로 4MHz 비트 레이트를 지원 해야하는 주파수가 문제를 일으키는 것은 아닙니다. 문제는 100MHz의 고조파를 갖는 라인을 구동하는 빠른 에지가 문제를 일으키는 것입니다. 원하는 주파수에서 전송 라인이 아닌 일괄 시스템이 있습니다. 이것은 일을 훨씬 쉽게 만듭니다.

따라서 해결책은 실제로 필요하지 않지만 문제를 일으키는 고주파를 감쇠시키는 것입니다. 이것은 라인을 구동하는 것 직후에 간단한 RC 저역 통과 필터로 수행 할 수 있습니다. 이것은 현재 330 Ω 저항이하는 일입니다. 이들은 라인의 기생 용량으로 저역 통과 필터를 형성합니다. 분명히 충분하지 않거나 예측할 수 없습니다. 이것은 각 라인에 고의적 인 정전 용량으로 고정 될 수 있습니다.

버스를 4MHz로 실행하려고합니다. 즉, 지원해야하는 가장 빠른 신호는 4MHz 구형파입니다. 즉, 각 레벨의 길이는 125ns입니다. 최소 4 개의 시간 상수가되기를 원하며, 이는 98 %의 정착 시간을 의미합니다. 즉, 허용하려는 최대 시간 상수는 31ns입니다. 31ns / 330Ω = 94pF. 이것이 31ns 시간 상수를 얻는 데 필요한 330Ω 직렬 저항의 총 부하입니다. 예측할 수없는 기생 용량이 항상 있으므로 47pF로 어떻게 보이는지 알 수 있습니다. 최대 허용 시간 상수를 초과하지 않으면 서 10-20 pF의 숨겨진 정전 용량을위한 공간이 남아 있습니다.

직렬 저항은 버스를 구동하는 모든 핀에 가능한 한 가까이 있어야합니다. 이것은 버스의 다른 모든 핀이 하나가 운전 중일 때 CMOS 입력이라고 가정합니다. 단일 핀으로 만 구동되는 라인 (마스터로만 구동되는 클럭 라인)의 경우 저항 다음에 47pF를 최대한 가깝게 배치하십시오. 다른 시간에 다른 핀으로 구동 할 수있는 라인 (예 : MISO)의 경우, 모든 드라이버의 중간 근처에 47 pF를 두십시오. 각 라인은 드라이버 수에 관계없이 단일 47pF 커패시터 만 가져 오지만 각 드라이버마다 하나의 저항이 있습니다.

위의 계산은 시작하기에 좋은 안내서입니다. 일부 매개 변수는 알 수 없으므로 먼저 설명합니다. 330Ω의 직렬로 시작하고 47pF를 접지로 시작하지만 실제 관찰 된 결과에 따라 변경하는 것을 두려워하지 마십시오.


2

종단이없는 경우, 신호가 매우 낮은 임피던스 소스에서 매우 높은 임피던스 수신기로 전송되면 신호가 반복해서 튀어 오릅니다. 신호의 위상은 각 왕복에서 180도 반전됩니다.

목적지에 도착했을 때 신호가 반사되지 않게하려면 종료를 사용할 수 있습니다. 이로 인해 신호가 반사되지 않고 대상에서 깨끗하게 흡수되지만 많은 일반적인 구현으로 인해 소스에 상당한 DC 부하가 발생합니다.

많은 경우에, 대신 신호 소스에 직렬 저항을 삽입하는 경우 실질적으로 유용한 결과를 얻을 수 있습니다. 라인의 맨 끝에 수신기가없는 경우 신호가 도달 할 때 신호가 반사되지만 이러한 반사는 다시 반사되지 않고 소스에 의해 흡수됩니다. 또한 소스 터미네이션은 라인을 구동하는 장치에 DC 부하를 부과하지 않습니다.

종단이없는 경우, 라인이 저임피던스로 구동되고 고 임피던스로 수신되는 경우, 수신 장치는 구동 전압보다 높은 전압을 볼 수 있습니다 (이론적으로 소스 구동 임피던스가 0이고 수신 임피던스는 무한대입니다). 소스 또는 수신기가 올바르게 종료 된 경우 수신 전압은 드라이브 전압과 거의 같습니다 (제로 임피던스 소스가 올바르게 임피던스 수신기를 구동하거나 적절한 임피던스 소스가 무한 임피던스 수신기를 구동 한 경우, 수신 전압은 드라이브 전압과 같습니다). 둘 다 올바르게 종료되면 수신 전압이 드라이브 전압의 절반이됩니다.

여기 시뮬레이션 은 이것을 보여줍니다. 여기에는 초당 약 49 회 펄스 체인, 직렬로 연결된 5ms 지연 라인 2 개 (왕복 시간 1/50 초) 및 양쪽 끝에 전환 가능한 종단 저항을 생성하는 펄스 발생기가 포함됩니다.

이 회로에는 3 개의 SPDT 스위치가 있습니다. 상태를 변경하려면 하나를 클릭하십시오. 아래쪽 두 스위치는 소스 및 대상 터미네이션을 제어합니다. 이러한 경우 "위"는 양호한 종료를 나타내고 "아래"는 불량을 나타냅니다. 상단 스위치는 라인이 자동 펄스 발생기 또는 수동 로직 입력에 의해 구동되어야하는지 여부를 제어합니다. 라인을 수동으로 펄스를 보내려면 상단 스위치를 "아래로"전환 한 다음 옆에 "L"을 클락하십시오.

만약 목적지에 도달하는 신호는 깨끗한 것 중 어느 하나 의 소스 또는 목적지가 적절하게 종료된다. 둘 다 올바르게 종료되면 수신 신호 전압이 드라이브 전압의 절반이됩니다. 하나가 올바르게 종료되었지만 다른 하나가 그렇지 않은 경우, 수신 전압은 드라이브 전압의 약 91 %가됩니다 ( "나쁜"저항은 10 배만큼 "잘못된"이므로 흡수하지 못합니다 (10/11) 에너지의). 어느 쪽도 종료되지 않으면 수신 전압은 초기에 구동 전압의 약 1.656 배이지만 20ms마다 이상한 반사가 나타납니다.


1

AC 종단 (예 : 110 Ohm 저항과 직렬로 연결된 470pF 커패시터)을 시도하고이 직렬 조합을 SPI 클록 대상의 출력에서 ​​접지로 연결하십시오. 터미네이션은 에지 타임의 길이가 쉽게 할 수있는 일에 대해 약 30mA를 소비하지만 그렇지 않으면 제로 전류를 소비합니다. 양방향 데이터 라인의 경우 조금 까다로워집니다. SPI 데이터 라인의 마스터 및 슬레이브 엔드 모두에 470 pF, 220 Ohm AC 터미네이션을 적용했으며 이는 허용 가능한 오버 슈트 및 언더 슈트입니다.

이에 대한 의견을 환영합니다.


0

이전 게시물이 머리에 못을 박았을 때 너무 자세하게 설명하지 않습니다. 불균형 라인 인 SPI로 귀결됩니다. 클럭 주파수가 낮더라도 빠른 ns 클럭 에지를 존중해야합니다. 필자의 경우 마스터 측의 SPI CLK 라인과 직렬로 연결된 470 옴 저항을 발견했습니다. 그 저항을 제거하고 Lattice의 불균형 라인에 권장되는 솔루션 구현 및 위에 게시 된 제안 (슬레이브 측에서 솔루션의 절반 만 구현하고 그에 따라 필터 캡을 조정 할 수 있음) SPI 리본 통신 케이블의 길이를 연장 할 수있었습니다. 통신 오류없이 10cm ~ 160cm :

직렬 인터페이스의 노이즈 내성 향상 : 격자 반도체 백서 (2014 년 7 월)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.