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

i.MX Linux Reference Manual (IMXLXRM) - Storage - Smart Direct Memory Access (SDMA) API

까마귀75 2022. 11. 18. 16:12
728x90
반응형

[이전] [목차] [다음]

3.7 Smart Direct Memory Access (SDMA) API

3.7.1 Overview

Smart Direct Memory Access (SDMA) API 드라이버는 SDMA 하드웨어를 컨트롤한다. MCU 메모리 공간과 주변 디바이스 사이에 데이터를 전송하기 위해 다른 드라이버에 API를 제공한다. 아래 기능을 지원한다:

  • MCU 메모리 공간에서 SDMA 내부 RAM으로 채널 스크립트 로드
  • 스크립트의 컨텍스트 파라미터 로드
  • 스크립트의 버퍼 디스크립터 파라미터 로드
  • 스크립트의 실행 컨트롤
  • 스크립트 실행 종료 시 콜백 메커니즘

 

3.7.2 Hardware Operation

SDMA 컨트롤러는 MCU 메모리 공간과 주변 디바이스 사이에 데이터 전송을 담당하며, 다음 기능을 포함한다:

  • 최대 32개의 다중화된 시분할 DMA 채널을 지원하는 다중 채널 DMA.
  • 16비트 Instruction-Set micro-RISC 엔진으로 구동.
  • 각 채널은 특정 스크립트를 실행.
  • 2 레벨의 우선 순위 기반 선점형 멀티태스킹으로 매우 빠른 컨텍스트 전환.
  • 4KB ROM에는 스타트업 스크립트(즉, 부트 코드)와 RAM에 위치한 스크립트에서 참조할 수 있는 다른 일반적인 유틸리티를 포함한다.
  • 8KB RAM 영역은 프로세서 컨텍스트 영역과 시스템 메모리에서 다운로드한 채널 스크립트를 저장하는 코드 공간 영역으로 나뉜다.

 

3.7.3 Software Operation

다른 드라이버에서 SDMA 채널을 컨트롤할 수 있도록 드라이버는 API를 제공한다. SDMA 채널은 주변 디바이스와 전송 타입에 따라 전용 스크립트를 실행한다. SDMA API 드라이버는 SDMA 메모리에 스크립트를 로드하고, 채널 디스크립터를 초기화하고, 버퍼 디스크립터와 SDMA 레지스터를 컨트롤한다.

 

아래 테이블은 SDMA를 사용하는 드라이버 목록과 각 드라이버에서 사용하는 물리적인 SDMA 채널 수를 제공한다. 드라이버는 사용하려는 SDMA 채널 번호(정적 채널 할당)를 지정하거나, SDMA 드라이버에서 드라이버가 사용할 비어 있는 SDMA 채널(동적 채널 할당)을 제공하도록 할 수 있다. 동적 채널 할당을 위해, SDMA 채널 목록은 채널 32에서 채널 1로 스캔된다. 비어 있는 채널이 발견되면, 해당 채널이 요청된 DMA 전송에 할당된다.

 

Table 31. SDMA Channel Usage

Driver Name Number
of SDMA
Channels
SDMA Channel Used
SDMA CMD 1 정적 채널 할당 - SDMA 채널 0 사용
SSI 디바이스당 2개 동적 채널 할당
UART 디바이스당 2개 동적 채널 할당
SPDIF 디바이스당 2개 동적 채널 할당
ESAI 디바이스당 2개 동적 채널 할당
ASRC 디바이스당 6개 동적 채널 할당
AUD2HTX 디바이스당 1개 동적 채널 할당
EASRC 디바이스당 8개 동적 채널 할당
ECSPI 디바이스당 2개 동적 채널 할당
MICFIL 디바이스당 1개 동적 채널 할당
XCVR 디바이스당 2개 동적 채널 할당
참고 :
이 테이블에는 현재 SDMA 스크립트에서 지원하는 기능이 포함되어 있지만, 특정 구현은 플랫폼마다 다를 수 있다. SDMA에서 지원하는 주변 디바이스는 각 플랫폼의 DTS 구성에 따라 달라진다.

 

3.7.4 Source Code Structure

SDMA API 헤더 파일인 dmaengine.h는 linux/include/linux 디렉토리에서 사용할 수 있다.

 

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

 

Table 32. SDMA API Source Files

File Description
drivers/dma/dmaengine.c SDMA 관리 루틴
drivers/dma/imx-sdma.c SDMA 구현 드라이버
drivers/dma/imx-dma.c i.MX DMA 드라이버

 

아래 테이블은 4.1과 4.9 커널에 대해 firmware/imx/sdma 디렉토리에서 사용할 수 있는 이미지 파일을 보여준다. 4.14 커널의 경우, sdma 펌웨어는 커널 소스 트리가 아닌 firmware-imx 패키지와 함께 제공된다.

 

Table 33. SDMA Script Files

File Description
sdma-imx6q.bin i.MX 6을 위한 SDMA RAM 스크립트
sdma-imx7d.bin i.MX 7과 i.MX 8M을 위한 SDMA RAM 스크립트

 

3.7.5 Special peripheral with SDMA cases

3.7.5.1 I2C in i.MX 6/7Dual/8M

현재 릴리스에서 i.MX 6/7Dual/8M의 I2C 컨트롤러와 SDMA 스크립트는 SDMA를 지원하지 않는다.

 

두 가지 제한 사항이 있다:

  • 프레임 길이가 16바이트보다 클 때, I2C는 DMA 모드를 사용한다. 왜냐하면 I2C 자체는 프레임을 보내고 받을 때 처음 몇 바이트와 마지막 몇 바이트를 처리하기 위해 여전히 CPU를 사용해야 하기 때문이다. 따라서, 전송되는 데이터가 길지 않은 경우, DMA를 사용하여 데이터를 전송해도 효율성이 향상되지 않는다.
  • SDMA 스크립트는 rootfs 단계에서 로드되므로, 커널 부팅 단계에서 I2C DMA 전송을 사용할 수 없다(전송이 실패한다).
    작은 용량의 데이터를 보낼 때는 I2C SDMA 모드를 사용하지 않는 것이 좋다. 대용량의 I2C 데이터 전송이 필요한 특별한 경우, NXP Pro-support에 문의하여 패치 세트를 받는다.

 

 

[이전] [목차] [다음]

 

 

728x90
반응형