lớp SDCard -- trình điều khiển thẻ SD / MMC¶
Lớp SDCard điều khiển khe cắm thẻ SD / MMC trên các camera OpenMV có khe cắm đó. Trình điều khiển triển khai giao diện vfs.AbstractBlockDev để có thể truyền trực tiếp vào vfs.mount()
import machine
import vfs
sd = machine.SDCard()
vfs.mount(sd, "/sd")
Ghi chú
Firmware OpenMV tự động gắn kết thẻ SD khi khởi động, vì vậy hầu hết các tập lệnh không bao giờ tạo SDCard trực tiếp -- chúng chỉ đọc và ghi qua đường dẫn được gắn kết tự động. Chỉ tạo thủ công khi bạn cần điểm gắn kết không mặc định hoặc truy cập cấp khối thô qua readblocks() / writeblocks() / ioctl().
Trên OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6, khe cắm được điều khiển bởi bộ điều khiển SDMMC tích hợp của STM32 ở chế độ SD 4 bit. Trên OpenMV Cam RT1062, khe cắm được điều khiển bởi bộ điều khiển USDHC của i.MX RT, cũng ở chế độ SD 4 bit. Không cần đối số pin-mux trên bất kỳ bo mạch OpenMV hiện tại nào -- trình điều khiển biết cách nối dây của bo mạch.
Không được hiển thị trên OpenMV Cam AE3 (cổng alif).
Constructors¶
- class machine.SDCard(id: int = 1) SDCard¶
Trả về singleton
SDCardcho khe cắm SD được xác định bởiid.idđược chấp nhận để tương thích đa cổng nhưng các cổng được OpenMV hỗ trợ chỉ hiển thị một khe cắm; truyền1hoặc bỏ qua.Trên STM32, constructor không nhận đối số nào; trên mimxrt, đối số
idđược chấp nhận nhưng chỉ1là hợp lệ.Methods¶
- present() bool¶
Trả về
Truenếu thẻ hiện đang được phát hiện trong khe cắm,Falsenếu không.Trên các bo mạch nối dây tín hiệu phát hiện thẻ, phương thức này phản ánh tín hiệu đó theo thời gian thực, vì vậy nó có thể được thăm dò sau khi đối tượng
SDCardđã được tạo để phản ứng với việc cắm vào / rút ra nóng. Trên các bo mạch không có tín hiệu phát hiện thẻ, giá trị được chốt tại thời điểm tạo -- nó báo cáo kết quả của lần thăm dò CMD0 ban đầu mà trình điều khiển đã thực hiện khi đối tượng được tạo, và một thẻ cắm nóng sau đó sẽ không hiển thị cho đến khi đối tượng được tạo lại (hoặcinit()được gọi trên mimxrt).
- info() tuple[int, int, int]¶
Trả về một 3-tuple mô tả thẻ đang được cắm:
[0]num_blocks-- tổng dung lượng tính bằng khối 512 byte. Nhân với 512 để có dung lượng byte thô.[1]block_size-- luôn là512cho thẻ SD. Được bao gồm để người gọi có thể thực hiệnnum_blocks * block_sizemột cách di động.[2]card_type-- loại thẻ được báo cáo bởi bus SD trong quá trình bắt tay khởi tạo CMD8 / OCR. Các giá trị điển hình là0(SDSC -- dung lượng tiêu chuẩn),0x40(SDHC / SDXC -- dung lượng cao / mở rộng) và0x80(MMC).
Hữu ích để kiểm tra sơ bộ rằng thẻ đã được nhận dạng, hoặc để hiển thị số liệu dung lượng trống so với tổng dung lượng.
- power(state: bool, /) None¶
Bật hoặc tắt nguồn điện của khe cắm thẻ. Firmware STM32 hiển thị phương thức nhưng không có OpenMV Cam hiện tại nào kiểm soát nguồn cung cấp SD, vì vậy lệnh gọi thực tế là không có tác dụng. Được giữ để tương thích với mã ban đầu được viết cho các bo mạch tham chiếu MicroPython STM32 thượng nguồn. Chỉ dành cho cổng STM32.
- read(block_num: int, /) bytes¶
Đọc một khối 512 byte đơn từ thẻ và trả về nó dưới dạng đối tượng
bytesmới được cấp phát.Đây là thao tác đọc khối đơn kế thừa được vận chuyển bởi cổng STM32. Mã mới nên sử dụng
readblocks()thay thế -- phương thức đó hoạt động trên mọi cổng OpenMV, có thể đọc bất kỳ số lượng khối liên tiếp nào trong một lần truyền, và tránh phân bổ trên mỗi lần gọi bằng cách ghi vào bộ đệm do người gọi cung cấp. Chỉ dành cho cổng STM32.
- write(block_num: int, data: bytes, /) None¶
Ghi một khối 512 byte đơn vào thẻ.
dataphải có đúng 512 byte.Đây là thao tác ghi khối đơn kế thừa được vận chuyển bởi cổng STM32; mã mới nên sử dụng
writeblocks()thay thế, hoạt động trên mọi cổng OpenMV và có thể ghi bất kỳ số lượng khối liên tiếp nào mỗi lần gọi. Chỉ dành cho cổng STM32.
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Đọc dữ liệu thô căn chỉnh theo khối từ thẻ vào
buf. Điểm vào thiết bị khốivfs.AbstractBlockDevtiêu chuẩn được sử dụng bởi lớp hệ thống tập tin.Dạng đơn giản (
readblocks(block_num, buf)): đọc toàn bộ các khối bắt đầu từ chỉ số khốiblock_num.len(buf)phải là bội số của kích thước khối SD (512 byte).Dạng mở rộng (
readblocks(block_num, buf, offset)): đọclen(buf)byte -- không nhất thiết phải là số nguyên lần của các khối -- bắt đầu từ byteoffsettrong khốiblock_num. Được sử dụng bởi littlefs và các hệ thống tập tin có thể địa chỉ theo byte khác.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Ghi dữ liệu thô căn chỉnh theo khối từ
bufvào thẻ. Điểm vào thiết bị khốivfs.AbstractBlockDevtiêu chuẩn được sử dụng bởi lớp hệ thống tập tin.Dạng đơn giản (
writeblocks(block_num, buf)): ghi toàn bộ các khối bắt đầu từ chỉ số khốiblock_num.len(buf)phải là bội số của kích thước khối SD (512 byte). Mỗi khối bị ảnh hưởng được ghi đè hoàn toàn.Dạng mở rộng (
writeblocks(block_num, buf, offset)): ghilen(buf)byte -- không nhất thiết phải là số nguyên lần của các khối -- bắt đầu từ byteoffsettrong khốiblock_num. Được sử dụng bởi littlefs và các hệ thống tập tin có thể địa chỉ theo byte khác.
- ioctl(cmd: int, arg: int) int | None¶
Điểm vào điều khiển
vfs.AbstractBlockDevtiêu chuẩn. Được gọi bởi lớp hệ thống tập tin tại thời điểm gắn kết/tháo kết và mỗi lần đồng bộ hóa. Các giá trịcmdđược nhận dạng là:1-- khởi tạo. Trả về0nếu thành công.2-- hủy khởi tạo. Trả về0nếu thành công.3-- đồng bộ hóa bất kỳ lần ghi đang chờ nào. Trả về0(trình điều khiển SDMMC ghi đồng bộ, không có gì để xả).4-- trả về số lượng khối trên thiết bị.5-- trả về kích thước của một khối đơn (luôn là 512).6-- xóa một khối (không có tác dụng trên SD, được giữ cho hợp đồngvfs.AbstractBlockDev).7-- trả về liệu thiết bị có hỗ trợ xóa khối không (0 trên SD).
Người gọi trực tiếp thường không sử dụng phương thức này -- trình điều khiển hệ thống tập tin tự động gửi tất cả các mã tiêu chuẩn một khi
SDCardđược gắn kết.
- init(*args, **kwargs) None¶
Khởi tạo lại giao diện SD từ đầu. Chấp nhận các đối số giống như constructor. Hữu ích để phát hiện lại thẻ cắm nóng trên các bo mạch không có tín hiệu phát hiện thẻ, vì
present()nếu không sẽ bị chốt tại thời điểm tạo. Chỉ dành cho cổng mimxrt.
- deinit() None¶
Hủy khởi tạo giao diện SD, giải phóng bộ điều khiển SDMMC/USDHC và các chân IO mà nó đã yêu cầu. Đối tượng
SDCardtrở nên không sử dụng được cho đến khiinit()được gọi lại. Sử dụng nó trước khi nạp lại thẻ từ giao diện khác, hoặc để ngắt nguồn cho khe cắm trong ứng dụng chạy bằng pin. Chỉ dành cho cổng mimxrt.