AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
31.07.2011, 18:32
|
|
Прописка
Регистрация: 09.11.2009
Сообщений: 193
Сказал спасибо: 47
Сказали Спасибо 58 раз(а) в 26 сообщении(ях)
|
Re: SD/MMC на AVR
MBR (Master Boot Record - основной сектор загрузки).
Расположен в нулевом секторе (цилиндр 0, сторона 0, сектор 1). На каждом жестком диске имеется в одном экземпляре и содержит в себе много интересного. По смещению 0H (далее для простоты все смещения будут в шестнадцатиричной системе) находится сам загрузчик. Его задача - обнаружить активный раздел и загрузить его Boot-сектор в память по адресу 0000:7С00. Далее, по смещению 1BE находится Partition Table (именно в ней загрузчик и ищет активный раздел). По смещению 1FE (последние два байта сектора) находится сигнатура 55AA H, обозначающая загрузочный сектор. Вся дорожка с MBR считается служебной и информация туда не записывается.
Partition Table - таблица разделов.
Живет в одном секторе с MBR по смещению 1BE. Размер PT - 64 байта (на описание одного раздела отводится 16 байт, так что максимум описывается 4 раздела). Для каждого раздела указано, загрузочный (активный) ли он (первый байт описания: 80 H - активный, 0H - нет), адрес начала раздела (в цилиндрах, головках и секторах), код системы, адрес конца раздела, логический адрес начала раздела (в секторах) и количество секторов в разделе. Посмотреть все это в удобоваримом виде можно при помощи бессмертной и незаменимой программы Diskedit в режиме as partition table. Как правило, на большинстве дисков имеется один или два раздела: Primary DOS и (если есть) Extended DOS. PT создается программой FDISK при разбивке винчестера на разделы.
Primary DOS Partition (основной раздел)
- тяжелое наследие старых версий DOS. Сохранился со времен, когда DOS понимал только один раздел. Не может быть больше 2 Гб (под FAT 16). Совпадает с первым логическим диском на винчестере. Только Primary Partition может быть загрузочной. Создается программой FDISK.
Extended DOS Partition (расширенный раздел)
- способ обойти ограничение на размер раздела 2 Гб. Внутри расширенного раздела можно создавать отдельные логические диски. Если посмотреть в PT адрес расширенного раздела и потом при помощи Diskedit перейти на этот адрес, то обнаружится сектор, по своей структуре напоминающий PT. Состоит он из двух элементов: первый описывает текущий раздел (Extended DOS), второй - следующий логический диск (если он есть). По указанному адресу снова обнаружится такая же таблица, а в ней адрес следующего логического диска (опять же, если он существует). В конце сектора имеется все та же сигнатура 55AA H, по которой его можно найти на диске (все в том же Diskedit’е). Вся остальная дорожка, как и в случае MBR - пустая. Создается программой FDISK.
Boot Sector (загрузочный сектор).
Собственно говоря, загрузочный сектор. Boot sector находится в начале каждого логического диска (первый сектор следующей дорожки после PT). В начале сектора находится команда Jmp - переход на начало кода загрузчика. По смещению 3 находится поле длиной 8 байт, содержащее название и версию OS - при загрузке не используется. Далее, по смещению 0B расположен блок из 19 байт, описывающий логические параметры диска (штука, весьма полезная в хозяйстве) - число байт в секторе (для DOS - 512), число секторов в кластере, число резервных секторов (то есть число секторов от начала диска до первой копии FAT - обычно один), число копий FAT (две), формат FAT в текстовом виде (FAT12, FAT16 или FAT32), размер корневого каталога (считается в записях по 32 байта), общее число секторов на диске, тип носителя (совпадает с первым байтом FAT) и число секторов в FAT. Опять же, всю эту информацию в понятном виде выводит Diskedit в режиме as Boot sector. По смещению 2B находится метка тома (длиной 11 байт). По смещению 3E расположен сам начальный загрузчик. Его задача - проверить первый сектор корневого каталога на наличие файлов IO.SYS и MSDOS.SYS и, обнаружив их, загрузить начало IO.SYS по адресу 0000:0700 H и передать ему управление. В последних двух байтах сектора записана привычная сигнатура 55AAH. Создается при форматировании.
FAT (File Allocation Table - таблица размещения файлов).
FAT расположен непосредственно за загрузочным сектором и представляет собой цепной список, предназначенный для поиска файла на диске. В зависимости от типа (FAT12, FAT16 или FAT32), имеет разную структуру. Но в самом примитивном виде идея следующая - каждый элемент FAT соответствует одному кластеру на диске. В корневом каталоге находится ссылка на первый кластер, занимаемый файлом. В FAT ищем этот кластер и смотрим, что в нем записано. Варианты следующие: кластер свободен, зарезервировано, дефектный, конец цепочки или номер следующего кластера в файле. Файл считывается до тех пор, пока не встретится код конца цепочки. В DOS (и его прямом наследнике - Windows) используется две копии FAT - для надежности. Обе копии должны быть идентичны (на диске они расположены друг за другом). Первый байт FAT скрывает в себе дескриптор носителя (F8 H для жесткого диска). Следующие несколько байт описывают тип FAT. За ними идет сама таблица. Создается при форматировании.
Root Directory (корневой каталог).
Идет сразу за второй копией FAT. Имеется на каждом диске. Практически это тот самый список файлов и директорий, который вы видите, открывая диск в Explorer’е или Far’е. Корневой каталог состоит из 32 байтных элементов (на самом деле, с появлением длинных имен файлов для каждого файла отводится несколько таких элементов). В них содержатся имя файла, расширение, атрибуты, дата и время создания, размер файла и номер первого кластера. Корневой каталог создается при форматировании.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо sersne за это сообщение:
|
|
|
01.08.2011, 12:42
|
|
Частый гость
Регистрация: 21.07.2010
Сообщений: 36
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: SD/MMC на AVR
вот у меня теперь никакого доверия к протеусу совсем нету. в нем все заработало. думал "ай, проверю ка я на железе!", так и опробую только сделанную мной плату 32 меги. дисплей работает, меню есть. а карточка не хочет инициализироваться. отключил дисплей(может я порт SPI для дисплея настроил и как то повлияло на карточку) и мигаю светодиодами - если хорошо -зеленый, ошибка - красный. так вот результат:
Код:
|
disk_initialize(0); - красный светодиод - ошибка
res = f_mount(0,&fat); - зеленый - я думаю логично, даже если карточка мертвая, результат ноль;
res = f_opendir(&dir, path); - красный!!!! |
в чем проблема еще не разобрался
|
|
|
|
01.08.2011, 13:59
|
|
Временная регистрация
Регистрация: 10.10.2008
Сообщений: 97
Сказал спасибо: 22
Сказали Спасибо 39 раз(а) в 19 сообщении(ях)
|
Re: SD/MMC на AVR
Я так полагаю что и дисплей и карточка висят на одном аппаратном SPI, у меня так же, и тоже все работает криво, мне кажется что карточка не принимает никакой "игры" с чипселектом пока не прочитается 512 баит.... Нужно пробовать варианты.
По поводу моего вопроса - идея такая - на отформатированной Виндой карточке MBR нет (это везде указывают) и поэтому сразу начинается PBR, НО при создании образа прога (в моем случае UltraISO) СОЗДАЕТ!! MBR и соответственно сдвигает все остальное . Проверил руками - и в образе и на реальном железе нахожу корневой каталог как надо.....
|
|
|
|
01.08.2011, 16:43
|
|
Частый гость
Регистрация: 21.07.2010
Сообщений: 36
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: SD/MMC на AVR
да, висят на одном SPI. поэтому и втыкнул светодиоды, чтоб не переключаться с карточки на дисплей. результата не дало. вот в сообщениях ранее увидел инициализацию SPI -
Код:
|
SPCR=0x52; SPSR=0x00; |
- это верно?
ато у меня так:
Код:
|
SPCR=0x50;
SPSR=0x01; |
- раз и карточка и дисплей могут работать на одном аппаратном SPI, значит для карточки подходит режим как у меня настроено
|
|
|
|
01.08.2011, 18:39
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: SD/MMC на AVR
Не факт...
Делал так... После запуска МК тактовую SPI на максимум, инициализируем дисплей, сбрасываем тактовую SPI до 125кГц (на 250кГц не все карточки проходили инициализацию), проводим инит карточки... После того как карточка заинитилась выставляем тактовую SPI на максимум... После этого оба девайса крутятся на максимальной скорости... Не забываем рулить CS'ом девайсов...
|
|
|
|
01.08.2011, 21:52
|
|
Временная регистрация
Регистрация: 10.10.2008
Сообщений: 97
Сказал спасибо: 22
Сказали Спасибо 39 раз(а) в 19 сообщении(ях)
|
Re: SD/MMC на AVR
Тогда у меня встречный вопрос:если представить что я читаю что то с карты и сразу передаю в дисплей, то что произойдет если я считав некий баит выставлю чипселект карты в единицу, затем отправлю байт в дисплей, затем чипселект карты в 0 и..... дальше чтение возобновится в пределах одного блока в 512 байт???
|
|
|
|
01.08.2011, 23:07
|
|
Частый гость
Регистрация: 21.07.2010
Сообщений: 36
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: SD/MMC на AVR
Сообщение от st_1
|
После запуска МК тактовую SPI на максимум, инициализируем дисплей, сбрасываем тактовую SPI до 125кГц
|
данная операция предусмотрена в библах мистера Чена? или это вы из своего опыта,
st_1 ?
|
|
|
|
01.08.2011, 23:09
|
|
Частый гость
Регистрация: 21.07.2010
Сообщений: 36
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: SD/MMC на AVR
p.s - рылся я в библах кодвижена, а там краказяблы(особенно в ff)... это у них типа метод такой скрывания исходников? вроде на их сайте написано что лицензия фрии и можно даже в коммерческих целях юзать
|
|
|
|
01.08.2011, 23:29
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: SD/MMC на AVR
Сообщение от Дмитриус
|
данная операция предусмотрена в библах мистера Чена? или это вы из своего опыта,
st_1 ?
|
В библах Чена есть только низкая скорость SPI до и полная скорость после инициализации SD... но есть... Библа же и не подозревает о вашем дисплее...
Просто... смысл инита дисплея на низкой скорости???
|
|
|
|
01.08.2011, 23:47
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: SD/MMC на AVR
Сообщение от leon013
|
я читаю что то с карты и сразу передаю в дисплей, то что произойдет если я считав некий баит выставлю чипселект карты в единицу, затем отправлю байт в дисплей, затем чипселект карты в 0 и..... дальше чтение возобновится в пределах одного блока в 512 байт???
|
А зачем??? Забили буфер с карты, выставили CS SD, выплюнули на дисплей, и т.д. ... пока файл не закончится...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:38.
|
|