Multi Media Card Library

Мультимедийная карта (MMC) является стандартом флэш-памяти. Карты MMC в настоящее время доступны в размерах вплоть до 32 ГБ и используются в сотовых телефонах, цифровых аудиоплеерах, цифровых камерах и КПК.
mikroPascal PRO для ARM предоставляет библиотеку для доступа к данным на Multi Media Card через связь SPI. Эта библиотека также поддерживает карты памяти SD (Secure Digital) и карты памяти высокой емкости SDHC (Secure Digital High Capacity).

Защищенная цифровая карта

Secure Digital (SD) - это стандарт флэш-памяти, основанный на более раннем формате мультимедийной карты (MMC).
SD-карты в настоящее время доступны в размерах до 2 ГБ включительно и используются в цифровых камерах, цифровых видеокамерах, карманных компьютерах, медиаплеерах, мобильных телефонах, GPS-приемниках, видеоиграх и КПК.

Защищенная цифровая карта высокой емкости

SDHC (Secure Digital High Capacity, SD 2.0) - это расширение стандарта SD, которое увеличивает емкость памяти до 32 ГБ, используя адресацию адреса вместо байтовой адресации в предыдущем стандарте SD.
Карты SDHC имеют тот же физический и электрический форм-фактор, что и старые (SD 1.x), что позволяет SDHC-устройствам поддерживать как новые SDHC-карты, так и более старые SD-карты. Текущий стандарт ограничивает максимальную емкость карты SDHC до 32 ГБ.

  Важно:

Модуль SPI должен быть инициализирован с помощью процедуры SPIx_Init_Advanced со следующими параметрами:

  Совет: После инициализации MMC / SD-карты модуль SPI можно повторно инициализировать с большей скоростью.См. процедуры Mmc_Init и Mmc_Fat_Init.

Дерево зависимостей библиотеки

MMC Library Dependency Tree

Внешние зависимости библиотеки MMC

Stellaris

Следующая переменная должна быть определена во всех проектах с использованием библиотеки MMC: Описание: Пример:
var Mmc_Chip_Select: sbit; sfr; external; Вывод Выбор кристалла var Mmc_Chip_Select: sbit at GPIO_PORTA_DATA7_bit;
var Mmc_Chip_Select_Direction: sbit; sfr; external; Направление вывода Выбор кристалла var Mmc_Chip_Select_Direction: sbit at GPIO_PORTA_DIR7_bit;

MSP432

Следующая переменная должна быть определена во всех проектах с использованием библиотеки MMC: Описание: Пример:
var Mmc_Chip_Select: sbit; sfr; external; Вывод Выбор кристалла var Mmc_Chip_Select: sbit at DIO_P6OUT.B0;
var Mmc_Chip_Select_Direction: sbit; sfr; external; Направление вывода Выбор кристалла var Mmc_Chip_Select_Direction: sbit at DIO_P6OUT.B1;

STM32

Следующая переменная должна быть определена во всех проектах с использованием библиотеки MMC: Описание: Пример:
var Mmc_Chip_Select: sbit; sfr; external; Вывод Выбор кристалла var Mmc_Chip_Select: sbit at GPIOD_ODR.B3;

CEC1x02

Следующая переменная должна быть определена во всех проектах с использованием библиотеки MMC: Описание: Пример:
var Mmc_Chip_Select: sbit; sfr; external; Вывод Выбор кристалла var Mmc_Chip_Select: sbit at GPIO_OUTPUT_PIN_146_bit;

Библиотечные процедуры

Процедуры для обработки файлов:

Mmc_Init

Прототип

function Mmc_Init(): word;

Описание

Инициализирует MMC через аппаратный интерфейс SPI или SD I / O.

Процедуру Mmc_Init необходимо вызвать перед использованием других функций этой библиотеки.

Параметры

Нет.

Возвращает

  • 0 - если MMC / SD-карта была обнаружена и успешно инициализирована
  • 1 - в противном случае

Требует

Перед использованием этой функции необходимо определить внешние зависимости библиотеки от верхней части страницы.

Соответствующий аппаратный SPI или SD I / O модуль должен быть предварительно инициализирован.
См. процедуры SPIx_Init, SPIx_Init_Advanced, SDIO_Init и Mmc_Set_Interface.

Пример

Stellaris

// Подключение модулей MMC
var MMC_chip_select          : sbit at GPIO_PORTA_DATA7_bit;
var MMC_chip_select_direction: sbit at GPIO_PORTA_DIR7_bit;
// Подключение модулей MMC

...
SPI0_Init_Advanced(400000, _SPI_MASTER, _SPI_8_BIT or _SPI_CLK_IDLE_HIGH or _SPI_SECOND_CLK_EDGE_TRANSITION, @_GPIO_MODULE_SPI0_A245);

// Инициализировать MMC
Mmc_Init();

// Повторно инициализировать модуль SPI на более высокой скорости
SPI1_Init();

MSP432

// MMC module connections
var MMC_chip_select          : sbit at DIO_P6OUT.B0;
var MMC_chip_select_direction: sbit at DIO_P6DIR.B0;
// Подключение модулей MMC

SPI1_Init();

// Инициализировать MMC
Mmc_Init();

STM32 with SPI

// Подключение модулей MMC
var MMC_chip_select          : sbit at GPIOD_ODR.B3;
// Подключение модулей MMC

//--- инициализировать карту MMC
SPI3_Init_Advanced(_SPI_FPCLK_DIV64, _SPI_MASTER or _SPI_8_BIT or
                   _SPI_CLK_IDLE_LOW or _SPI_FIRST_CLK_EDGE_TRANSITION or
                   _SPI_MSB_FIRST or _SPI_SS_DISABLE or _SPI_SSM_ENABLE or _SPI_SSI_1,
                    @_GPIO_MODULE_SPI3_PC10_11_12);

// Инициализировать MMC
Mmc_Init();

// Повторно инициализировать модуль SPI на более высокой скорости
SPI3_Init_Advanced(_SPI_FPCLK_DIV2, _SPI_MASTER or _SPI_8_BIT or
                   _SPI_CLK_IDLE_LOW or _SPI_FIRST_CLK_EDGE_TRANSITION or
                   _SPI_MSB_FIRST or _SPI_SS_DISABLE or _SPI_SSM_ENABLE or _SPI_SSI_1,
                    @_GPIO_MODULE_SPI3_PC10_11_12);

STM32 with SDIO

// Сброс модуля
SDIO_Reset();
Delay_ms(100);

// Частота SDIO_CK должна быть меньше 400 кГц в режиме идентификации
SDIO_Init(_SDIO_CFG_POWER_SAVE_DISABLE or _SDIO_CFG_4_WIDE_BUS_MODE or _SDIO_CFG_CLOCK_BYPASS_DISABLE
or _SDIO_CFG_CLOCK_RISING_EDGE or _SDIO_CFG_HW_FLOW_ENABLE, 120, @_GPIO_MODULE_SDIO_D0_D3);

// Установка подтягивания на линиях SDIO (если нет внешних подтягиваний)
GPIOD_PUPDR := GPIOD_PUPDR or 0x10;
GPIOC_PUPDR := GPIOC_PUPDR or 0x550000;         

// Установить интерфейс SDIO
Mmc_Set_Interface(_MMC_INTERFACE_SDIO);

// Init MMC
Mmc_Init();

// После инициализации MMC / SD-карты скорость SDIO (SDIO_CK) может быть увеличена
SDIO_CLKCR := SDIO_CLKCR and not dword(0xff);
SDIO_CLKCR := SDIO_CLKCR or dword(0x2);

CEC1x02

// Подключение модулей MMC
var MMC_chip_select          : sbit at GPIO_OUTPUT_PIN_146_bit;
// Подключение модулей MMC

// Инициализировать SPI
SPI0_Init_Advanced(250000,0,0);

// Init MMC
Mmc_Init();
Замечания

Нет.

Mmc_Read_Sector

Прототип

function Mmc_Read_Sector(sector: dword; var dbuff: array[512] of byte): word;

Описание

Функция считывает один сектор (512 байт) с MMC-карты.

Параметры
  • sector: Считываемый сектор MMC / SD.
  • dbuff: буфер длиной не менее 512 байт для хранения данных.
Возвращает

  • 0 - если чтение было успешным
  • 1 - если произошла ошибка

Требует

MMC / SD-карта должна быть инициализирована. См. Mmc_Init.

Пример
// Считать сектор 510 MMC / SD-карты
var error: word;
    sectorNo: dword;
    dataBuffer: array[512] of byte;
...
sectorNo := 510;
error := Mmc_Read_Sector(sectorNo, dataBuffer);
Замечания

Нет.

Mmc_Write_Sector

Прототип

function Mmc_Write_Sector(sector: dword; var data: array[512] of byte): word;

Описание

Функция записывает 512 байт данных в один сектор карточек MMC.

Параметры
  • sector: Сектор MMC / SD-карты должна быть записана.
  • dbuff: данные должны быть записаны (буфер длиной не более 512 байт).
Возвращает
  • 0 - если запись была успешной
  • 1 - если произошла ошибка при отправке команды write
  • 2 - если при записи была обнаружена ошибка (данные были отбракованы)
Требует

MMC / SD-карта должна быть инициализирована. См. Mmc_Init.

Пример
// Запись в сектор 510 карты MMC / SD
var error: word;
    sectorNo: dword;
    dataBuffer: array[512] of byte;
...
sectorNo := 510;
error := Mmc_Write_Sector(sectorNo, dataBuffer);
Замечания

Нет.

Mmc_Read_Cid

Прототип

function Mmc_Read_Cid(var data_cid: array[16] of byte): word;

Описание

Функция считывает 16-байтовый регистр CID.

Параметры
  • data_cid: буфер длиной минимум 16 байт для хранения содержимого регистра CID.
Возвращает
  • 0 - если регистр CID был успешно прочитан
  • 1 - если во время чтения произошла ошибка
Требует

MMC / SD-карта должна быть инициализирована. См. Mmc_Init.

Пример
var error: word;
    dataBuffer: array[16] of byte;
...
error := Mmc_Read_Cid(dataBuffer);
Замечания

Нет.

Mmc_Read_Csd

Прототип

function Mmc_Read_Csd(var data_for_registers: array[16] of byte): word;

Описание

Функция считывает 16-байтовый регистр CSD.

Параметры
  • data_csd: буфер длиной не менее 16 байтов для хранения содержимого регистра CSD.
Возвращает
  • 0 - если регистр CSD был успешно прочитан
  • 1 - если во время чтения произошла ошибка
Требует

MMC / SD-карта должна быть инициализирована. См. Mmc_Init.

Пример
var error: word;
    dataBuffer: array[16] of byte;
...
error := Mmc_Read_Csd(dataBuffer);
Замечания

Нет.

Mmc_Multi_Read_Start

Прототип

function Mmc_Multi_Read_Start(sector: dword): word;

Описание

Функция запускает режим многократного чтения, секторы последовательно считываются, начиная с сектора, указанного в аргументе функции.

Параметры
  • sector:номер начального сектора.
Возвращает
  • 0 - если начало множественного чтения было успешным.
  • 1 - если обнаружена ошибка.
Требует

MMC / SD-карта должна быть инициализирована. См. Mmc_Init.

Пример
var error: word;divarb> sector
error := Mmc_Multi_Read_Start(sector);
Замечания

Нет.

Mmc_Multi_Read_Sector

Прототип

procedure Mmc_Multi_Read_Sector(var dbuff: array[512] of byte);

Описание

Процедура считывает секторы в режиме многократного чтения и помещает их в буфер, указанный как аргумент функции. Следующий вызов функции считывает последующий сектор. Размер буфера должен быть 512B.

Параметры
  • dbuff: буфер для хранения данных сектора.
Возвращает

Ничего.

Требует

MMC / SD-карта должна быть инициализирована. См. Mmc_Init.

Пример
var dataBuffer: array[512] of byte;
...
Mmc_Multi_Read_Sector(buffer);
Замечания

Нет.

Mmc_Multi_Read_Stop

Прототип

function Mmc_Multi_Read_Stop(): word;

Описание

Функция останавливает последовательность режима многократного чтения.

Параметры

Нет.

Возвращает
  • 0 - если остановка прошла успешно.
  • 1 - если обнаружена ошибка.
Требует

MMC / SD-карта должна быть инициализирована. См. Mmc_Init.

Пример
error := Mmc_Multi_Read_Stop;
Замечания

Нет.

Mmc_Set_Interface

Прототип

procedure Mmc_Set_Interface(setInterface: byte);

Описание

Функция устанавливает используемый интерфейс MMC - SPI или SD I / O.

Параметры
  • setInterface: параметр, используемый для настройки желаемого интерфейса. Допустимые значения:
    Value Описание
    _MMC_INTERFACE_SPI MMC SPI Interface.
    _MMC_INTERFACE_SDIO MMC SD I/O Interface.
Возвращает

Ничего.

Требует
  • Эта процедура должна быть вызвана до процедуры Mmc_Init
  • Перед использованием этой функции необходимо определить внешние зависимости библиотеки от верхней части страницы.
Пример
// Set SDIO interface
Mmc_Set_Interface(_MMC_INTERFACE_SDIO);
Замечания
  • This routine is available only for MCUs with SD I/O interface, STM32 Cortex M4.
  • По умолчанию интерфейс SPI установлен в библиотеке.

Mmc_Fat_Init

Прототип

function Mmc_Fat_Init(): byte;

Описание

Инициализирует карту MMC / SD, читает загрузочный сектор MMC / SD FAT16 и извлекает необходимые данные, необходимые библиотеке.

Параметры

Нет.

Возвращает
  • 0 - если MMC / SD-карта была обнаружена и успешно инициализирована
  • 1 - если загрузочный сектор FAT16 не найден
  • 255 -если карта MMC / SD не была обнаружена
Требует

Перед использованием этой функции необходимо определить внешние зависимости библиотеки от верхней части страницы.

Соответствующий аппаратный SPI-модуль должен быть предварительно инициализирован.
См. процедуры SPIx_Init, SPIx_Init_Advanced.

Пример

Stellaris

// Подключение модулей MMC
var MMC_chip_select          : sbit at GPIO_PORTA_DATA7_bit;
var MMC_chip_select_direction: sbit at GPIO_PORTA_DIR7_bit;
// Подключение модулей MMC

...
SPI0_Init_Advanced(400000, _SPI_MASTER, _SPI_8_BIT or _SPI_CLK_IDLE_HIGH or _SPI_SECOND_CLK_EDGE_TRANSITION, @_GPIO_MODULE_SPI0_A245);

// Инициализировать MMC
if Mmc_Fat_Init() = 0 then
  begin
  ...
  // Повторно инициализировать модуль SPI на более высокой скорости
  SPI0_Init_Advanced(10000000, _SPI_MASTER, _SPI_8_BIT or _SPI_CLK_IDLE_HIGH or _SPI_SECOND_CLK_EDGE_TRANSITION, @_GPIO_MODULE_SPI0_A245);

MSP432

// MMC module connections
var MMC_chip_select          : sbit at DIO_P6OUT.B0;
var MMC_chip_select_direction: sbit at DIO_P6DIR.B0;
// Подключение модулей MMC

...
SPI1_Init();

// Инициализировать MMC
if Mmc_Fat_Init() = 0 then
  begin
  ...
  end;

STM32

// MMC module connections
var MMC_chip_select          : sbit at GPIOD_ODR.B3;
// Подключение модулей MMC

//--- инициализировать карту MMC
SPI3_Init_Advanced(_SPI_FPCLK_DIV64, _SPI_MASTER or _SPI_8_BIT or
                   _SPI_CLK_IDLE_LOW or _SPI_FIRST_CLK_EDGE_TRANSITION or
                   _SPI_MSB_FIRST or _SPI_SS_DISABLE or _SPI_SSM_ENABLE or _SPI_SSI_1,
                    @_GPIO_MODULE_SPI3_PC10_11_12);

// Инициализировать MMC
if Mmc_Fat_Init() = 0 then
  begin
  ...

  // Повторно инициализировать модуль SPI на более высокой скорости
  SPI3_Init_Advanced(_SPI_FPCLK_DIV2, _SPI_MASTER or _SPI_8_BIT or
                     _SPI_CLK_IDLE_LOW or _SPI_FIRST_CLK_EDGE_TRANSITION or
                     _SPI_MSB_FIRST or _SPI_SS_DISABLE or _SPI_SSM_ENABLE or _SPI_SSI_1,
                     @_GPIO_MODULE_SPI3_PC10_11_12);

CEC1x02

// Подключение модулей MMC
var MMC_chip_select          : sbit at GPIO_OUTPUT_PIN_146_bit;
// Подключение модулей MMC
...
//--- настроить SPI для MMC init (низкая скорость)
SPI0_Init_Advanced(250000,0,0);

// Инициализировать MMC
if Mmc_Fat_Init() = 0 then
  begin
  ...

  // повторно инициализировать spi на более высокой скорости
  SPI0_Init_Advanced(10000000,0,0);
  ...
Замечания

Карта MMC / SD должна быть отформатирована в файловой системе FAT16.

Mmc_Fat_QuickFormat

Прототип

function Mmc_Fat_QuickFormat(var mmc_fat_label: string[11]): word;

Описание

Форматирует FAT16 и инициализирует MMC / SD-карту.

Параметры
  • mmc_fat_label: Метка тома (11 символов в длину). Если указано менее 11 символов, метка будет дополняться пробелами. Если пустая строка передается, то тома не будет помечена
Возвращает
  • 0 - если была обнаружена карта MMC / SD, успешно сформирована и инициализирована
  • 1 - если формат FAT16 не увенчался успехом
  • 255 -если карта MMC / SD не была обнаружена
Требует

Соответствующий аппаратный SPI-модуль должен быть предварительно инициализирован.

Пример

Stellaris

...
SPI0_Init_Advanced(400000, _SPI_MASTER, _SPI_8_BIT or _SPI_CLK_IDLE_HIGH or _SPI_SECOND_CLK_EDGE_TRANSITION, @_GPIO_MODULE_SPI0_A245);

// Форматировать и инициализировать MMC / SD-карту и глобальные библиотеки MMC_FAT16
Mmc_Fat_QuickFormat('mikroE');

// Повторно инициализировать модуль SPI на более высокой скорости
SPI0_Init_Advanced(10000000, _SPI_MASTER, _SPI_8_BIT or _SPI_CLK_IDLE_HIGH or _SPI_SECOND_CLK_EDGE_TRANSITION, @_GPIO_MODULE_SPI0_A245);
...

MSP432

SPI1_Init();

// Форматировать и инициализировать MMC / SD-карту и глобальные библиотеки MMC_FAT16
Mmc_Fat_QuickFormat('mikroE');

STM32

...
SPI3_Init_Advanced(_SPI_FPCLK_DIV64, _SPI_MASTER or _SPI_8_BIT or
                   _SPI_CLK_IDLE_LOW or _SPI_FIRST_CLK_EDGE_TRANSITION or
                   _SPI_MSB_FIRST or _SPI_SS_DISABLE or _SPI_SSM_ENABLE or _SPI_SSI_1,
                    @_GPIO_MODULE_SPI3_PC10_11_12);

// Форматировать и инициализировать MMC / SD-карту и глобальные библиотеки MMC_FAT16
Mmc_Fat_QuickFormat('mikroE');

// Повторно инициализировать модуль SPI на более высокой скорости
SPI3_Init_Advanced(_SPI_FPCLK_DIV2, _SPI_MASTER or _SPI_8_BIT or
                   _SPI_CLK_IDLE_LOW or _SPI_FIRST_CLK_EDGE_TRANSITION or
                   _SPI_MSB_FIRST or _SPI_SS_DISABLE or _SPI_SSM_ENABLE or _SPI_SSI_1,
                   @_GPIO_MODULE_SPI3_PC10_11_12);
...

CEC1x02

// настроить SPI для MMC init (низкая скорость)
SPI0_Init_Advanced(250000,0,0);

Mmc_Fat_QuickFormat('mikroE');

// повторно инициализировать spi на более высокой скорости
SPI0_Init_Advanced(10000000,0,0);
Замечания

Эта процедура может использоваться вместо или в сочетании с процедурой Mmc_Fat_Init.

Если карта MMC / SD уже содержит действительный загрузочный сектор, она останется неизменной (кроме поля Mетка тома), и будут удалены только таблицы FAT и ROOT. Также будет установлена новая Метка тома.

Mmc_Fat_Assign

Прототип

function Mmc_Fat_Assign(var filename: array[12] of char; file_cre_attr: byte): word;

Описание

Назначает файл для операций с файлами (чтение, запись, удаление ...). Все последующие операции с файлами будут применены к назначенному файлу.

Параметры
  • filename: имя файла, который должен быть назначен для операций с файлами. Имя файла должно быть в формате DOS 8.3 (file_name.extension). Имя файла и расширение будут автоматически дополнены пробелами библиотекой, если они имеют меньшую длину (т. Е. «Mikro.tx» -> «mikro .tx»), поэтому пользователю этого не нужно позаботиться. Имя файла и расширение нечувствительны к регистру. Библиотека автоматически преобразует их в надлежащий регистр, поэтому пользователю не нужно это делать.
  • file_cre_attr: создание файлов и атрибутов. Каждый бит соответствует соответствующему атрибуту файла:
  • Bit Mask Описание
    0 0x01 Только для чтения
    1 0x02 Скрытый
    2 0x04 Системный
    3 0x08 Метка тома
    4 0x10 Подкаталог
    5 0x20 Архивный
    6 0x40 Устройство (только для внутреннего использования, никогда не найденного на диске)
    7 0x80 Флаг создания файла. Если файл не существует и этот флаг установлен, будет создан новый файл с указанным именем.

Возвращает
  • 2 -если больше нет свободных обработчиков файлов, открытый файл закрывается, чтобы освободить место.
  • 1 - если файл уже существует или файл не существует, но создается новый файл.
  • 0 - если файл не существует и новый файл не создается.
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример
// создать файл с Архивным атрибутом, если он еще не существует
Mmc_Fat_Assign('MIKRO007.TXT',0xA0);
Замечания

Long File Names (LFN) are not supported.

Mmc_Fat_Reset

Прототип

procedure Mmc_Fat_Reset(var size: dword);

Описание

Процедура сбрасывает указатель файла (перемещает его в начало файла) назначенного файла, чтобы файл можно было прочитать.

Параметры
  • size: буфер для хранения размера файла. После того, как файл был открыт для чтения, его размер возвращается через этот параметр.
Возвращает

Ничего.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен. См. Mmc_Fat_Assign.

Пример
var size: dword;
...
Mmc_Fat_Reset(size);
Замечания

Нет.

Mmc_Fat_Read

Прототип

procedure Mmc_Fat_Read(var bdata_: byte);

Описание

Считывает байт из текущего назначенного файла, открытого для чтения. После выполнения функции указатели файлов будут установлены на следующий символ в файле.

Параметры
  • bdata:буфер для хранения байта чтения. По этой функции выполнение чтения байта возвращается через этот параметр.
Возвращает

Ничего.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен. См. Mmc_Fat_Assign.

Файл должен быть открыт для чтения. См. Mmc_Fat_Reset.

Пример
var character: byte;
...
Mmc_Fat_Read(character);
Замечания

Нет.

Mmc_Fat_Rewrite

Прототип

procedure Mmc_Fat_Rewrite();

Описание

Открывает текущий файл для записи. Если файл не пуст, его содержимое будет удалено.

Параметры

Нет.

Возвращает

Ничего.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен. См. Mmc_Fat_Assign.

Пример
// open file for writing
Mmc_Fat_Rewrite();
Замечания

Нет.

Mmc_Fat_Append

Прототип

procedure Mmc_Fat_Append();

Описание

Открывает текущий файл для добавления. После этой функции указатели файлов выполнения будут помещены после последнего байта в файл, поэтому после этого начнется любая последующая операция записи файла.

Параметры

Нет.

Возвращает

Ничего.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен. См. Mmc_Fat_Assign.

Пример
// открыть файл для добавления
Mmc_Fat_Append();
Замечания

Нет.

Mmc_Fat_Delete

Прототип

procedure Mmc_Fat_Delete();

Описание

Удаляет текущий файл с карты MMC / SD.

Параметры

Нет.

Возвращает

Ничего.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен. См. Mmc_Fat_Assign.

Пример
// dудалить текущий файл
Mmc_Fat_Delete();
Замечания

Нет.

Mmc_Fat_Write

Прототип

procedure Mmc_Fat_Write(var fdata: array[512] of byte; data_len: word);

Описание

Записывает запрошенное количество байтов в текущий назначенный файл, открытый для записи.

Параметры
  • fdata: данные должны быть записаны.
  • data_len: количество байтов, которые нужно записать.
Возвращает

Ничего.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен. См. Mmc_Fat_Assign.

Файл должен быть открыт для записи. См. Mmc_Fat_Rewrite or Mmc_Fat_Append.

Пример
var file_contents: array[42] of byte;
...
Mmc_Fat_Write(file_contents, 42);// записываем данные в назначенный файл
Замечания

Нет.

Mmc_Fat_Set_File_Date

Прототип

procedure Mmc_Fat_Set_File_Date(year: word; month: byte; day: byte; hours: byte; mins: byte; seconds: byte);

Описание

Устанавливает метку даты / времени. Любая последующая операция записи файла будет записывать этот штамп в атрибуты времени / даты в настоящее время назначенного файла.

Параметры
  • year: атрибут года. Допустимые значения: 1980-2107 гг.
  • month: атрибут месяца. Допустимые значения: 1-12
  • day: атрибут дня. Допустимые значения: 1-31
  • hours: атрибут часа. Допустимые значения: 0-23
  • mins: атрибут минуты. Допустимые значения: 0-59
  • seconds: атрибут секунды. Допустимые значения: 0-59
Возвращает

Ничего.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен. См. Mmc_Fat_Assign.

Файл должен быть открыт для записи. См. Mmc_Fat_Rewrite или Mmc_Fat_Append.

Пример
// April 1st 2005, 18:07:00
Mmc_Fat_Set_File_Date(2005, 4, 1, 18, 7, 0);
Замечания

Нет.

Mmc_Fat_Get_File_Date

Прототип

procedure Mmc_Fat_Get_File_Date(var year: word; var month: byte; var day: byte; var hours: byte; var mins: byte);

Описание

Считывает атрибуты времени и даты для текущего файла.

Параметры
  • year: буфер для сохранения атрибута года. По истечении этого срока функция возвращает атрибут года.
  • month: буфер для сохранения атрибута месяца. По истечении месяца функция возвращает атрибут месяца.
  • day: буфер для хранения атрибута дня. По истечении этого срока функция возвращает атрибут дня.
  • hours: буфер для сохранения атрибута часов. Через атрибут выполнения функции возвращается этот параметр.
  • mins: буфер для сохранения атрибута минут. По истечении функции функция возвращает атрибут минут через этот параметр.
Возвращает

Ничего.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен.См. Mmc_Fat_Assign.

Пример
var year: word;
    month, day, hours, mins: byte;
...
Mmc_Fat_Get_File_Date(year, month, day, hours, mins);
Замечания

Нет.

Mmc_Fat_Get_File_Date_Modified

Прототип

procedure Mmc_Fat_Get_File_Date_Modified(var year: word; var month: byte; var day: byte; var hours: byte; var mins: byte);

Описание

Получает последнюю дату / время изменения для текущего выбранного файла. Секунды не восстанавливаются, так как они записываются с шагом в 2 секунды.

Параметры
  • year: буфер для сохранения атрибута года. По истечении этого срока функция возвращает атрибут года.
  • month: буфер для сохранения атрибута месяца. По истечении месяца функция возвращает атрибут месяца.
  • day: буфер для хранения атрибута дня. По истечении этого срока функция возвращает атрибут дня.
  • hours: буфер для сохранения атрибута часов. Через атрибут выполнения функции возвращается этот параметр.
  • mins: буфер для сохранения атрибута минут. По истечении функции функция возвращает атрибут минут через этот параметр.
Возвращает

Ничего.

Требует

Файл должен быть назначен, см. Mmc_Fat_Assign.

Пример
var year: word;
    month, day, hours, mins: byte;
...
Mmc_Fat_Get_File_Date_Modified(year, month, day, hours, mins);

Mmc_Fat_Get_File_Size

Прототип

function Mmc_Fat_Get_File_Size(): dword;

Описание

Эта функция считывает размер текущего назначенного файла в байтах.

Параметры

Нет.

Возвращает

Эта функция возвращает размер активного файла (в байтах).

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен. См. Mmc_Fat_Assign.

Пример
var my_file_size: dword; 
...
my_file_size := Mmc_Fat_Get_File_Size();
Замечания

Нет.

Mmc_Get_File_Write_Sector

Прототип

function Mmc_Get_File_Write_Sector(): dword;

Описание

Эта функция возвращает текущий сектор записи файла.

Параметры

Нет.

Возвращает

Эта функция возвращает текущий сектор записи файла.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен. См. Mmc_Fat_Assign.

Пример
var sector: dword;
...
sector := Mmc_Get_File_Write_Sector();
Замечания

Нет.

Mmc_Fat_Get_Swap_File

Прототип

function Mmc_Fat_Get_Swap_File(sectors_cnt: dword; var filename: string[11]; file_attr: byte): dword;

Описание

Эта функция используется для создания файла подкачки с предопределенным именем и размером на носителе MMC / SD. Если файл с указанным именем уже существует на носителе, поиск последовательных секторов будет игнорировать сектора, занятые этим файлом. Поэтому рекомендуется удалить этот файл, если он уже существует до вызова этой функции. Если он не стирается и все еще достаточно места для нового файла подкачки, эта функция удалит его после выделения нового пространства памяти для нового файла подкачки.

Цель файла подкачки - сделать запись и запись на носитель MMC / SD как можно быстрее, используя функции Mmc_Read_Sector () и Mmc_Write_Sector () напрямую, без потенциального повреждения системы FAT. Файл подкачки можно рассматривать как «окно» на носителе, где пользователь может свободно писать / читать данные. Основная цель этой библиотеки - использовать ее для быстрого сбора данных; когда критическое время завершено, данные могут быть переписаны в «обычный» файл и отформатированы наиболее подходящим образом.

Параметры
  • sectors_cnt:количество последовательных секторов, которые пользователь хочет получить в файле подкачки.
  • filename: имя файла, который должен быть назначен для операций с файлами. Имя файла должно быть в формате DOS 8.3 (file_name.extension). Имя файла и его расширение будут автоматически заполняться библиотекой, если они имеют меньшую длину (т. Е. «Mikro.tx» -> «mikro .tx»), поэтому пользователю не нужно об этом позаботиться. Имя файла и расширение нечувствительны к регистру. Библиотека автоматически преобразует их в надлежащий регистр, поэтому пользователю не нужно это делать. Кроме того, чтобы сохранить обратную совместимость с первой версией этой библиотеки, имена файлов могут быть введены как строка UPPERCASE длиной 11 байт без символа точки между именем файла и расширением (т. Е. «MIKROELETXT» -> MIKROELE.TXT). В этом случае последние 3 символа строки считаются расширением файла.
  • file_attr: создание файлов и атрибутов. Каждый бит соответствует соответствующему атрибуту файла:
  • Бит Маска Описание
    0 0x01 Только для чтения
    1 0x02 Скрытый
    2 0x04 Системный
    3 0x08 Метка тома
    4 0x10 Подкаталог
    5 0x20 Архивный
    6 0x40 Устройство (только для внутреннего использования, никогда не найденного на диске)
    7 0x80 Не используется

Возвращает

  • Номер начального сектора для вновь созданного файла подкачки, если на карте MMC / SD было достаточно свободного места для создания файла требуемого размера.
  • 0 - в противном случае.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример
//-------------- Попытка создания файла подкачки с атрибутом архива, размер которого будет составлять не менее 1000 секторов.
// Если это удастся, процедура отправляет количество начального сектора по UART
var size: dword;
...
size := Mmc_Fat_Get_Swap_File(1000, 'mikroE.txt', 0x20);
if (size <> 0) then
begin
  UART1_Write(0xAA);
  UART1_Write(Lo(size));
  UART1_Write(Hi(size));
  UART1_Write(Higher(size));
  UART1_Write(Highest(size));
  UART1_Write(0xAA);
end;
Замечания

Длинные имена файлов (LFN) не поддерживаются.

Mmc_Fat_Tell

Прототип

function Mmc_Fat_Tell(): dword;

Описание

Эта процедура используется для получения позиции курсора в открытом файле.

Параметры

Нет.

Возвращает

Возвращаетположение курсора в текущем назначенном файле.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен. См. Mmc_Fat_Assign.

Пример
var position: dword;

position := Mmc_Fat_Tell();
Замечания

Нет.

Mmc_Fat_Seek

Прототип

function Mmc_Fat_Seek(position: dword): dword;

Описание

Эта процедура используется для установки позиции курсора в открытом файле и возвращает новую позицию курсора в открытом файле.

Параметры
  • position: желаемое положение, на которое мы хотим поместить курсор.
Возвращает

Возвращаетновое положение курсора в текущем назначенном файле.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен. См. Mmc_Fat_Assign.

Пример
var position: dword;

position := Mmc_Fat_Seek(1000);
Замечания

Если желаемая позиция курсора превышает размер файла, курсор будет помещен в конец файла.

Mmc_Fat_Rename

Прототип

function Mmc_Fat_Rename(newname: ^char): char;

Описание

Эта функция переименовывает текущий назначенный файл.

Параметры
  • newname: новое имя файла.
Возвращает
  • 1 - если нет назначенных файлов
  • 2 - если новое имя недействительно
  • 3 - если файл с новым именем уже существует
  • 4 - если произошла ошибка во время переименования
  • 0 - если переименование было успешным
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Файл должен быть предварительно назначен. См. Mmc_Fat_Assign.

Пример
if (0 = Mmc_Fat_Rename('NEWNAME.TXT')) then 	// если операция переименования была успешной ...
begin
...
end;
Замечания

Нет.

Mmc_Fat_MakeDir

Прототип

function Mmc_Fat_MakeDir(name: ^char; attrib: char): char;

Описание

Эта функция создает новый каталог.

Параметры
  • name: имя каталога.
  • attrib: атрибут каталога.
Возвращает
  • 0 -создание каталога было успешным
  • 255 - если произошла ошибка
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример
if (0 = Mmc_Fat_MakeDir('DIR_A', 0xA0))) then
begin  // create DIR_A directory
...
end;
Замечания

Нет.

Mmc_Fat_RenameDir

Прототип

function Mmc_Fat_RenameDir(oldname: ^char; newname: ^char): char;

Описание

Эта функция переименовывает каталог.

Параметры
  • oldname: имя старого каталога.
  • newname: новое имя каталога.
Возвращает
  • 1 - если имя каталога недействительно
  • 2 - если нет каталога со старым именем
  • 3 - если запись с новым именем уже существует
  • 4 - если во время переименования произошла ошибка
  • 0 - если переименование было успешным
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример
if (0 = Mmc_Fat_RenameDir('DIR_A', 'DIR_B')) // if rename operation was successful...
begin
...
end;
Замечания

Нет.

Mmc_Fat_RemoveDir

Прототип

function Mmc_Fat_RemoveDir(name: ^char): char;

Описание

Эта функция удаляет запись каталога из текущего каталога.

Параметры
  • name:имя каталога.
Возвращает
  • 1 - если имя каталога недействительно
  • 2 - если имя каталога не существует
  • 3 - если каталог не пуст
  • 4 - если во время записи произошла ошибка
  • 0 - если операция прошла успешно
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример
if (0 = Mmc_Fat_RemoveDir('DIR_A')) then	//если операция удаления была успешной ...
begin
...
end;
Замечания

Рекурсивное удаление не поддерживается, т. е. Каталог должен быть пустым, прежде чем его можно будет удалить.

Mmc_Fat_ChangeDir

Прототип

function Mmc_Fat_ChangeDir(name: ^char): char;

Описание

Эта функция меняет текущий каталог на имя.

Параметры
  • name: имя каталога.
Возвращает
  • 0 - если операция прошла успешно
  • 1 - если нет записи с заданным именем каталога
  • 2 - если запись с заданным именем не является каталогом
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример
// входим в DIR_A каталог
if (0 = Mmc_Fat_ChangeDir('DIR_A')) then
begin
...
end;

// переходим в родительский каталог
if (0 = Mmc_Fat_ChangeDir('..')) then
begin
...
end;

// переходим в корневой каталог
if (0 = Mmc_Fat_ChangeDir('\')) then
begin
...
end;
Замечания

Специальные имена каталогов, такие как «.» и ".." также поддерживаются.

Mmc_Fat_Exists

Прототип

function Mmc_Fat_Exists(name: ^char): char;

Описание

Эта функция возвращает информацию о существовании файла / каталога.

Параметры
  • name: имя файла / каталога.
Возвращает
  • 0 - если файл / каталог не существует
  • 1 - если файл / каталог существует
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример
status := Mmc_Fat_Exists('X_FILES.TXT');

// iПроцесс прошел успешно ...
if (0 = status) then
begin
...
end;

// если произошла ошибка ...
if (255 = status) then	
begin
...
end;
Замечания

Нет.

Mmc_Fat_Dir

Прототип

function Mmc_Fat_Dir(print: ^TProcedure): byte;

Описание

Эта процедура отображает содержимое текущего каталога через пользовательский носитель (т. е. Модуль UART, файл в файловой системе FAT16). Функция отображает символ по символу.

Параметры
  • print: указатель функции к подпрограмме, которая будет отображать содержимое текущего каталога.
Возвращает
  • 1 - если имя файла недействителено
  • 2 - если файл уже существует
  • 3 - если во время записи возникла ошибка
  • 0 - если операция прошла успешно
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример
type TProcedure = procedure(ch: char);

// Отображающая подпрограмма
procedure PrintChar(ch: char);
begin
  UART1_Write(ch);
end;

...

Mmc_Fat_Dir(@PrintChar);
Замечания

Нет.

Mmc_Fat_ReadDir

Прототип

function Mmc_Fat_ReadDir(var d: F16_DIR): short;

Описание

Эта функция получает следующую запись каталога из текущего каталога.

Параметры
  • d:з апись каталога (действительна, если возвращаемое значение равно 1), состояло из следующих полей:

    type F16_DIR = record
        name   : array[12] of char; // dимя каталога
        attrib : byte;              // атрибут каталога
        ctime  : array[6] of byte;  // дата и время создания
        mtime  : array[6] of byte;  // дата и время изменения
        size   : dword;             // размер каталога
        first  : word;              // кластер запуска каталога
        sect   : dword;             // directory entry sector
        entry  : word;              // номер записи каталога в секторе ввода
    end;
    
Возвращает
  • < 0 - если произошла ошибка
  • 0 - если больше записей
  • 1 - if a valid entry is returned
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример
if (1 = Mmc_Fat_ReadDir('DIR_A')) then
begin
...
end;
Замечания

Нет.

Mmc_Fat_Activate

Прототип

function Mmc_Fat_Activate(fileHandle: short): byte;

Описание

Эта функция выбирает активный файл открытых файлов.

Параметры
  • fileHandle: файловый дескриптор файла, который необходимо активировать.
Возвращает
  • 0 - если активация прошла успешно
  • 1 - если дескриптор файла выходит за пределы области действия
  • 2 - если дескриптор файла пуст
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример

Замечания

Используйте Mmc_Fat_Openчтобы получить файловые дескрипторы.

Mmc_Fat_ReadN

Прототип

function Mmc_Fat_ReadN(fdata: ^byte; n: word): word;

Описание

Эта функция считывает несколько байтов.

Параметры
  • fdata: буфер данных.
  • n: количество прочитанных байтов.
Возвращает

Количество прочитанных байтов.

Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример

Замечания

Нет.

Mmc_Fat_Open

Прототип

function Mmc_Fat_Open(var name: array[12] of char; mode, attrib: byte): short;

Описание

Эта функция открывает файл для манипуляций.

Параметры
  • name: имя файла.
  • mode: режим обработки файлов,FILE_WRITE, FILE_READ или FILE_APPEND.
  • attrib: создания файлов и атрибутов. Каждый бит соответствует соответствующему атрибуту файла:
  • Бит Маска Описание
    0 0x01 Только для чтения
    1 0x02 Скрытый
    2 0x04 Системный
    3 0x08 Метка тома
    4 0x10 Подкаталог
    5 0x20 Архивный
    6 0x40 Устройство (только для внутреннего использования, никогда не найденного на диске)
    7 0x80 Флаг создания файла. Если файл не существует и этот флаг установлен, будет создан новый файл с указанным именем.
Возвращает
  • < 0 - если произошла ошибка
  • дескриптор файла для открытого файла в противном случае
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример

Замечания

Нет.

Mmc_Fat_Close

Прототип

function Mmc_Fat_Close(): byte;

Описание

Эта функция закрывает открытый файл.

Параметры

Нет.

Возвращает
  • 0 - если закрытие было успешным
  • 1 - если нет назначенных файлов
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример

Замечания

Нет.

Mmc_Fat_EOF

Прототип

function Mmc_Fat_EOF(): short;

Описание

Эта функция проверяет, достигнут ли конец файла.

Параметры

Нет.

Возвращает
  • -1 - если произошла ошибка
  • 0 - если конец файла не был достигнут
  • 1 - если конец файла был достигнут
Требует

MMC / SD-карта и MMC-библиотека должны быть инициализированы для файловых операций. См. Mmc_Fat_Init.

Пример

Замечания

Нет.