alif — Alif Ensemble SoC 함수

alif 모듈은 온보드 OSPI 플래시를 위한 블록 디바이스 래퍼와 Secure Enclave 서비스에서 SoC 정보를 덤프하는 헬퍼를 포함하여, Alif Ensemble SoC에 대한 포트별 기능을 노출합니다.

예제:

import alif

alif.info()
flash = alif.Flash()

함수

alif.info() None

Alif Secure Enclave 서비스(SE 서비스)에서 수집한 디바이스 정보를 시리얼 터미널로 덤프합니다.

클래스

class alif.Flash(*, start: int = -1, len: int = -1)

온보드 OSPI 플래시를 기반으로 하는 블록 디바이스 객체를 생성합니다. 이 클래스는 펌웨어가 OSPI 지원이 활성화된 상태로 빌드된 경우에만 사용할 수 있습니다.

인수 없이 호출하면, 플래시의 쓰기 가능한 파일 시스템 영역을 포괄하는 기본 싱글톤 객체를 반환합니다.

start는 플래시 저장 영역으로의 바이트 오프셋입니다. 플래시 블록 크기의 배수여야 하며 플래시 저장 범위 내에 있어야 합니다. 기본값은 -1이며, 이는 오프셋 0에서 시작함을 의미합니다.

len은 객체가 노출하는 플래시 영역의 길이(바이트)입니다. 플래시 블록 크기의 배수여야 하며 플래시 저장 영역의 끝을 넘어 확장되어서는 안 됩니다. 기본값은 -1이며, 이는 start부터 남은 모든 바이트를 사용함을 의미합니다.

이 객체는 또한 버퍼 프로토콜을 구현하여, OSPI XIP 베이스를 통해 플래시 영역에 대한 읽기 전용 메모리 매핑 접근을 허용합니다. 이를 통해 어떠한 플래시 읽기도 발생시키지 않고 전체 영역에 대한 제로 카피 뷰를 사용할 수 있습니다:

flash = alif.Flash()
view = memoryview(flash)
magic = bytes(view[:4])      # read the first 4 bytes directly from XIP
readblocks(block_num: int, buf: bytearray) int
readblocks(block_num: int, buf: bytearray, offset: int) int

플래시에서 buf로 바이트를 읽습니다. 두 가지 오버로드가 단순 인터페이스와 확장 인터페이스를 노출합니다:

단순 형식 (readblocks(block_num, buf)): 블록 인덱스 block_num에서 시작하여 전체 블록을 읽습니다. len(buf)는 플래시 블록 크기의 배수여야 합니다.

확장 형식 (readblocks(block_num, buf, offset)): 블록 block_num 내의 바이트 offset에서 시작하여 len(buf) 바이트를 읽습니다 – 반드시 정수 개의 블록일 필요는 없습니다. len(buf)에는 정렬 제약이 없습니다.

성공 시 0을 반환하고 그렇지 않으면 음수 오류 코드를 반환합니다. 표준 MicroPython 블록 디바이스 프로토콜은 None을 반환한다는 점에 유의하십시오. alif 드라이버는 vfs를 우회하는 호출자가 하드웨어 오류에 대응할 수 있도록 의도적으로 내부 OSPI 상태 코드를 노출합니다.

writeblocks(block_num: int, buf: bytes) int
writeblocks(block_num: int, buf: bytes, offset: int) int

buf에서 플래시로 바이트를 씁니다. 두 가지 오버로드가 단순 인터페이스와 확장 인터페이스를 노출합니다:

단순 형식 (writeblocks(block_num, buf)): 블록 인덱스 block_num에서 시작하여 전체 블록을 씁니다. len(buf)는 플래시 블록 크기의 배수여야 합니다. 영향을 받는 각 블록은 기록되기 전에 자동으로 지워집니다.

확장 형식 (writeblocks(block_num, buf, offset)): 블록 block_num 내의 바이트 offset에서 시작하여 len(buf) 바이트를 씁니다 – 반드시 정수 개의 블록일 필요는 없습니다. len(buf)에는 정렬 제약이 없으며, 암시적 지우기는 수행되지 않습니다 – 호출자는 사전에 ioctl(6, block_num) 호출을 통해 영향을 받는 블록이 지워졌는지 확인해야 합니다.

성공 시 0을 반환하고 그렇지 않으면 음수 오류 코드를 반환합니다(그 이유는 readblocks()를 참조하십시오).

ioctl(cmd: int, arg: int) int

블록 디바이스 제어 작업을 수행합니다. cmd는 표준 MicroPython MP_BLOCKDEV_IOCTL_* 명령 중 하나입니다:

  • 1 (init) — 0을 반환합니다.

  • 2 (deinit) — 0을 반환합니다.

  • 3 (sync) — 0을 반환합니다.

  • 4 (block count) — 영역의 블록 수를 반환합니다.

  • 5 (block size) — 플래시 블록 크기를 바이트 단위로 반환합니다.

  • 6 (block erase) — 인덱스 arg의 블록을 지우고 지우기 작업의 결과를 반환합니다.

그 외의 cmd 값은 None을 반환합니다.

상수

alif.usb_msc: bool

펌웨어가 USB Mass Storage Class 지원이 활성화된 상태로 빌드된 경우에만 존재하며 True로 설정됩니다. 그렇지 않으면 이 속성은 존재하지 않습니다.