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

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

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

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

Рік:
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:45

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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