Побудова системи зберігання інформації на MMCSDFLASH-картах пам‘яті з підтримкою файлової системи FAT16

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА кафедра ЗІ З В І Т до лабораторної роботи №5 з курсу: «Системи запису та відтворення інформації» на тему: «Побудова системи зберігання інформації на MMC\SDFLASH-картах пам‘яті з підтримкою файлової системи FAT16» МЕТА РОБОТИ Набути вміння організовувати файловий ввід-вивід даних на Flash-носіях інформації в портативних аудіо- та відеопристроях. ЗАВДАННЯ Ознайомитись з теоретичним матеріалом.. Відкрити файл образу MMC/SD-карти SD_512.bin в програмі WinHex і визначити основні параметри файлової системи FAT16. Визначити основні параметри файлової системи в середовищі MatLab з допомогою розглянутих функцій і програм для образу MMC/SD-карти SD_512.bin. Написати функцію в середовищі MatLab, яка б зчитувала з двійкового образу SD_512.bin файл з заданим ім’ям ( як це робиться в FAT16) і виводила його вміст в робочу область. Ім’я файлу задано в таблиці 7. Порівняти вміст зчитаного файлу в середовищі MatLab і WinHex. Варіант Назва файлу  19 FILE19.C   ТЕКСТ ПРОГРАМИ clear all; % Кількістьбайт в секторі BytesPerSec = 512; % Буфердлячитання/записуданих Buffer = zeros(BytesPerSec, 1); % 1.Переводимокарту в активнийрежим s = MMC_SD_Init('D:\SD_512.bin'); % 2.Прочитати 0 сектор - VBR % Номерсектора з якогопочинається VBR VBR_Addr = 0; LBA = 0; [Buffer, c1] = MMC_SD_Read_Sector(s, LBA); % Перевіряємосигнатуру VBR if (Buffer(511) ~= hex2dec('55') & Buffer(512) ~= hex2dec('AA')) disp('VBR FAT Error'); 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); % Кількістьтаблиць FAT NumFATs = Buffer(hex2dec('10') + 1); z = sprintf('Кількістьтаблиць FAT: %d' , NumFATs); disp(z); % Кількістьзаписів в Root Directory RootEntCnt = Buffer(hex2dec('11') + 1) + 256 * Buffer(hex2dec('12') + 1); z = sprintf('Кількістьзаписів в кореневомукаталозі Root Directory: %d', RootEntCnt); disp(z); % Кількістьсекторів MMC/SD-карти (до 32 MB) TotSec = Buffer(hex2dec('13') + 1) + 256 * Buffer(hex2dec('14') + 1); ifTotSec == 0 % MMC/SD-карта> 32 MB 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); % Розміртаблиці FAT у секторах SecPerFAT = Buffer(hex2dec('16') + 1) + 256 * Buffer(hex2dec('17') + 1) ; z = sprintf('Розміртаблиці FAT усекторах: %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('ЗА') + 1) ~= '6') disp('FAT16 Error'); end; temp = Buffer((hex2dec('36') + 1):(hex2dec('3A') + 1)); z = sprintf('Типфайловоїсистеми: %s', char(temp)); disp(z); % Обчислюємономерсектору з якогопочинаєтьсятаблиця FAT1 та FAT2 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; % Обчислюємономерсектору з якогопочинаєтьсякореневийкаталог Root Directory RootDir_Sect = VBR_Addr + RsvdSecCnt + SecPerFAT * NumFATs; z = sprintf('Першийсектор Root Directory: %d', RootDir_Sect); disp(z); % Обчислюємокількістьсекторів в Root Directory 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); 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) = '9'; File_Name(7) = 32; File_Name(8) = 32; File_Name(9) = 'C'; File_Name(10) = 32; File_Name(11) = 32; ByteCnt = 1; Flag_File = 0; %прапорецьзнаходженняфайлу forjj = 1 : RootDir_SectCnt %від 1-го доостанньогосекторуRootDirectory Buffer = MMC_SD_Read_Sector(s, RootDir_Sect + jj - 1); %читаєпоточнийсектор for ii = 1 : RootDir_SectCnt temp = Buffer(ByteCnt : ByteCnt + 10); %читаєперші 11 байт (1-ші байтизапису - імятарозширенняфайлу) ByteCnt = ByteCnt + 32; %наступнийзапис (1 запис--32байти) ifByteCnt> RootEntCnt-1 ByteCnt = 1; break; end if sum((temp' == FileName)) == 11 % посимвольнопорівнюємо, співпадає 1-ин елем. -- 1,сумаодиничок = 11 z = sprintf('Файлзнайдено'); Flag_File = 1; disp(z); break; end; end; if (Flag_File == 1) break; end; end; if(Flag_File == 0) z = sprintf('Файлнезнайдено'); disp(z); return; %вихід з програми end; Entry = Buffer(32*(ii-1) + 1 : 32*(ii-1) + 1 +31); %саметойзапис в Root Directory , денашфайл DIR_F = Entry(27) + 256 * Entry(28); %DIR_F --першийкластер з данимифайлу 26:27 -- позиціябайтуйогорозмір==2 z = sprintf('Номерпершогокластеруфайла: %d', DIR_F); disp(z); File_size = Entry(29) + 256 * Entry(30)+256*256 * Entry(31)+ 256*256*256 * Entry(32); z = sprintf('Розмірданогофайлу: %d', File_size); disp(z); Sec_file = DIR_F * SecPerClus + RootDir_Sect; z = sprintf('Першийсекторфайлу: %d', Sec_file); disp(z); Sectors_file = ceil(File_size/(BytesPerSec)); z = sprintf('Кількістьсекторівфайлу: %d', Sectors_file); disp(z); Claster_file = ceil(Sectors_file/SecPerClus); z = sprintf('Кількістькластерівфайлу: %d', Claster_file); disp(z); ifClaster_file ~= 1 Fat16 = zeros(Claster_file,1); Fat16(1,1) = DIR_F; t=DIR_F; fori = 1:Claster_file-1 Buffer = MMC_SD_Read_Sector(s,FAT_Sect1); t = Buffer(t*2+1)+ 256 * Buffer(t*2+2); Fat16(i+1,1) = t; end else for ii = 1 : SecPerClus Buffer = MMC_SD_Read_Sector(s,Sec_file+ii-1); z = sprintf('%c',Buffer); disp(z); end return; end Pr_sector=0; fori = 1:Claster_file Read_claster = Fat16(i,1); for ii = 1 : SecPerClus ifPr_sector == Sectors_file break; else Buffer = MMC_SD_Read_Sector(s,Read_claster*SecPerClus+RootDir_Sect+ii-1); z = sprintf('%c',Buffer); disp(z); Pr_sector = Pr_sector + 1; end; end end 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 Read Sector Number 497 File знайдено Перший кластер файлу: 47 Розмір файлу: 13449 байт Кількість секторів у файлі: 27 Кількість кластерів у файлі: 2 Перший сектор файлу: 1248  РЕЗУЛЬТАТ ВИКОНАННЯ РОБОТИ WINHEX ВИСНОВОК Для виконання даної лабораторної роботи я навчилась організовувати файловий ввід-вивід даних на Flash-носіях інформації у портативних аудіо- та відео пристроях. Написала програму у середовищі MATLAB, яка дає змогу зчитувати з двійкового образу SD_512.bin файл з заданим ім’ям ( як це робиться в FAT16) і виводить його вміст в робочу область. Відкрила файл образу SD-карти SD_512.bin в програмі WinHex і визначила основні параметри файлової системи FAT16. Порівняла отримані результатиу середовищах WinHexта MATLAB.
Антиботан аватар за замовчуванням

04.11.2013 21:11-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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