NXP i.MX SoC Family/i.MX Linux Reference Manual

i.MX Linux Reference Manual - Connectivity - Enhanced Configurable Serial Peripheral Interface (ECSPI)

까마귀75 2022. 7. 22. 11:06
728x90
반응형

4.3 Enhanced Configurable Serial Peripheral Interface (ECSPI)

4.3.1 Introduction

ECSPI 드라이버는 ECSPI 컨트롤러에 대해 표준 Linux 드라이버 인터페이스를 구현한다.

 

아래 기능을 지원한다 :

  • 인터럽트 중심의 바이트 송수신
  • 다중 마스터 컨트롤러 인터페이스
  • 다중 슬레이브 선택
  • 다중 클라이언트 요청

ECSPI는 기존 시리얼 통신보다 소프트웨어 인터럽트가 적어서 빠른 데이터 통신에 사용된다. 각 ECSPI에는 데이터 FIFO가 장착되어 있고 구성 가능한 마스터/슬레이브 Serial Peripheral Interface(SPI) 인터페이스 모듈(프로세서가 외부 SPI 마스터나 슬레이브 디바이스와 인터페이스를 할 수 있음)이다. 

 

ECSPI의 주요 기능은 아래와 같다 :

  • 마스터/슬레이브 - 구성 가능
  • 여러 주변 디바이스를 지원하는 4개의 칩 선택 신호
  •  프로그래밍 가능한 최대 32비트 데이터 전송
  • 데이터 송수신을 위한 64 x 32 비트 FIFO
  • Chip Select(SS), SPI Clock(SCLK)의 구성 가능한 polarity(극성)와 phase(위상)

ECSPI 모듈은 아래 기능을 지원한다 :

  • Linux OS와 인터페이스하기 위해 ECSPI 모듈에 필요한 각 기능을 구현한다.
  • 다중 SPI 마스터 컨트롤러
  • 다중 클라이언트 동기 요청

 

4.3.2 Software Operation

아래 섹션에서는 ECSPI 소프트웨어 작동에 대해 설명한다.

 

4.3.3 SPI Sub-System in Linux OS

ECSPI 드라이버 레이어는 클라이언트 레이어(SPI-NOR Flash가 클라이언트의 예이다)와 하드웨어 액세스 레이어 사이에 위치한다. 아래 그림은 Linux OS에서 SPI 서브시스템에 대한 블록 데이터그램을 보여준다.

 

SPI 요청은 I/O 큐로 들어간다. 주어진 SPI 디바이스에 대한 요청은 FIFO 순서로 실행되고 완료 콜백을 통하여 비동기적으로 완료된다. 명령을 작성한 다음 응답을 읽는 것과 같은 일반적인 트랜잭션 유형에 대한 것을 포함한 이러한 호출에 대해 몇 가지 단순한 동기화 래퍼도 있다.

Figure 8. SPI Subsystem

모든 SPI 클라이언트에는 그것과 연결된 프로토콜 드라이버가 있어야 하고 모두 동일한 컨트롤 드라이버를 공유해야 한다. 컨트롤러 드라이버만 기본(underlying) SPI 하드웨어 모듈과 상호 작용할 수 있다. 아래 그림은 다양한 SPI 드라이버가 SPI 서브시스템에서 계층화되는 방식을 보여준다.

Figure 9. Layering of SPI Drivers in SPI Subsystem

 

4.3.4 Software Limitations

ECSPI 드라이버의 제한 사항은 아래와 같다 :

  • 현재 SPI 슬레이브 로직 구현이 없다.
  • 여러 마스터에 연결된 단일 클라이언트를 지원하지 않는다.
  • 디바이스 노드 항목의 도움으로 사용자 영역 인터페이스를 현재 구현하지 않지만, sysfs 인터페이스를 지원한다.

 

4.3.5 Standard Operations

ECSPI 드라이버는 초기화, 종료, 칩 선택, 전송을 위한 표준 진입점(entry point) 구현을 담당한다. 드라이버는 아래 함수를 구현한다 :

  • 초기화 함수 spi_imx_init()device_driver 구조체에 등록한다.
  • 프로브 함수 spi_imx_probe()SPI core 드라이버로 SPI 디바이스별 구조체의 초기화와 등록을 수행한다. 드라이버는 메모리와 IRQ 리소스를 조사한다. ECSPI I/O 핀을 활성화하고 IRQ를 요청하고 하드웨어를 재설정하도록 IOMUX를 구성한다.
  • 칩 선택 함수 spi_imx_chipselect()는 현재 SPI 디바이스에 대한 ECSPI 하드웨어를 구성한다. 이 디바이스에 대한 워드 크기, 전송 모드, 데이터 전송률를 설정한다.
  • SPI 전송 함수 spi_imx_transfer()는 데이터 전송 작업을 처리한다.
  • SPI 설정 함수 spi_imx_setup()는 현재 SPI 디바이스를 초기화한다.
  • SPI 드라이버의 ISR spi_imx_isr()는 데이터 전송 작업이 완료되고 인터럽트가 생성될 때 호출된다.

 

4.3.6 ECSPI Synchronous Operation

아래 그램은 ECSPI가 동기 방식의 read/write 작업을 제공하는 방법을 보여준다.

Figure 10. ECSPI Synchronous Operation

 

4.3.7 Source Code Structure

아래 테이블은 drivers/spi 디렉토리에서 사용할 수 있는 소스 파일을 보여준다 :

Table 38. ECSPI Driver Files

File Description
driveers/spi/spi-imx.c SPI Master Controller 드라이버

 

4.3.8 Menu Configuration Options

메뉴 구성에서 아래 모듈을 활성화 한다 :

  • CONFIG_SPI 빌드는 SPI core에 대해 지원. menuconfig에서 이 옵션은 아래에서 사용할 수 있다 :
    • Device Drivers > SPI Support
  • CONFIG_BITBANG은 필요한 드라이버가 자동으로 선택하는 라이브러리 코드이다. menuconfig에서 이 옵션은 아래에서 사용할 수 있다 :
    • Device Drivers > SPI Support > Utilities for Bitbanging SPI masters
  • CONFIG_SPI_IMXECSPI에서 SPI 마스터 모드를 구현한다. menuconfig에서 이 옵션은 아래에서 사용할 수 있다 :
    • Device Drivers > SPI Support > Freescale i.MX SPI controllers

 

4.3.9 Programming Interface

이 드라이버는 SPI coreECSPI 하드웨어와 인터페이스하는 데 필요한 모든 기능을 구현한다.

 

자세한 내용은 build: make htmldocs에서 생성된 Linux document를 참조한다.

 

4.3.10 Interrupt Requirements

SPI 인터페이스는 인터럽트를 생성한다.

 

ECSPI 인터럽트 요구 사항은 아래 테이블에 나열 되어 있다.

Table 39. ECSPI Interrupt Requirements

Parameter Equation Typical Worst Case
BaudRate/ Transfer Length (BaudRate/(TransferLength)) * (1/Rxtl) 31250 1500000

일반 적인(typical) 값은 1Mbps의 전송 속도(baud rate)와 1의 receiver trigger level (Rxtl) 및 32 비트 전송 길이(transfer length)를 기반으로 한다. 최악의 경우(worst-case)는 전송 길이(transfer length)가 8비트인 12Mbps(SPI 인터페이스에서 지원하는 최대)의 전송 속도(baud rate)를 기반으로 한다.

 

728x90
반응형