ПОБУДОВА СИСТЕМИ ЗБЕРІГАННЯ ІНФОРМАЦІЇ НА MMCSD FLASH-КАРТАХ ПАМ‘ЯТІ З ПІДТРИМКОЮ ФАЙЛОВОЇ СИСТЕМИ FAT16

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2011
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Системи запису та відтворення інформації
Група:
ЗІ-32

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” З В І Т до лабораторної роботи №5 з курсу: «Системи запису та відтворення інформації» на тему: «ПОБУДОВА СИСТЕМИ ЗБЕРІГАННЯ ІНФОРМАЦІЇ НА MMC\SD FLASH-КАРТАХ ПАМ‘ЯТІ З ПІДТРИМКОЮ ФАЙЛОВОЇ СИСТЕМИ FAT16» Варіант №1 Мета роботи – набути вміння організовувати файловий ввід-вивід даних на Flash-носіях інформації в портативних аудіо- та відеопристроях. ЗАВДАННЯ: Ознайомитись з теоретичним матеріалом.. Відкрити файл образу MMC/SD-карти SD_512.bin в програмі WinHex і визначити основні параметри файлової системи FAT16. Визначити основні параметри файлової системи в середовищі MatLab з допомогою розглянутих функцій і програм для образу MMC/SD-карти SD_512.bin. Визначити основні параметри файлової системи в середовищі MatLab з допомогою розглянутих функцій і програм для образу MMC/SD-карти SD_512.bin. Порівняти вміст зчитаного файлу в середовищі MatLab і WinHex. Варіант Назва файлу  1 FILE1.C   ЛІСТИНГ ПРОГРАМИ clear all; BytesPerSec = 512; Buffer = zeros(BytesPerSec, 1); s = MMC_SD_Init('D:\Student\Lab_5\SD_512.bin'); VBR_Addr = 0; LBA = 0; [Buffer, cl] = MMC_SD_Read_Sector(s, LBA); if (Buffer(511) ~= hex2dec('55')| Buffer(512) ~= hex2dec('AA')) disp ('VBR FAT Error1'); return; end; BytesPerSec = Buffer(hex2dec('b') + 1) + 2^8 * Buffer(hex2dec('b') + 2); z = sprintf ('Кількість байт в секторі: %d', BytesPerSec); disp(z) ; SecPerClus = Buffer(hex2dec('d') + 1); z = sprintf ('Кількість секторів в кластері: %d', SecPerClus); disp (z) ; RsvdSecCnt = Buffer(hex2dec('e') + 1) + 256 * Buffer(hex2dec('f') + 1); z = sprintf ('Кількість зарезервованих секторів від початку карти: %d', RsvdSecCnt); disp (z); NumFATs = Buffer(hex2dec('10') + 1); z = sprintf ('Кількість таблиць FAT: %d', NumFATs); disp (z); RootEntCnt = Buffer(hex2dec('11') + 1) + 256 * Buffer(hex2dec('12') + 1); z = sprintf ('Кількість записів в кореневому каталозі Root Directory: %d', RootEntCnt); disp(z); TotSec = Buffer(hex2dec('13') + 1) + 256 * Buffer(hex2dec('14') + 1); if TotSec ==0 TotSec = Buffer(hex2dec('20') + 1) + 256 * Buffer(hex2dec('21') + 1) + 2^16 * Buffer(hex2dec('22') + 1) + 2^24 * Buffer(hex2dec('23') + 1); end; z = sprintf ('Загальна кількість секторів MMC/SD-карти: %d', TotSec); disp (z); SecPerFAT = Buffer(hex2dec('16') + 1) + 256 * Buffer(hex2dec('17') + 1); z = sprintf ('Розмір таблиці FAT y ceктоpax: %d', SecPerFAT); disp (z); if (Buffer(hex2dec('36')+1)~= 'F'|Buffer(hex2dec('37')+1)~='A'|Buffer(hex2dec('38')+ 1)~= 'T'|Buffer(hex2dec('39') + 1) ~='1'|Buffer(hex2dec('3A')+ 1)~='6') disp('FAT16 Error'); end; temp = Buffer ((hex2dec('36') + 1):(hex2dec ('3A' + 1))); z = sprintf ('Тип файлової системи: %s', char(temp)); disp (z) ; FAT_Sect1 = VBR_Addr + RsvdSecCnt; z = sprintf ('Перший сектор FAT1: %d', FAT_Sect1); disp (z) ; if (NumFATs > 1) FAT_Sect2 = FAT_Sect1 + SecPerFAT; z = sprintf ('Перший сектор FAT2 : %d', FAT_Sect2); disp (z) ; end; RootDir_Sect = VBR_Addr + RsvdSecCnt + SecPerFAT * NumFATs; z = sprintf ('Перший сектор Root Directory: %d', RootDir_Sect); disp(z) ; RootDir_SectCnt = RootEntCnt * 32 / BytesPerSec; z = sprintf('Кількість секторів в Root Directory: %d', RootDir_SectCnt); disp (z) ; Data_Sect = VBR_Addr + RsvdSecCnt + SecPerFAT * NumFATs + RootDir_SectCnt; z = sprintf ('Номер сектора початку області даних: %d', Data_Sect) ; disp (z) ; temp = RootDir_Sect; File_Name = zeros(11, 1); File_Name(1) = 'F'; File_Name(2) = 'I'; File_Name(3) = 'L'; File_Name(4) = 'E'; File_Name(5) = '1'; File_Name(6) = 32; File_Name(7) = 32; File_Name(8) = 32; File_Name(9) = 'C'; File_Name(10) = 32; File_Name(11) = 32; for jj = 1 : RootDir_SectCnt [Buffer, cl] = MMC_SD_Read_Sector(s, temp); temp = temp + 1; Flag_S = 0; count = 1; for ii = 1 : 16 RTE = Buffer(count : count + 10); count = count + 32; if(sum(RTE == File_Name) == 11) Flag_S = 1; break; end; end; if (Flag_S == 1) disp('File знайдено'); break; end; end; if (Flag_S ~= 1) disp('File не знайдено'); fclose(s); return; end; count = count - 32; File_FirstCluster = Buffer(count + 26) + 256 * Buffer(count + 27); z = sprintf('Перший кластер файлу: %d', File_FirstCluster); disp(z); File_Size = Buffer(count + 28) + 256 * Buffer(count + 29) + 16^3 * Buffer(count + 30) + 16^4 * Buffer(count + 31); z = sprintf ('Розмір файлу: %d байт', File_Size) ; disp (z) ; Sectors_Per_File= ceil(File_Size/BytesPerSec); z = sprintf ('Кількість секторів у файлі: %d', Sectors_Per_File) ; disp (z) ; Cluster_Per_File = ceil( Sectors_Per_File/SecPerClus); z = sprintf ('Кількість кластерів у файлі: %d', Cluster_Per_File) ; disp (z) ; File_FirstSector = (File_FirstCluster -2)* SecPerClus + Data_Sect; z = sprintf('Перший сектор файлу: %d', File_FirstSector); disp(z); Sector_Count=1; Next_Cluster=File_FirstCluster; Next_Sector= File_FirstSector; while(File_Size >0) %прочитати сектор даних [Buffer,count]=MMC_SD_Read_Sector(s, Next_Sector); Next_Sector=Next_Sector+1; Sector_Count=Sector_Count+1; % вивести вміст сектору файлу z=sprintf('%c', Buffer); disp(z); File_Size=File_Size-512; % якщо потрібно прочитати наступний кластер if((File_Size>0) & (Sector_Count>SecPerClus)) %визначити номер сектора з FAT, який містить вказівник на наступний кластер Address= FAT_Sect1 +fix((Next_Cluster*2)/512); %прочитати сектор FAT [Buffer,count] = MMC_SD_Read_Sector(s, Address); % визначити номер наступного кластеру даних у файлі Next_Cluster= Buffer(Next_Cluster*2+1)+2^8*Buffer(Next_Cluster*2+2); % визначити номер першого сектора наступного кластеру даних Next_Sector = (Next_Cluster-2)*SecPerClus+Data_Sect; % продовжити з першого сектора нового кластеру Sector_Count=1; end; end; % завершення роботи з MMC/SD-картою fclose(s); ІНФОРМАЦІЯ ПРО ФАЙЛОВУ СИСТЕМУ: MMC/SD-card Init Read Sector Number 0 Кількість байт в секторі: 512 Кількість секторів в кластері: 16 Кількість зарезервованих секторів від початку карти: 4 Кількість таблиць FAT: 2 Кількість записів в кореневому каталозі Root Directory: 512 Загальна кількість секторів MMC/SD-карти: 1006359 Розмір таблиці FAT y ceктоpax: 246 Тип файлової системи: FAT16 3{ Перший сектор FAT1: 4 Перший сектор FAT2 : 250 Перший сектор Root Directory: 496 Кількість секторів в Root Directory: 32 Номер сектора початку області даних: 528 Read Sector Number 496 File знайдено Перший кластер файлу: 17 Розмір файлу: 54266 байт Кількість секторів у файлі: 106 Кількість кластерів у файлі: 7 Перший сектор файлу: 768 Read Sector Number 768 ВИСНОВОК На цій лабораторній роботі я навчився розробляти алгоритми вводу-виводу даних на Flash-носіях аудіо та відео пристроях. Розглянув структуру файлової системи FAT-16 і змоделювали роботу карти пам’яті у системі Matlab.
Антиботан аватар за замовчуванням

16.01.2013 12:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!