клас SDCard – драйвер карти SD / MMC¶
Клас SDCard керує слотом карти SD / MMC на камерах OpenMV, де він присутній. Драйвер реалізує інтерфейс vfs.AbstractBlockDev, тому його можна передати безпосередньо до vfs.mount()
import machine
import vfs
sd = machine.SDCard()
vfs.mount(sd, "/sd")
Примітка
Мікропрограма OpenMV автоматично монтує карту SD під час завантаження, тому більшість скриптів ніколи не створюють SDCard безпосередньо – вони просто читають і записують через автоматично змонтований шлях. Створюйте об’єкт вручну лише тоді, коли потрібна нестандартна точка монтування або доступ до блоків на низькому рівні через readblocks() / writeblocks() / ioctl().
На OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal / N6 слот керується вбудованим контролером SDMMC мікросхеми STM32 у режимі 4-бітного SD. На OpenMV Cam RT1062 слот керується контролером USDHC i.MX RT, також у режимі 4-бітного SD. Жодних аргументів мультиплексування виводів для поточних плат OpenMV не потрібно – драйвер знає схему підключення плати.
Недоступно на OpenMV Cam AE3 (порт alif).
Конструктори¶
- class machine.SDCard(id: int = 1) SDCard¶
Повертає одиничний екземпляр
SDCardдля слота SD, визначеного заid.idприймається для сумісності між портами, але порти, що підтримуються OpenMV, надають лише один слот; передайте1або не вказуйте аргумент.На STM32 конструктор не приймає жодних аргументів; на mimxrt аргумент
idприймається, але дійсним є лише1.Методи¶
- present() bool¶
Повертає
True, якщо карта наразі виявлена у слоті, абоFalse– в іншому випадку.На платах, де підключено сигнал виявлення картки, метод відображає цей сигнал у реальному часі, тому його можна опитувати після створення об’єкта
SDCardдля реагування на гаряче встановлення / виймання. На платах без сигналу виявлення картки значення фіксується під час створення об’єкта – воно відображає результат початкового зондування CMD0, яке виконав драйвер при створенні об’єкта, і карта, встановлена після цього, не буде видима до повторного створення об’єкта (або викликуinit()на mimxrt).
- info() tuple[int, int, int]¶
Повертає кортеж із 3 елементів, що описують встановлену карту:
[0]num_blocks– загальна ємність у блоках по 512 байт. Помножте на 512 для отримання сирої ємності у байтах.[1]block_size– завжди512для карт SD. Включено, щоб абоненти могли портативно використовуватиnum_blocks * block_size.[2]card_type– тип карти, повідомлений шиною SD під час рукостискання ініціалізації CMD8 / OCR. Типові значення:0(SDSC – стандартна ємність),0x40(SDHC / SDXC – висока / розширена ємність) та0x80(MMC).
Корисно для перевірки того, що карта розпізнана, або для відображення показників вільного місця відносно загальної ємності.
- power(state: bool, /) None¶
Вмикає або вимикає шину живлення слота картки. Мікропрограма STM32 надає цей метод, але жодна поточна OpenMV Cam не комутує живлення SD, тому виклик фактично є пустою операцією. Збережено для сумісності з кодом, спочатку написаним для еталонних плат STM32 upstream MicroPython. Лише порт STM32.
- read(block_num: int, /) bytes¶
Зчитує один блок 512 байт з картки і повертає його як новостворений об’єкт
bytes.Це застарілий метод читання одного блоку, що постачається з портом STM32. Новий код слід використовувати з
readblocks()– цей метод працює на кожному порту OpenMV, може читати будь-яку кількість суміжних блоків за одну операцію і уникає виділення пам’яті на кожен виклик, записуючи у буфер, наданий абонентом. Лише порт STM32.
- write(block_num: int, data: bytes, /) None¶
Записує один блок 512 байт на картку.
dataповинен бути рівно 512 байт.Це застарілий метод запису одного блоку, що постачається з портом STM32; новий код слід використовувати з
writeblocks(), який працює на кожному порту OpenMV і може записувати будь-яку кількість суміжних блоків за виклик. Лише порт STM32.
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
Читає вирівняні по блоках сирі дані з картки у
buf. Стандартна точка входу блочного пристроюvfs.AbstractBlockDev, яку використовує рівень файлової системи.Проста форма (
readblocks(block_num, buf)): читає цілі блоки, починаючи з індексу блокуblock_num.len(buf)повинен бути кратним розміру блоку SD (512 байт).Розширена форма (
readblocks(block_num, buf, offset)): читаєlen(buf)байт – не обов’язково ціле число блоків – починаючи з байтаoffsetу блоціblock_num. Використовується littlefs та іншими файловими системами з адресацією по байтах.
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
Записує вирівняні по блоках сирі дані з
bufна картку. Стандартна точка входу блочного пристроюvfs.AbstractBlockDev, яку використовує рівень файлової системи.Проста форма (
writeblocks(block_num, buf)): записує цілі блоки, починаючи з індексу блокуblock_num.len(buf)повинен бути кратним розміру блоку SD (512 байт). Кожен задіяний блок повністю перезаписується.Розширена форма (
writeblocks(block_num, buf, offset)): записуєlen(buf)байт – не обов’язково ціле число блоків – починаючи з байтаoffsetу блоціblock_num. Використовується littlefs та іншими файловими системами з адресацією по байтах.
- ioctl(cmd: int, arg: int) int | None¶
Стандартна точка входу керування
vfs.AbstractBlockDev. Викликається рівнем файлової системи під час монтування/демонтування та при кожній синхронізації. Розпізнавані значенняcmd:1– ініціалізація. Повертає0у разі успіху.2– деініціалізація. Повертає0у разі успіху.3– синхронізує відкладені записи. Повертає0(драйвер SDMMC пише синхронно, нічого скидати).4– повертає кількість блоків на пристрої.5– повертає розмір одного блоку (завжди 512).6– стирає блок (пуста операція для SD, збережена відповідно до контрактуvfs.AbstractBlockDev).7– повертає, чи підтримує пристрій стирання блоків (0 для SD).
Прямі абоненти зазвичай не використовують цей метод – драйвер файлової системи автоматично обробляє всі стандартні коди після монтування
SDCard.
- init(*args, **kwargs) None¶
Повторно ініціалізує інтерфейс SD з нуля. Приймає ті самі аргументи, що й конструктор. Корисно для повторного виявлення картки, встановленої гарячою заміною, на платах без сигналу виявлення картки, оскільки
present()інакше фіксується під час створення об’єкта. Лише порт mimxrt.
- deinit() None¶
Деініціалізує інтерфейс SD, звільняючи контролер SDMMC/USDHC та виводи, які він займав. Об’єкт
SDCardстає непридатним до використання, доки не буде викликаноinit()знову. Використовуйте його перед перепрошивкою картки з іншого інтерфейсу або для відключення живлення слота у пристрої з акумулятором. Лише порт mimxrt.