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 순서로 실행되고 완료 콜백을 통하여 비동기적으로 완료된다. 명령을 작성한 다음 응답을 읽는 것과 같은 일반적인 트랜잭션 유형에 대한 것을 포함한 이러한 호출에 대해 몇 가지 단순한 동기화 래퍼도 있다.
모든 SPI 클라이언트에는 그것과 연결된 프로토콜 드라이버가 있어야 하고 모두 동일한 컨트롤 드라이버를 공유해야 한다. 컨트롤러 드라이버만 기본(underlying) SPI 하드웨어 모듈과 상호 작용할 수 있다. 아래 그림은 다양한 SPI 드라이버가 SPI 서브시스템에서 계층화되는 방식을 보여준다.
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 작업을 제공하는 방법을 보여준다.
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_IMX는 ECSPI에서 SPI 마스터 모드를 구현한다. menuconfig에서 이 옵션은 아래에서 사용할 수 있다 :
- Device Drivers > SPI Support > Freescale i.MX SPI controllers
4.3.9 Programming Interface
이 드라이버는 SPI core가 ECSPI 하드웨어와 인터페이스하는 데 필요한 모든 기능을 구현한다.
자세한 내용은 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)를 기반으로 한다.
'NXP i.MX SoC Family > i.MX Linux Reference Manual' 카테고리의 다른 글
i.MX Linux Reference Manual - Connectivity - FlexCAN (0) | 2022.07.25 |
---|---|
i.MX Linux Reference Manual - Connectivity - Fast Ethernet Controller (FEC) (0) | 2022.07.22 |
i.MX Linux Reference Manual - Connectivity - ENET IEEE-1588 (0) | 2022.07.20 |
i.MX Linux Reference Manual - Connectivity - ADC (0) | 2022.07.20 |
i.MX Linux Reference Manual - Connectivity (0) | 2022.07.19 |