4.11 Low Power Universal Asynchronous Receiver/Transmitter (LPUART)
4.11.1 Introduction
저수준의 UART 드라이버는 Linux 시리얼 드라이버 API를 모든 UART 포트에 인터페이스한다.
아래와 같은 기능을 갖는다 :
- 인터럽트 기반과 eDMA 기반의 문자 송수신
- 최대 4Mbps의 표준 Linux 전송 속도
- 7비트, 8비트, 9비트 또는 10비트 문자 길이의 문자 송수신
- 하나 또는 두 개의 정지 비트를 전송
- 모뎀의 컨트롤 라인을 읽기 위해 TIOCMGET IOCTL을 지원한다. 상수(constant)는 TIOCM_CTS와 TIOCM_CAR만 지원하고, DTE 모드에서만 TIOCM_RI를 지원한다.
- 모뎀 제어 라인을 설정하기 위해 TIOCMSET IOCTL을 지원한다. TIOCM_RTS와 TIOCM_DTR 상수(constant)만 지원한다.
- 홀수와 짝수 패리티
- XON/XOFF 소프트웨어 흐름 컨트롤. 소프트웨어 흐름 컨트롤을 사용한 시리얼 통신은 통신 속도가 지나치게 빠르지 않고 버퍼 오버런 가능성이 최소일 때 안정적으로 작동한다.
- CTS/RTS 하드웨어 흐름 컨트롤. 인터럽트 기반의 하드웨어 흐름을 소프트웨어로 컨트롤하는 방법과 하드웨어 기반의 흐름을 하드웨어로 컨트롤하는 방법 두 가지가 있다.
- 표준 Linux 시리얼 API로 break 문자를 보내기와 받기
- 프레임과 패리티 오류 인식
- break, 패리티와 프레임 오류가 있는 문자를 무시하는 기능
- TIOCGSSERIAL와 TIOCSSERIAL TTY IOCTL로 UART 포트 정보를 가져오고 설정한다. setserial와 dip와 같은 일부 프로그램은 이 기능을 사용하여 전송 속도가 올바르게 설정되었는지 확인하고 디바이스에 대한 일반적인 정보를 얻는다. UART 유형은 serial_core.h 헤더 파일에 정의된 대로 52로 설정해야 한다.
- UART 포트를 suspend와 resume하는 전원 관리 기능
- 표준 TTY 레이어 IOCTL 호출
모든 UART 포트는 디바이스 파일 /dev/ttyLP0에서 /dev/ttyLP1까지 액세스할 수 있다.
4.11.2 Hardware Operation
디바이스에서 사용 가능한 UART 모듈의 수를 확인하려면, Applications Processor Reference Manual associated with SoC를 참조한다.
각 UART 하드웨어 포트는 표준 RS-232 시리얼 통신이 가능하다.
각 UART에는 64바이트의 송신기 FIFO와 32-half-word 깊이의 수신기 FIFO가 포함되어 있다. 또한 각 UART는 각 FIFO의 데이터 레벨이 프로그램된 임계 레벨에 도달하거나 모뎀 신호의 상태가 변경될 때와 같은 마스크 가능한 다양한 인터럽트를 지원한다.
4.11.3 Software Operation
Linux OS에는 다양한 플랫폼을 위해 UART 드라이버에서 공통적으로 많이 사용되는 시리얼 작업을 관리하는 core UART 드라이버가 포함되어 있다.
저수준 UART 드라이버는 UART 포트 정보와 컨트롤 함수의 세트와 같은 정보를 core UART 드라이버에 제공하는 역할을 한다. 이러한 함수는 Linux OS와 UART 하드웨어 사이의 저수준 인터페이스로 구현된다. 다른 드라이버나 사용자 애플리케이션에서는 호출할 수 없다. 하드웨어 컨트롤에 사용되는 컨트롤 함수는 uart_ops라는 구조체로 core 드라이버에 전달되고, 포트 정보는 uart_port라는 구조체로 전달된다. 저수준 드라이버는 UART 포트에 대한 다양한 인터럽트를 처리하고, 필요한 경우 콘솔 지원을 제공하는 역할도 한다.
각 UART는 DTS 파일에서 DMA 채널을 활성화하여 데이터 전송에 DMA를 사용하도록 구성할 수 있다.
드라이버는 DMA 전송이 필요한 UART에 대해 두 개의 DMA 채널을 요청한다. 수신 트랜잭션(transaction: 처리)에서 드라이버는 DMA 수신 버퍼에서 TTY Flip Buffer로 데이터를 복사한다.
DMA를 사용하여 전송하는 동안, 드라이버는 UART 전송 버퍼에서 DMA 전송 버퍼로 데이터를 복사하고 이 버퍼를 DMA 시스템으로 보낸다. 자세한 내용은 커널 소스 트리의 시리얼 드라이버에 대한 Linux 설명서를 참조한다.
4.11.4 Driver Features
UART 드라이버는 아래 기능을 지원한다 :
- 최대 4Mbps의 전송 속도
- 인터럽트 기반 모드에서만 프레임과 패리티 오류를 인식한다. DMA 기반 모드에서는 이 오류를 인식하지 못한다.
- break 문자를 보내고 받고 적절하게 처리
- 모뎀 컨트롤 신호를 인식
- 요청시 프레임, 패리티, break 오류가 있는 문자를 무시
- 하드웨어 흐름 컨트롤에 대한 지원을 구현
- UART 포트 정보를 가져오고 설정한다. 특정 흐름 컨트롤 카운트 정보는 하드웨어 기반의 하드웨어 흐름 컨트롤 모드에서 사용할 수 없다.
- 전원 관리
- 인터럽트 기반과 DMA 기반 데이터 전송
4.11.5 Source Code Structure
아래 테이블은 UART 드라이버 소스 파일을 보여준다.
Table 48. UART Driver Files
File | Description |
drivers/tty/serial/fsl_lpuart.c | LP UART 드라이버 |
i.MX 8, i.MX 8X, i.MX 8M 구성 옵션은 arch/arm64/ boot/dts 디렉토리에 있는 디바이스 트리에 지정된다.
4.11.6 Menu Configuration Options
UART 드라이버는 기본으로 활성화되어 있다.
메뉴 구성 옵션은 아래 위치에 있다 :
Device Drivers > Character devices > Serial drivers > Freescale LPUART serial port support [*] Console on Freescale LPUART serial port
4.11.7 Programming Interface
UART 드라이버는 UART 포트와 인터페이스하기 위해 Linux 시리얼 API에서 필요한 모든 메서드를 구현하고 Linux core UART 드라이버에 컨트롤 메서드의 세트를 제공한다. 드라이버에서 구현된 메서드에 대한 자세한 내용은 API 문서를 참조한다.
4.11.8 Interrupt Requirements
UART 드라이버 인터페이스는 인터럽트를 하나만 생성한다.
상태는 RX나 TX와 같은 인터럽트 유형 결정에 사용된다.
'NXP i.MX SoC Family > i.MX Linux Reference Manual' 카테고리의 다른 글
i.MX Linux Reference Manual - Audio (0) | 2022.08.04 |
---|---|
i.MX Linux Reference Manual - Connectivity - Bluetooth (0) | 2022.08.02 |
i.MX Linux Reference Manual - Connectivity - USB3 (0) | 2022.08.01 |
i.MX Linux Reference Manual - Connectivity - USB (6) | 2022.07.29 |
i.MX Linux Reference Manual - Connectivity - PCI Express Root Complex (0) | 2022.07.27 |