답변:
MCU의 실제 SPI 컨트롤러 주변 장치는 종종 인터페이스 비트 비트보다 훨씬 빠르게 실행될 수 있습니다. 물론 MCU에 달려 있지만 30 + MHz에서 실행되는 SPI 컨트롤러를 보는 것은 놀라운 일이 아니지만 비트 뱅킹은 약 1 MHz로 제한 될 수 있습니다 (운이 좋으면).
그러나 그것보다 더 많은 것이 있습니다. 비트 뱅킹시 MCU는 비트 뱅킹 중입니다. 그것은 데이터를 옮기고 GPIO 라인을 돌리고 있습니다. 즉, 다른 일을 할 수 없습니다. SPI 컨트롤러를 사용할 때 컨트롤러는 모든 작업을 수행하고 있으며 MCU는 다른 작업을 자유롭게 수행합니다.
따라서 실제 SPI 컨트롤러를 사용하면 실제 SPI 전송이 훨씬 빨라지고 MCU는 다른 작업을 수행하는 데 사용할 수있는주기를 다시 얻습니다.
두 방법을 모두 사용하여 동일한 결과를 얻을 수 있다는 점에는 차이가 없지만 하나를 선택해야하는 몇 가지 이유가 있습니다.
SPI 주변 장치를 사용하면 프로세서가 I / O 핀의 비트 뱅킹 타이밍을 생성하지 않아도되므로 다른 계산 작업을 수행하고 CPU 프로그래밍을 단순화 할 수 있습니다. 주변 장치는 하드웨어로 구현되므로 비트 뱅킹 I / O보다 더 빠르게 실행되고 전력을 덜 사용합니다. 응용 프로그램에서 SPI 주변 장치가없는 프로세서를 선택해야하는 경우 SPI와 인터페이스하기 위해 I / O를 비트 뱅킹하려는 경우가있을 수 있습니다. 건전한 이유로 절대적으로 필요한 경우가 아니면 피하는 것이 좋습니다.
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를 수행하는 대상에 따라 다릅니다. 관심이 가장 높은 데이터 속도를 얻는다면 하드웨어는 항상 비트 뱅킹보다 빠릅니다 (예 : 십대 3의 암 피질 칩은 하드웨어 SPI 지원을 사용하여 22Mbps에서 데이터를 푸시 할 수 있음). 3-16에서 전송 당 임의의 비트 수를 처리 할 수 있습니다-특정 led 컨트롤러에 대해 12 비트 청크로 데이터를 보낼 때 유용합니다!)). 16Mhz avr에서 그 차이는 조금 덜 극단적이며 하드웨어의 최고 데이터 속도는 4 / 낮은 5Mbps 인 것으로 보이며 비트 뱅킹은 약 2.3Mbps입니다.
또한 하드웨어 지원을 사용하는 경우 해당 마이크로 컨트롤러에 따라 DMA 컨트롤러를 사용하여 데이터를 이동시켜 코드를 다른 곳으로 되돌릴 수있는 옵션이 있습니다. 쓰다.
위의 모든 사항은 하드웨어 SPI가 옵션인지 여부에 따라 다릅니다.
SPI를 비트 뱅킹하면 SSP 인터럽트를 사용하여 통신을 처리 할 수 없습니다. 이것은 많은 용도에서 SPI에 중요하지 않습니다.