alif — Alif Ensemble SoC 함수¶
alif 모듈은 온보드 OSPI 플래시를 위한 블록 디바이스 래퍼와 Secure Enclave 서비스에서 SoC 정보를 덤프하는 헬퍼를 포함하여, Alif Ensemble SoC에 대한 포트별 기능을 노출합니다.
예제:
import alif
alif.info()
flash = alif.Flash()
함수¶
클래스¶
- 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는 표준 MicroPythonMP_BLOCKDEV_IOCTL_*명령 중 하나입니다:1(init) —0을 반환합니다.2(deinit) —0을 반환합니다.3(sync) —0을 반환합니다.4(block count) — 영역의 블록 수를 반환합니다.5(block size) — 플래시 블록 크기를 바이트 단위로 반환합니다.6(block erase) — 인덱스arg의 블록을 지우고 지우기 작업의 결과를 반환합니다.
그 외의
cmd값은None을 반환합니다.