class DSIDisplay – DSI 디스플레이 드라이버¶
DSIDisplay 클래스는 STM32 DSI 호스트 컨트롤러를 통해 MIPI-DSI 패널을 구동합니다. MIPI DSI는 하나의 클록 레인과 하나 이상의 데이터 레인을 차동 쌍으로 사용하는 패킷화된 직렬 디스플레이 프로토콜로, 24비트 병렬 RGB보다 훨씬 적은 배선으로 고해상도 콘텐츠(최대 1080p)를 전달할 수 있습니다. 픽셀은 선택한 재생률로 SDRAM 기반 프레임버퍼에서 직접 스트리밍되므로 CPU는 갱신에 관여하지 않습니다.
패널 해상도는 display 모듈의 상수(QVGA, VGA, HD, FHD 등)를 사용하여 framesize 로 선택합니다. 패널별 초기화 시퀀스는 controller 키워드 인자를 통해 연결됩니다 – ST7701 은 일반적인 ST7701 기반 480x800 DSI 패널을 다룹니다. DCS 명령은 bus_write() / bus_read() 를 통해 대역 외로 실행할 수 있습니다. 백라이트 밝기는 기본적으로 단순 GPIO로 구동되며, backlight 로 전달되면 DACBacklight / PWMBacklight 로 구동됩니다.
프레임은 image.Image 와 함께 write() 를 호출하여 표시됩니다. 드라이버는 RGB 변환, 스케일링, ROI, 팔레트 및 방향 변환을 내부적으로 처리합니다.
예제 – ST7701 기반 480x800 DSI 패널에 카메라 화면을 미러링합니다:
import csi
import display
import image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
lcd = display.DSIDisplay(framesize=display.TFWVGA,
controller=display.ST7701())
while True:
lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)
생성자¶
- class display.DSIDisplay(framesize: int = FWVGA, *, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, channel: int = 0, controller: Any | None = None, backlight: Any | None = None)¶
framesize표준 지원 해상도 중 하나입니다(예:display.FWVGA).refresh화면 재생률을 헤르츠 단위로 설정합니다. 유효 범위는 30에서 120까지입니다. 이는 DSI LCD 클록을 제어합니다.display_on디스플레이를 활성화합니다.triple_buffer화면 갱신 시 테어링 없는 업데이트를 위해 세 개의 프레임버퍼를 할당합니다.write()에서 수직 뒤집기를 사용하려면 필요합니다.portraitframesize의 너비와 높이를 맞바꿉니다.channel디스플레이와 통신하는 데 사용할 가상 MIPI DSI 채널입니다.controller디스플레이와 함께 초기화할 컨트롤러 칩 클래스를 여기에 전달합니다. 예: MIPI DSI 디스플레이용 표준 디스플레이 컨트롤러인display.ST7701().backlight사용할 백라이트 컨트롤러 모듈을 지정합니다. 기본적으로 백라이트는 GPIO 핀을 통해 제어됩니다.- write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None¶
왼쪽 상단 모서리가 위치
x,y에서 시작하는image를 표시합니다.image는 디스크에서 이미지를 자동으로 불러오기 위해 이미지 객체 대신 경로 문자열일 수 있습니다. 예:write("test.jpg").x_scale은 표시되는 이미지가 x 방향으로 얼마나 스케일링되는지를 제어합니다(float). 이 값이 음수이면 이미지가 수평으로 뒤집힙니다.y_scale이 지정되지 않으면 가로세로 비율을 유지하기 위해x_scale과 일치합니다.y_scale은 표시되는 이미지가 y 방향으로 얼마나 스케일링되는지를 제어합니다(float). 이 값이 음수이면 이미지가 수직으로 뒤집힙니다. 수직 뒤집기에는triple_buffer=True가 필요합니다.x_scale이 지정되지 않으면y_scale과 일치합니다.roi는 표시할 이미지의 관심 영역 사각형 튜플(x, y, w, h)입니다.rgb_channel은 RGB565 이미지에서 추출하여 그레이스케일로 디스플레이에 렌더링할 RGB 채널(0=R, 1=G, 2=B)입니다.-1은 추출을 비활성화합니다. 유효 범위는 -1에서 2까지입니다.alpha는 이미지의 불투명도를 제어합니다. 255는 불투명한 이미지를 표시하고, 더 낮은 값은 검은색 쪽으로 블렌딩하며, 0은 완전히 검은 이미지를 생성합니다. 유효 범위는 0에서 255까지입니다.color_palette는 색상 팔레트 열거형이거나 입력 이미지의 그레이스케일 값에 대한 색상 룩업 테이블로 사용할 256 픽셀 RGB565 이미지일 수 있습니다.rgb_channel추출 후에 적용됩니다.alpha_palette는 입력 픽셀의 그레이스케일 값마다alpha를 변조하는 알파 룩업 테이블로 사용되는 256 픽셀 그레이스케일 이미지일 수 있습니다.rgb_channel추출 후에 적용됩니다.hint는 다음 플래그들의 논리 OR입니다:image.AREA: 기본값인 최근접 이웃 대신 다운스케일링 시 영역 스케일링을 사용합니다.image.BILINEAR: 기본값인 최근접 이웃 스케일링 대신 양선형 스케일링을 사용합니다.image.BICUBIC: 기본값인 최근접 이웃 스케일링 대신 양3차 스케일링을 사용합니다.image.CENTER: 디스플레이에 그려지는 이미지를 중앙에 배치합니다. 이는 스케일링 후에 적용됩니다.image.HMIRROR: 이미지를 수평으로 미러링합니다.image.VFLIP: 이미지를 수직으로 뒤집습니다.image.TRANSPOSE: 이미지를 전치합니다(x/y 맞바꿈).image.EXTRACT_RGB_CHANNEL_FIRST: 스케일링 전에 rgb_channel 추출을 수행합니다.image.APPLY_COLOR_PALETTE_FIRST: 스케일링 전에 색상 팔레트를 적용합니다.image.SCALE_ASPECT_KEEP: 그려지는 이미지를 디스플레이 안에 맞도록 스케일링합니다.image.SCALE_ASPECT_EXPAND: 그려지는 이미지를 디스플레이를 채우도록 스케일링합니다(잘림 발생).image.SCALE_ASPECT_IGNORE: 그려지는 이미지를 디스플레이를 채우도록 스케일링합니다(늘어남 발생).image.ROTATE_90: 이미지를 90도 회전합니다(이는 VFLIP | TRANSPOSE와 동일).image.ROTATE_180: 이미지를 180도 회전합니다(이는 HMIRROR | VFLIP와 동일).image.ROTATE_270: 이미지를 270도 회전합니다(이는 HMIRROR | TRANSPOSE와 동일).
- clear(display_off: bool = False) None¶
LCD 프레임버퍼를 검은색으로 지웁니다.
display_off가 True이면 프레임버퍼를 지우는 대신 디스플레이 로직을 끕니다.
- backlight(value: int | None = None) int¶
LCD 백라이트 디밍 값을 0(끔)에서 100(켬)까지 설정합니다. 인자를 전달하지 않으면 현재 백라이트 값을 가져옵니다.
DACBacklight또는PWMBacklight컨트롤러가 생성자에 전달되지 않는 한, 백라이트는 GPIO 핀으로 제어되며 0(끔)에서 0이 아닌 값(켬)으로만 전환됩니다.
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
디스플레이에 DSI 명령
cmd를 보냅니다.args는 명령 파라미터를 담은 선택적 정수 또는 버퍼입니다.dcs가 True이면 명령을 DCS(Display Command Set) 패킷으로 보냅니다.