Разделы инструкций

В сети

Пользователей: 112
Из них просматривают:
Аналоги: 31. Галерея: 2. Даташиты: 14. Инструкции: 3. Новости: 25. Остальное: 9. Ошибки: 4. Программы: 2. Производители: 1. Расчёты: 1. Торрент: 1. Форум: 18. Чат: 1.
Участников: 3
Гостей: 109

Google , wolf170571 , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

Оглавление

Функции для работы с ММС- И SD-картами памяти

Multi Media Card (MMC) - это стандарт карт флэш-памяти. ММС-карты в настоящее время имеют объём до нескольких десятков гигабайт и используются в сотовых телефонах, трЗ-плеерах, цифровых камерах и PDA.

 
Secure Digital (SD) - это стандарт карт флэш-памяти, основанный на старом формате Multi Media Card (MMC). SD-карты в настоящее время имеют объём до нескольких десятков гигабайт. Их модификации с уменьшенными размерами Mini SD и Micro SD используются в сотовых телефонах, трЗ-плеерах, цифровых камерах и PDA.

 
Среда MikroC предоставляет библиотеку для доступа к данным в ММС через SPI. Эта библиотека также поддерживает карты памяти SD. Данная библиотека имеет следующие ограничения:
•  библиотека работает только с семейством PIC18;
•  библиотечные функции создают и читают файлы только из корневого каталога;
•  библиотечные функции при записи файла заносят данные в обе таблицы - FAT1 и FAT2, но при чтении используют данные только из таблицы FAT 1. То есть восстановление данных при разрушении FAT1 не производится;
•  начиная с версии 5.0.0.3, библиотека может обмениваться данными с носителем, который содержит Master Boot Record (MBR) в секторе 0. Она читает необходимую информацию из MBR и переходит к первому доступному primary логическому разделу. За детальной информацией о MBR, физических и логических устройствах, pri-mary/secondary-разделах и таблицах разделов следует обратиться к другим ресурсам, например, Wi-kipedia и т.п.

 
Библиотека включает в свой состав следующие функции работы с картами: Mmc_Init, Mmc_Read_Sector, Mmc_Write_Sector, Mmc_Read_Cid и Mmc_Read_Csd. Кроме того, имеются следующие функции для работы с файлами:

•  Mmc_Fat_Init;
•  Mmc_Fat_Assign;
•  Mmc_Fat_Reset;
•  Mmc_Fat_Read;
•  Mmc_Fat__Rewrite;
•  Mmc_Fat_Append;
•  Mmc_Fat_Delete;
•  Mmc_Fat_Write;
•  Mmc_Fat_Set_File_Date;
•  Mmc_Fat_Get_File_Date;
•  Mmc_Fat_Get_File_Size;
•  Mmc_Fat_Get_Swap_File.

 

 Описание этих функций приведено в таблицах 22 - 38 соответственно.

 

 

 Таблица 22. Описание функции Mmc_Init

Прототипunsigned short Mmc_Init(unsigned short *port, unsigned short pin)
Возвращаемое значениеВозвращает 0, если MMC присутствует и успешно инициализирована, в противном случае возвращает 1
ОписаниеИнициализирует MMC через аппаратный SPIинтерфейс, где состояние вывода chip select задаётся аргументами port и pin; а порт и выводы интерфейса определяются установками аппаратуры SPI для соответствуюшего контроллера. Mmc_Init должна вызываться перед использованием других функций этой библиотеки
ТребованияФункция Spi_Init_Advanced(MASTER_OSC_DIV16, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH); должна быть вызвана перед использованием Mmc_Init
ПримерSpi_Init_Advanced(MASTER_OSC_DIV16, DATA_SAMPLE_MIDDLE,
CLK_IDLE_LOW, LOW_2_HIGH);
// Цикл, пока MMC не будет инициализирована
while (Mmc_Init(&PORTC, 2));

 

 Таблица 23. Описание функции Mmc_Read_Sector

Прототипunsigned short Mmc_Read_Sector(unsigned long sector, unsigned short *data)
Возвращаемое значениеВозвращает 0 при успешном чтении или 1, если имеет место ошибка
ОписаниеФункция читает один сектор (512 байт) из MMC, адрес сектора задаётся аргументом sector. Читаемые данные сохраняются в массиве data
ТребованияMMC должна быть проинициализирована с помощью функции Mmc_Init.
Примерerror = Mmc_Read_Sector(sector, data)

 

 Таблица 24. Описание функции Mmc_Write_Sector

Прототипunsigned short Mmc_Write_Sector(unsigned long sector, unsigned short *data)
Возвращаемое значениеВозвращает 0 при успешной записи; 1, если была ошибка в передаче команды записи; 2, если была ошибка записи
ОписаниеФункция записывает 512 байт из data в сектор с адресом sector MMC
ТребованияMMC должна быть проинициализирована с помощью функции Mmc_Init.
Примерerror = Mmc_Write_Sector(sector, data)

 

 Таблица 25. Описание функции Mmc_Write_Sector

Прототипunsigned short Mmc_Read_Cid(unsigned short * data_for_registers)
Возвращаемое значениеВозвращает 0, если чтение успешно, и 1 в случае ошибки
ОписаниеФункция читает CIDрегистр и возвращает 16 байт содержания в data_for_registers                    
ТребованияMMC должна быть проинициализирована с помощью функции Mmc_Init
Примерerror = Mmc_Read_Cid(data)

 

 Таблица 26. Описание функции Mmc_Read_Csd

Прототипunsigned short Mmc_Read_Csd(unsigned short *data_for_registers)
Возвращаемое значениеВозвращает 0, если чтение успешно, и 1 в случае ошибки
ОписаниеФункция читает CSDрегистр и возвращает 16 байт содержания в data_for_registers               
ТребованияMMC должна быть проинициализирована с помощью функции Mmc_Init
Примерerror = Mmc_Read_Csd(data)

 

 Таблица 27. Описание функции Mmc_Fat_Init

Прототипunsigned short Mmc_Fat_Init(char *port, unsigned short pin)
Возвращаемое значениеФункция возвращает 0, если инициализация успешна, и 1, если загрузочный сектор не найден, или 255, если карта не обнаружена
ОписаниеИнициализирует подпрограммы работы с системой FAT MMC/SD-карт; линия CS для связи задаётся аргументами port и pin parameters.  Эта функция   должна быть вызвана перед использованием остальных библиотек FAT MMC           
ТребованияФункция Spi_Init_Advanced(MASTER_OSC_DIV16, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH); должна быть вызвана перед использованием Mmc_Init
ПримерSpi_Init_Advanced(MASTER_OSC_DIV16, DATA_SAMPLE_MIDDLE,
CLK_IDLE_LOW, LOW_2_HIGH);
Mmc_Fat_Init(&PORTC, 2);

 

 Таблица 28. Описание функции Mmc_Fat_Assign

Прототипunsigned short Mmc_Fat_Assign(char *filename, char create_file)
Возвращаемое значениеВозвращает 1, если файл присутствует (или файла нет, но новый файл создаётся), или 0, если файл отсутствует и новый файл не создаётся
ОписаниеНазначает файл для FATопераций. Если файл отсутствует, функция создаёт новый файл с заданным названием. Аргумент filename – это название файла (должно быть в формате 8.3 UPPERCASE). Аргумент create_file – это признак создания новых файлов. Если create_file отличается от 0 – создаётся новый файл (если нет файла с указанным названием)        
ТребованияПорты должны быть проинициализированы для FAT-операций с MMC. См. Mmc_Fat_Init
ПримерMmc_Fat_Assign('MIKROELE.TXT',1)

 

 Таблица 29. Описание функции Mmc_Fat_Assign

Прототипvoid Mmc_fat_Reset(unsigned long *size)
Возвращаемое значениеНет
ОписаниеОткрывает существующий файл для чтения, size – возвращает размер файла в байтах                  
ТребованияПорты должны быть проинициализированы для FAT-операций с MMC. См. Mmc_Fat_Init
Файл должен быть назначен. См. Mmc_Fat_Assign
ПримерMmc_Fat_Reset(size)

 

 Таблица 30. Описание функции Mmc_Fat_Read

Прототипvoid Mmc_Fat_Read(unsigned short *bdata)
Возвращаемое значениеНет
ОписаниеЧитает байт данных из файла в bdata                
ТребованияПорты должны быть проинициализированы для FAT-операций с MMC. См. Mmc_Fat_Init                
Файл должен быть назначен. См. Mmc_Fat_Assign
Файл должен быть открыт для чтения. См. Mmc_Fat_Reset
ПримерMmc_Fat_Reset(size)

 

 Таблица 31. Описание функции Mmc_fat_Rewrite

Прототипvoid Mmc_fat_Rewrite()
Возвращаемое значениеНет
ОписаниеОткрывает файл для записи. Если существует файл с заданным названием, файл будет перезаписан
ТребованияПорты должны быть проинициализированы для FAT-операций с MMC. См. Mmc_Fat_Init
Файл должен быть назначен. См. Mmc_Fat_Assign
ПримерMmc_Fat_Rewrite

 

 Таблица 32. Описание функции Mmc_fat_Append

Прототипvoid Mmc_fat_Append()
Возвращаемое значениеНет
ОписаниеОткрывает файл для записи. Если существует файл с заданным названием, данные будут дописаны в его конец
ТребованияПорты должны быть проинициализированы для FAT-операций с MMC. См. Mmc_Fat_Init. Файл должен быть назначен. См. Mmc_Fat_Assign
ПримерMmc_Fat_Append

 

 Таблица 33. Описание функции Mmc_Fat_Delete

Прототипvoid Mmc_Fat_Delete()
Возвращаемое значениеНет
ОписаниеУдаляет файл с MMC
ТребованияПорты должны быть проинициализированы для FAT-операций с MMC. См. Mmc_Fat_Init. Файл должен быть назначен. См. Mmc_Fat_Assign
ПримерMmc_Fat_Delete

 

 Таблица 34. Описание функции Mmc_fat_Write

Прототипvoid Mmc_fat_Write(char *fdata, unsigned data_len);
Возвращаемое значениеНет
ОписаниеЗаписывает данные в файл на MMC. Аргумент fdata – записываемые данные. Аргумент data_len – количество байтов информации для записи
ТребованияПорты должны быть проинициализированы для FAT-операций с MMC. См. Mmc_Fat_Init. Файл должен быть назначен. См. Mmc_Fat_Assign. Файл должен быть открыт для записи. См. Mmc_Fat_Rewrite или Mmc_Fat_Append
ПримерMmc_Fat_Write(file_contents, 42); // записать данные в назначенный файл

 

 

 Таблица 35. Описание функции Mmc_fat_Set_File_Date

Прототипvoid Mmc_fat_Set_File_Date(unsigned int year, unsigned short month, unsigned short day, unsigned short hours, unsigned short mins, unsigned short seconds)
Возвращаемое значениеНет
ОписаниеУстанавливает атрибуты времени для файла. Можно устанавливать year, month, day. hours, mins, seconds
ТребованияПорты должны быть проинициализированы для FAT-операций с MMC. См. Mmc_Fat_Init. Файл должен быть назначен. См. Mmc_Fat_Assign. Файл должен быть открыт для записи. См. Mmc_Fat_Rewrite или Mmc_Fat_Append
ПримерMmc_Fat_Set_File_Date(2005, 9, 30, 17, 41, 0)

 

 Таблица 36. Описание функции Mmc_fat_Get_File_Date

Прототипvoid Mmc_fat_Get_File_Date(unsigned int *year, unsigned short *month, unsigned short *day, unsigned short *hours, unsigned short *mins)
Возвращаемое значениеНет
ОписаниеЧитает атрибуты времени файла. Можно читать year, month, day, hours, mins
ТребованияПорты должны быть проинициализированы для FAT-операций с MMC. См. Mmc_Fat_Init. Файл должен быть назначен. См. Mmc_Fat_Assign
ПримерMmc_Fat_Get_File_Date(year, month, day, hours, mins);

 

 Таблица 37. Описание функции Mmc_fat_Get_File_Size

Прототипunsigned long Mmc_fat_Get_File_Size()
Возвращаемое значениеРазмер файла в байтах
ОписаниеФункция позволяет получить размер файла в байтах
ТребованияПорты должны быть проинициализированы для FAT-операций с MMC. См. Mmc_Fat_Init. Файл должен быть назначен. См. Mmc_Fat_Assign
ПримерMmc_Fat_Get_File_Size

 

 Таблица 38. Описание функции Mmc_Fat_Get_Swap_File

Прототипunsigned long Mmc_Fat_Get_Swap_File(unsigned long sectors_cnt)
Возвращаемое значениеНомер начального сектора swapфайла, если он был создан, в противном случае возвращает 0
ОписаниеЭта функция используется для создания swap-файла на MMC/SD-носителе. Она принимает аргумент sectors_cnt в качестве количества последовательных секторов, которые предполагается использовать в качестве swap-файла. В процессе исполнения функция ищет доступные последовательно расположенные сектора, количество которых задано аргументом sectors_cnt. Если на носителе существует такая область, в ней создается файл  MIKROSWP.SYS и область соответствующим образом обозначается в таблицах FAT. Файлу присваиваются атрибуты: system, archive и hidden, чтобы отличать его от других файлов. Если файл с именем MIKROSWP.SYS уже существует на этом носителе, данная функция удаляет его до создания нового такого же. Назначение swap-файла состоит в том, чтобы сделать процесс чтения и записи на MMC/SD-носитель настолько быстрым, насколько это возможно, благодаря использованию функций Mmc_Read_Sector() и Mmc_Write_Sector() непосредственно, без потенциального разрушения FAT-системы.
Swap-файл может рассматриваться как «окно» на носителе, куда пользователь может свободно писать/читать данные каким ему угодно способом. Его главное назначение в библиотеке mikroC состоит в обеспечении процесса быстрого сбора данных, когда критичный ко времени процесс сбора данных заканчивается, данные можно переписать в «нормальный» файл в требуемом формате
ТребованияПорты должны быть проинициализированы для FATопераций с MMC. См. Mmc_Fat_Init
Пример// Попытка создания swapфайла размером не менее 1000 секторов
// Если удаётся, то номер стартового сектора посылается в USART
void M_Create_Swap_File() {
size = Mmc_Fat_Get_Swap_File(1000);
if (size) {
Usart_Write(0xAA);
Usart_Write(Lo(size));
Usart_Write(Hi(size));
Usart_Write(Higher(size));
Usart_Write(Highest(size));
Usart_Write(0xAA);
}
}//end

 

 

 

 Функция Mmc_Set_Reg_Adr предназначена только для внутренних потребностей компилятора. Схема подключения карты памяти к микроконтроллеру показана на рисунке 27.

 

Схема подключения карты памяти к микроконтроллеру

Рис. 27. Схема подключения карты памяти к микроконтроллеру

 

В нижеследующем примере программы 1024 байта записываются в сектора 55 и 56, а затем сектора читаются и выводятся в порт USART для визуального контроля:

  

unsigned i;
unsigned short trap;
unsigned short data[512];
void main() {
Usart_Init(9600);
// Инициализация интерфейса ММС
Spi_Init_Advanced(MASTER_0SC_DIV1б, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH);
while (Mmc_Init(&PORTC, 2)) ;
// Заполнение буфера символами "М"
for (i = 0; i <= 511; i++)
data[i] = "M";
// Запись его в сектор 55 ММС
tmp = Mmc_Write_Sector(55, data);
// Заполнение буфера символами "Е"
for (i = 0; i <= 511; i++)
data[i] = "E";
// Запись его в сектор 56 ММС
tmp = Mmc_Write_Sector(56, data);
/** Теперь чтение секторов 55 и 56 **/
// Чтение сектора 55
tmp = Mmc_Read_Sector(55, data);
// Отправка 512 байтов из буфера в USART
if (tmp == 0)
for (i = 0; i < 512; i++)
Usart_Write(data[i]);
// Чтение сектора 56
tmp = Mmc_Read_Sector(56, data);
// Отправка 512 байтов из буфера в USART
if (tmp == 0)
for (i = 0; i < 512; i++)
Usart_Write(data[i]);
} // end
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити

Разное

Во время ремонта телевизора не ставьте настольную лампу на его корпус.

Интересно

Не давайте детям играть с ПДУ при работающем телевизоре.

Похожие инструкции