내장 SPI 모듈을 사용하는 것과 비트 뱅킹을 사용하는 것에는 차이가 있습니까?


답변:


33

MCU의 실제 SPI 컨트롤러 주변 장치는 종종 인터페이스 비트 비트보다 훨씬 빠르게 실행될 수 있습니다. 물론 MCU에 달려 있지만 30 + MHz에서 실행되는 SPI 컨트롤러를 보는 것은 놀라운 일이 아니지만 비트 뱅킹은 약 1 MHz로 제한 될 수 있습니다 (운이 좋으면).

그러나 그것보다 더 많은 것이 있습니다. 비트 뱅킹시 MCU는 비트 뱅킹 중입니다. 그것은 데이터를 옮기고 GPIO 라인을 돌리고 있습니다. 즉, 다른 일을 할 수 없습니다. SPI 컨트롤러를 사용할 때 컨트롤러는 모든 작업을 수행하고 있으며 MCU는 다른 작업을 자유롭게 수행합니다.

따라서 실제 SPI 컨트롤러를 사용하면 실제 SPI 전송이 훨씬 빨라지고 MCU는 다른 작업을 수행하는 데 사용할 수있는주기를 다시 얻습니다.


11

두 방법을 모두 사용하여 동일한 결과를 얻을 수 있다는 점에는 차이가 없지만 하나를 선택해야하는 몇 가지 이유가 있습니다.

SPI 주변 장치를 사용하면 프로세서가 I / O 핀의 비트 뱅킹 타이밍을 생성하지 않아도되므로 다른 계산 작업을 수행하고 CPU 프로그래밍을 단순화 할 수 있습니다. 주변 장치는 하드웨어로 구현되므로 비트 뱅킹 I / O보다 더 빠르게 실행되고 전력을 덜 사용합니다. 응용 프로그램에서 SPI 주변 장치가없는 프로세서를 선택해야하는 경우 SPI와 인터페이스하기 위해 I / O를 비트 뱅킹하려는 경우가있을 수 있습니다. 건전한 이유로 절대적으로 필요한 경우가 아니면 피하는 것이 좋습니다.


건전한 이유는 쓰레기입니다. SPI 하드웨어를 정확한 구성으로 설정하려면 SPI 마스터 코드를 작성하는 것보다 SPI 주변 장치 데이터 시트를 읽는 데 더 많은 시간이 걸리므로 슬레이브 장치 데이터 시트 만 읽으면됩니다.
Olin Lathrop 2013 년

나는 내가 정신 건강에 약간의 감각 주의자라는 것을 인정할 것이다. 그러나 (필수적으로 기록되지 않은) 의도는 응용 프로그램의 복잡성이 증가함에 따라 시스템 전체가 의도 한 타이밍 내에서 계속 작동하도록하는 부담이 따른다는 것이었다. 나는 두 가지 방법을 모두 구현했으며 데이터 시트를 읽는 데 몇 분이 더 걸리더라도 주변 장치를 사용하는 것을 선호한다는 것을 알고 있습니다.
Amoch

6

SPI는 마스터가 클럭을 제어 하는 동기식 인터페이스입니다. 즉, 마스터 인 경우 클럭 속도와 타이밍을 선택할 수 있습니다. 슬레이브 장치는 처리 할 수있는 클럭 주파수의 상한이 있지만 일반적으로 클럭이 그 속도보다 느리다는 것은 신경 쓰지 않습니다. 보다 구체적으로, 일반적으로 각 슬레이브가 다시 스위칭하기 전에 하이 및 로우 상태에서 클럭을 볼 필요가있는 최소 시간이 있으며, 데이터 에지에 대한 최소 데이터 설정 및 유지 제한이있을 것입니다. 슬레이브는 데이터 라인을 읽습니다.

이 때문에 펌웨어에서 SPI 마스터를 구현하는 것은 매우 쉽습니다. 내장 SPI 하드웨어가 없거나 어떤 이유로 든 어떤 목적으로도 사용할 수 없었을 때 특정 핀을 편리하게 사용하기 위해이 작업을 자주 수행했습니다. 펌웨어에서 SPI 마스터를 수행하는 것은 매우 쉽습니다.

많은 SPI 슬레이브 장치는 매우 빠르기 때문에 각각 최소 하나의 명령주기를 갖는 것만으로도 최소 클럭 및 설정 시간이 충족되는 경우가 많습니다. 이 경우 코드가 매우 짧고 빠릅니다. 경우에 따라 슬레이브 장치는 클럭 위상마다 2 ~ 3 개의 명령 사이클이 필요할 수 있지만 실제로 보장하기는 어렵습니다. 로우 레벨 SPI 비트 루프는 다음 출력 비트를 제자리로 이동시키고 입력 비트를 잡고 루프 카운터를 점검해야합니다. 일반적으로 올바른 위치에 다른 오버 헤드를 삽입하여 라인을 구동하고 샘플링 할 때 배열하기 만하면 2-3 사이클 최소 타이밍 요구 사항을 충족 할 수 있습니다. 속도가 중요한 경우 어셈블러 프리 프로세서를 사용하여 언롤 된 루프를 작성할 수 있습니다. 이와 같은 기술로

펌웨어에서 SPI 마스터를 수행하면 몇 가지 장점이 있습니다. SPI 하드웨어는 구성 방법에있어 다소 엄격한 경우가 있습니다. 슬레이브 선택이 선언 될 때 바로 발생해야하는 문제는 항상 있습니다. 그러면 첫 번째 비트가 데이터 라인에 기록됩니까? 클럭이 낮게 시작하고 데이터 라인이 하강 에지에 고정되어 있으면 어떻게됩니까? 때때로 이것은 중요하지만 때로는 그렇지 않습니다. 펌웨어 SPI 마스터를 사용하면 다른 슬레이브와 통신하기 위해 더 많은 관용과 동일한 루틴을 사용할 수 있습니다. 예를 들어, MOSI (Master Out Slave In) 데이터 라인이 클럭의 양쪽 가장자리에서 안정적인지 확인할 수 있습니다. SPI 하드웨어는 일반적으로 그렇게하지 않으므로 해당 하드웨어는 당시 통신중인 슬레이브에 따라 재구성해야합니다.

펌웨어 SPI 마스터의 또 다른 장점은 SPI 시퀀스 당 임의의 비트 수를 선택할 수 있다는 것입니다. 하드웨어는 일반적으로 8 비트의 배수로 제한됩니다. 대부분의 장치는 전체 바이트 전송을 허용하도록 설계되었지만 종종 필요하지는 않습니다. 예를 들어, 10 비트 A / D는 10 개의 데이터 비트를 먼저 보낸 다음 클럭을 계속 유지하면 그 이후에 0 또는 가비지를 보냅니다. 하드웨어 SPI를 사용하는 경우 16 비트를 전송하고 가비지를 제거해야합니다. 모든 것이 잘 작동하지만 필요한 경우 최소 10 비트 만 전송하므로이 경우 펌웨어 SPI 마스터가 실제로 하드웨어보다 빠를 수 있습니다.

하드웨어 SPI 마스터의 주요 장점은 펌웨어가 바이트 전송을 시작한 다음 다른 작업을 수행 할 수 있다는 것입니다. 클럭킹은 일반적으로 롤링되지 않은 펌웨어 루프보다 더 빠를 수 있습니다. 특정 상황에서는이 두 가지 장점이 모두 중요하지만 종종 관련이 없습니다. 하드웨어를 사용하여 바이트를 전송하는 대부분의 SPI 코드는 즉시 하드웨어가 전송을 완료하기 위해 대기 루프로 들어갑니다. 또한 슬레이브 타이밍 요구 사항을주의 깊게 확인하십시오. SPI 디바이스는 일반적으로 전체적으로 빠르지 만 슬레이브가 처리 할 수있는 최대 속도에 맞추기 위해 하드웨어를 느리게해야하는 경우가 있습니다.

그것은 모두 마스터 관점에서였습니다. 간단히 말해서, SPI 하드웨어를 마스터로 사용하면 이점이 적으며 때로는 사용하지 않는 경우에도 몇 가지 장점이 있습니다. 그러나 그것은 노예에게는 모두 다릅니다. 마스터가 클럭을 제어하기 때문에 슬레이브는 마스터가 할 때마다 마스터가하는 일에 대비해야합니다. 타이밍 요구 사항은 종종 명령 시간에 비해 매우 짧기 때문에 SPI 슬레이브를 구현하는 하드웨어를 갖는 것이 일반적으로 원하는 것입니다.

펌웨어에서 SPI 슬레이브를 수행 할 수 있지만 까다 롭고주기와 대기 시간을 신중하게 계산해야하며 일반적으로 특정 마스터가 사용하는 프로토콜의 일부 하위 집합을 구현하게됩니다. 예를 들어, 옛날 아날로그 컨트롤러 보드와 같은 디지털 방식으로 설계해야했습니다. 이 보드는 SPI 버스를 통해 나머지 시스템과 인터페이스했습니다. 기존 아날로그 보드에는 제어 값을 설정하기위한 2 채널 D / A와 측정 값을 다시 읽을 수있는 2 채널 A / D가있었습니다. 단일 프로세서에서 두 가지를 모두 구현하는 것은 까다 로웠으며 기존 마스터가 실제로 사용한 하드웨어 D / A 및 A / D SPI 프로토콜의 하위 집합을 파악하는 것이 포함되었습니다. 또한 SPI 클럭 속도보다 훨씬 빠르게 실행될 수있는 프로세서가 포함되었습니다. 결국 세 개의 인터럽트를 사용했습니다. 각 슬레이브 선택과 클럭 라인의 상승 에지에 하나씩. 마지막 것은 시스템에서 우선 순위가 가장 높은 인터럽트 여야했으며, 그렇지 않으면 대기 시간 요구 사항을 충족 할 수 없었습니다.

어쨌든, 전반적인 요점은 펌웨어 SPI 마스터가 쉽고 작고 빠르며 유연하며 하나를 수행하는 것을 멀리 할 이유가 거의 없다는 것입니다. 반면, 슬레이브의 경우 실제로 하드웨어를 원하거나 타이밍, 대기 시간 등에 대해 매우 신중하게 생각해야합니다.


일반적인 하드웨어 SPI 장치처럼 작동 할 수있는 마이크로 컨트롤러 슬레이브 구현을 발견 했습니까 (예 : 마스터가 언제든지 CS에서 우위를 점하고 상태를 읽을 수 있도록 허용하고, CS를 사용하여 명령 경계를 표시 할 수 있습니까? 현재 바이트와 이전 바이트 사이에 CS 에지가 있었는지보고
supercat

@ supe : 예, 문제입니다. 슬레이브 SPI 하드웨어는 일반적으로 클럭 및 입력 데이터를 무시하고 칩 선택이 어설 션되지 않은 경우 출력 데이터 라인을 높은 임피던스로 유지하지만 일반적으로 칩 선택 경계가 어디인지는 알려주지 않습니다. 적어도 내가 사용했던 PIC SPI 하드웨어를 사용하면,이를 위해 자신의 인터럽트 온 칩 선택을 설정해야합니다.
Olin Lathrop

괜찮은 구현을 알고 있는지 궁금합니다. 나는 그렇지 않다고 생각한다. 선택 와이어에서 하드웨어 인터럽트를 사용하는 데 따른 문제점은 바이트가 전송 된 직후에 선택 와이어에서 전이가 발생하면 슬레이브가 문제의 바이트 이전 또는 이후에 발생한 문제를 해결하는 데 어려움을 겪을 수 있다는 것입니다. 거의 모든 칩에 SPI 슬레이브 구현이 있다는 것이 당혹 스럽지만 실제로는 일반적인 SPI 하드웨어 슬레이브 장치처럼 사용할 수없는 것으로 보입니다. 상황은 8048에 비해 PIC의 프로세서 슬레이브 포트와 다소 비슷합니다.
supercat

8048 프로세서 슬레이브 포트에는 주소 핀이 있습니다. 데이터가 8048에 외부 적으로 기록 될 때 8048은 해당 핀의 상태를 래치하여 코드에서 사용할 수있게합니다 (일반적으로 명령의 첫 번째 바이트는 한 주소에, 매개 변수 또는 데이터는 다른 주소에 기록됨). 한 주소를 읽으면 8048 코드에 넣은 모든 것이 생성되지만 다른 주소에서 읽은 일부 비트는 데이터를 읽거나 쓸 준비가되었는지 여부를 나타 내기 위해 8048 하드웨어에 의해 생성됩니다.
supercat

차이가 마스터 (쉬운)와 슬레이브 (훨씬 더 어렵다)를 뱅킹하는 차이를 지적하기 위해 +1.
tcrosley

1

SPI를 수행하는 대상에 따라 다릅니다. 관심이 가장 높은 데이터 속도를 얻는다면 하드웨어는 항상 비트 뱅킹보다 빠릅니다 (예 : 십대 3의 암 피질 칩은 하드웨어 SPI 지원을 사용하여 22Mbps에서 데이터를 푸시 할 수 있음). 3-16에서 전송 당 임의의 비트 수를 처리 할 수 ​​있습니다-특정 led 컨트롤러에 대해 12 비트 청크로 데이터를 보낼 때 유용합니다!)). 16Mhz avr에서 그 차이는 조금 덜 극단적이며 하드웨어의 최고 데이터 속도는 4 / 낮은 5Mbps 인 것으로 보이며 비트 뱅킹은 약 2.3Mbps입니다.

또한 하드웨어 지원을 사용하는 경우 해당 마이크로 컨트롤러에 따라 DMA 컨트롤러를 사용하여 데이터를 이동시켜 코드를 다른 곳으로 되돌릴 수있는 옵션이 있습니다. 쓰다.

위의 모든 사항은 하드웨어 SPI가 옵션인지 여부에 따라 다릅니다.


0

SPI를 비트 뱅킹하면 SSP 인터럽트를 사용하여 통신을 처리 할 수 ​​없습니다. 이것은 많은 용도에서 SPI에 중요하지 않습니다.


1
구체적인 프로세서는 언급되지 않았으므로이 문맥에서 "SSP 인터럽트"는 의미가없는 용어입니다.
Olin Lathrop 2013 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.