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

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА” ІКТА Кафедра Захист інформації З В І Т До лабораторної роботи №5 з курсу: „ Системи запису та відтворення інформації ” на тему: „ ПОБУДОВА СИСТЕМИ ЗБЕРІГАННЯ ІНФОРМАЦІЇ НА MMC\SDFLASH-КАРТАХ ПАМ‘ЯТІ З ПІДТРИМКОЮ ФАЙЛОВОЇ СИСТЕМИ FAT16” Варіант-23 Львів – 2011 Мета роботи : набути вміння організовувати файловий ввід-вивід даних на Flash-носіях інформації в портативних аудіо- та відеопристроях. Завдання: 1. Ознайомитись з теоретичним матеріалом. 2. Відкрити файл образу MMC/SD-карти SD_512.bin в програмі WinHex і визначити основні параметри файлової системи FAT16. 3. Визначити основні параметри файлової системи в середовищі MatLab з допомогою розглянутих функцій і програм для образу MMC/SD-карти SD_512.bin. 4. Визначити основні параметри файлової системи в середовищі MatLab з допомогою розглянутих функцій і програм для образу MMC/SD-карти SD_512.bin. 5. Порівняти вміст зчитаного файлу в середовищі MatLab і WinHex. Варіант – 23 Назва файлу – FILE3.C . Лістинг програми: % Кількість байт в секторі BytesPerSec = 512; % Буфер для читання/запису даних Buffer = zeros(BytesPerSec, 1); % 1. Переводимо карту в активний режим s = MMC_SD_Init('D:\MSQC.25\Matlab\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); if TotSec == 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); FileName = zeros(1, 11); FileName(1) = 'F'; FileName(2) = 'I'; FileName(3) = 'L'; FileName(4) = 'E'; FileName(5) = '1'; FileName(6) = '1'; FileName(7) = 32; %пробіл FileName(8) = 32; FileName(9) = 'C'; FileName(10) = 32; FileName(11) = 32; ByteCnt = 1; Flag_File = 0; %прапорецьзнаходженняфайлу for jj = 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байти) if ByteCnt > 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); if Claster_file ~= 1 Fat16 = zeros(Claster_file,1); Fat16(1,1) = DIR_F; t=DIR_F; for i = 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; for i = 1:Claster_file Read_claster = Fat16(i,1); for ii = 1 : SecPerClus if Pr_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 у секторах: 246 Тип файлової системи: FAT16 Перший сектор FAT1: 4 Перший сектор FAT2: 250 Перший сектор Root Directory: 496 Кількість секторів в Root Directory: 32 Номер сектора початку області даних: 528 Read Sector Number 496 Файл знайдено Номер першого кластеру файла: 30 Розмір данного файлу: 11387 Перший сектор файлу: 976 Кількість секторів файлу: 23 Кількість кластерів файлу: 2 Read Sector Number 4 Read Sector Number 976 Висновок: На цій лабораторній роботі я навчився розробляти алгоритми вводу-виводу даних на Flash-носіях аудіо та відео пристроях. Розглянув структуру файлової системи FAT-16 і змоделювали роботу карти пам’яті у системі Matlab.
Антиботан аватар за замовчуванням

25.03.2012 21:03-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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