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

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” З В І Т до лабораторної роботи №5 з курсу: «Системи запису та відтворення інформації» на тему: «ПОБУДОВА СИСТЕМИ ЗБЕРІГАННЯ ІНФОРМАЦІЇ НА MMC\SD FLASH-КАРТАХ ПАМ‘ЯТІ З ПІДТРИМКОЮ ФАЙЛОВОЇ СИСТЕМИ FAT16» Варіант №1 Мета роботи – набути вміння організовувати файловий ввід-вивід даних на Flash-носіях інформації в портативних аудіо- та відеопристроях. ЗАВДАННЯ: Ознайомитись з теоретичним матеріалом.. Відкрити файл образу MMC/SD-карти SD_512.bin в програмі WinHex і визначити основні параметри файлової системи FAT16. Визначити основні параметри файлової системи в середовищі MatLab з допомогою розглянутих функцій і програм для образу MMC/SD-карти SD_512.bin. Визначити основні параметри файлової системи в середовищі MatLab з допомогою розглянутих функцій і програм для образу MMC/SD-карти SD_512.bin. Порівняти вміст зчитаного файлу в середовищі MatLab і WinHex. Варіант Назва файлу  1 FILE1.C   ЛІСТИНГ ПРОГРАМИ clear all; BytesPerSec = 512; Buffer = zeros(BytesPerSec, 1); s = MMC_SD_Init('D:\Student\Lab_5\SD_512.bin'); VBR_Addr = 0; LBA = 0; [Buffer, cl] = MMC_SD_Read_Sector(s, LBA); if (Buffer(511) ~= hex2dec('55')| Buffer(512) ~= hex2dec('AA')) disp ('VBR FAT Error1'); 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); NumFATs = Buffer(hex2dec('10') + 1); z = sprintf ('Кількість таблиць FAT: %d', NumFATs); disp (z); RootEntCnt = Buffer(hex2dec('11') + 1) + 256 * Buffer(hex2dec('12') + 1); z = sprintf ('Кількість записів в кореневому каталозі Root Directory: %d', RootEntCnt); disp(z); TotSec = Buffer(hex2dec('13') + 1) + 256 * Buffer(hex2dec('14') + 1); if TotSec ==0 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); SecPerFAT = Buffer(hex2dec('16') + 1) + 256 * Buffer(hex2dec('17') + 1); z = sprintf ('Розмір таблиці FAT y ceктоpax: %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('3A')+ 1)~='6') disp('FAT16 Error'); end; temp = Buffer ((hex2dec('36') + 1):(hex2dec ('3A' + 1))); z = sprintf ('Тип файлової системи: %s', char(temp)); disp (z) ; 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; RootDir_Sect = VBR_Addr + RsvdSecCnt + SecPerFAT * NumFATs; z = sprintf ('Перший сектор Root Directory: %d', RootDir_Sect); disp(z) ; 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) ; temp = RootDir_Sect; 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) = 32; File_Name(7) = 32; File_Name(8) = 32; File_Name(9) = 'C'; File_Name(10) = 32; File_Name(11) = 32; for jj = 1 : RootDir_SectCnt [Buffer, cl] = MMC_SD_Read_Sector(s, temp); temp = temp + 1; Flag_S = 0; count = 1; for ii = 1 : 16 RTE = Buffer(count : count + 10); count = count + 32; if(sum(RTE == File_Name) == 11) Flag_S = 1; break; end; end; if (Flag_S == 1) disp('File знайдено'); break; end; end; if (Flag_S ~= 1) disp('File не знайдено'); fclose(s); return; end; count = count - 32; File_FirstCluster = Buffer(count + 26) + 256 * Buffer(count + 27); z = sprintf('Перший кластер файлу: %d', File_FirstCluster); disp(z); File_Size = Buffer(count + 28) + 256 * Buffer(count + 29) + 16^3 * Buffer(count + 30) + 16^4 * Buffer(count + 31); z = sprintf ('Розмір файлу: %d байт', File_Size) ; disp (z) ; Sectors_Per_File= ceil(File_Size/BytesPerSec); z = sprintf ('Кількість секторів у файлі: %d', Sectors_Per_File) ; disp (z) ; Cluster_Per_File = ceil( Sectors_Per_File/SecPerClus); z = sprintf ('Кількість кластерів у файлі: %d', Cluster_Per_File) ; disp (z) ; File_FirstSector = (File_FirstCluster -2)* SecPerClus + Data_Sect; z = sprintf('Перший сектор файлу: %d', File_FirstSector); disp(z); Sector_Count=1; Next_Cluster=File_FirstCluster; Next_Sector= File_FirstSector; while(File_Size >0) %прочитати сектор даних [Buffer,count]=MMC_SD_Read_Sector(s, Next_Sector); Next_Sector=Next_Sector+1; Sector_Count=Sector_Count+1; % вивести вміст сектору файлу z=sprintf('%c', Buffer); disp(z); File_Size=File_Size-512; % якщо потрібно прочитати наступний кластер if((File_Size>0) & (Sector_Count>SecPerClus)) %визначити номер сектора з FAT, який містить вказівник на наступний кластер Address= FAT_Sect1 +fix((Next_Cluster*2)/512); %прочитати сектор FAT [Buffer,count] = MMC_SD_Read_Sector(s, Address); % визначити номер наступного кластеру даних у файлі Next_Cluster= Buffer(Next_Cluster*2+1)+2^8*Buffer(Next_Cluster*2+2); % визначити номер першого сектора наступного кластеру даних Next_Sector = (Next_Cluster-2)*SecPerClus+Data_Sect; % продовжити з першого сектора нового кластеру Sector_Count=1; end; end; % завершення роботи з MMC/SD-картою 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 File знайдено Перший кластер файлу: 17 Розмір файлу: 54266 байт Кількість секторів у файлі: 106 Кількість кластерів у файлі: 7 Перший сектор файлу: 768 Read Sector Number 768 ВИСНОВОК На цій лабораторній роботі я навчився розробляти алгоритми вводу-виводу даних на Flash-носіях аудіо та відео пристроях. Розглянув структуру файлової системи FAT-16 і змоделювали роботу карти пам’яті у системі Matlab.
Антиботан аватар за замовчуванням

16.01.2013 12:26

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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