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

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

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

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

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

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

Міністерство освіти і науки України Національний університет “Львівська політехніка” Інститут комп’ютерних технологій, автоматики та метрології кафедра “Захист інформації” ЗВІТ до лабораторної роботи № 5 з курсу "Системи запису та відтворення інформації" "ПОБУДОВА СИСТЕМИ ЗБЕРІГАННЯ ІНФОРМАЦІЇ НА MMC\SD FLASH-КАРТАХ ПАМ‘ЯТІ З ПІДТРИМКОЮ ФАЙЛОВОЇ СИСТЕМИ FAT16" Львів 2011 РОЗДІЛ 1. МЕТА РОБОТИ Мета роботи – набути вміння організовувати файловий ввід-вивід даних на Flash-носіях інформації в портативних аудіо- та відеопристроях. РОЗДІЛ 2. ЗАВДАННЯ: Ознайомитись з теоретичним матеріалом.. Відкрити файл образу MMC/SD-карти SD_512.bin в програмі WinHex і визначити основні параметри файлової системи FAT16. Визначити основні параметри файлової системи в середовищі MatLab з допомогою розглянутих функцій і програм для образу MMC/SD-карти SD_512.bin. Визначити основні параметри файлової системи в середовищі MatLab з допомогою розглянутих функцій і програм для образу MMC/SD-карти SD_512.bin. Порівняти вміст зчитаного файлу в середовищі MatLab і WinHex. Варіант Назва файлу  11 FILE11.C   РОЗДІЛ 3. ЛІСТИНГ ПРОГРАМИ % Кількість байт в секторі BytesPerSec = 512; % Буфер для читання/запису даних Buffer = zeros(BytesPerSec, 1); % 1. Переводимо карту в активний режим s = MMC_SD_Init(D:\My\Системи запису та відтворення інформації\5\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); РОЗДІЛ 4. ІНФОРМАЦІЯ ПРО ФАЙЛОВУ СИСТЕМУ: MMC/SD-card Init Кількість байт в секторі: 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 Файл знайдено Номер першого кластеру файла: 41 Розмір даного файлу: 8793 Перший сектор файлу: 1152 Кількість секторів файлу: 18 Кількість кластерів файлу: 2 РОЗДІЛ 5. ВИСНОВОК На цій лабораторній роботі я навчився розробляти алгоритми вводу-виводу даних на Flash-носіях аудіо та відео пристроях. Розглянув структуру файлової системи FAT-16 і змоделювали роботу карти пам’яті у системі Matlab.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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