DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

Рік:
2014
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Системи запису та відтворення інформації
Група:
ЗІ-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. Варіант Назва файлу  13 FILE13.C   ТЕКСТ ПРОГРАМИ % Кількість байт в секторі 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); 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) = '3'; 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 КІЛЬКІСТЬ БАЙТ В СЕКТОРІ: 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 ФАЙЛ ЗНАЙДЕНО НОМЕР ПЕРШОГО КЛАСТЕРУ ФАЙЛА: 34 РОЗМІР ДАНОГО ФАЙЛУ: 15752 ПЕРШИЙ СЕКТОР ФАЙЛУ: 1040 КІЛЬКІСТЬ СЕКТОРІВ ФАЙЛУ: 31 КІЛЬКІСТЬ КЛАСТЕРІВ ФАЙЛУ: 2  РЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАМИ WINHEX  ВИСНОВОК Для виконання даної лабораторної роботи я навчився організовувати файловий ввід-вивід даних на Flash-носіях інформації у портативних аудіо- та відео пристроях. Написав програму у середовищі MATLAB, яка дає змогу зчитувати з двійкового образу SD_512.bin файл з заданим ім’ям ( як це робиться в FAT16) і виводить його вміст в робочу область. Відкрив файл образу SD-карти SD_512.bin в програмі WinHex і визначив основні параметри файлової системи FAT16. Порівняв отримані результати у середовищах WinHex та MATLAB.
Антиботан аватар за замовчуванням

11.03.2014 02:50

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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