![]() |
|
|
Общетехнические вопросы Общие вопросы аналоговой и цифровой электроники. |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 |
Member
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 49
Сообщений: 45
Вес репутации: 100/48 ![]() ![]() |
![]()
Помогите разовбраться с процедурой чтения SD карты.
Я использую режим SPI и делаю следующим образом: CMD0 (с лог. 0 на CS)--> R1= 0x01 --> -->CMD55-->ACMD41-->R1= 0x00?--Да-->CMD18 c нулевым аргументом | | |----<----------- Нет---| Я так понимаю, что после того, как прочитан отклик R1 на команду CMD18 и считан байт 0xFE (что означает начало блока данных с указанным в аргументе CMD18 начальным адресом) должны последовать байты данных. В моём случае ожидается чтение блока BOOT. Но я вижу только нули. Читал карту при помощи WINHEX и знаю, что BOOT сектор начинается с символа 0xEB. Ставлю в маску фильтра начала данных вместо 0xFE этот самый 0xEB и вижу начало BOOTa. Но до того, как это происходит "можно сходить покурить". Получается, что какие-то проблемы с адресом? |
![]() |
![]() |
![]() |
#2 |
Member
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 49
Сообщений: 45
Вес репутации: 100/48 ![]() ![]() |
![]()
Решение нашёл, но это то, что получилось у меня, а как делать правильно никто не говорит. Проблема была в том, что при чтении блока, начиная с нулевого адреса я не видел содержимого BOOT сектора, который по идее начинается с нулевого адреса. Установив фильтр на первый символ в BOOTе, я увидел его начало, но адрес, с которого он начинается оставался для меня загадкой. В WINHEX я обратил внимание на такое понятие как скрытые секторы. Умножил количество этих скрытых секторов на количество байт в секторе и полученное смещение подставил в CMD18. В результате я попал точно на начало BOOT сектора. Получается, что в CMD18 передаётся не физический, а логический адрес. Количество скрытых секторов у различных карт разное. Главное, что их количество может быть высчитано из параметров, имеющихся в BOOTе. Таким образом можно получить логическое смещение адреса, которое всегда нужно будет добавлять к задаваемому адресу. Может быть так и задумано, но как то получается немного коряво.
![]() P.S Хотелось бы узнать, как это делается правильно. |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/102 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#4 |
Member
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 49
Сообщений: 45
Вес репутации: 100/48 ![]() ![]() |
![]()
Спасибо за ссылку, но там народ всё обсуждает как нужно инициализировать карту и какие резисторы на какие ноги вешать.
По подключению и инициализации карты у меня вопросов не возникло. Вопрос, заданный мной относится к процедуре чтения данных. Обсуждений этой темы я нигде не встречал. |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/102 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Последовательность такая, читаем MBR, таблицу разделов. Из таблицы разделов берем Абсолютный (логический) номер начального сектора раздела LBA это будет BPB его и читаем, разбираем что по чем. Может это надо Азы работы с ММС Последний раз редактировалось DL36; 19.09.2007 в 14:14. Причина: Добавил чуток |
|
![]() |
![]() |
![]() |
#6 |
Member
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 49
Сообщений: 45
Вес репутации: 100/48 ![]() ![]() |
![]()
MBR- Это и есть BOOT сектор. Проблема в том, что в SD физический адрес начала MBR равен не нулю т. к. с нулевого адреса начинаются скрытые секторы, а количество этих секторов и количество байт в секторе как раз и прописано в MBR. Если бы читая данные с нулевого адреса я увидел начало MBR, то и не было бы этой темы. В различных источниках по теме SD карт ничего об этом я не нашёл. Проблему я уже решил. Есть сомнение, что моё решение нестандартное, поэтому я и спрашиваю, как это делается правильно?
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/102 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Код:
Dsk->firstDataSector = Dsk->LBA_addr+ // Из MBR смещение раздела в секторах Dsk->BPB_RsvdSecCnt + // Зарезервированная область (Dsk->BPB_NumFATs * FATSz) + // Сектора занимаемые этим количеством Dsk->BPB_NumFATs FAT RootDirSectors; // Сектора занимаемые корневой директорией только для FAT16 |
|
![]() |
![]() |
![]() |
#8 |
Member
Регистрация: 26.02.2007
Адрес: Новосибирск
Возраст: 49
Сообщений: 45
Вес репутации: 100/48 ![]() ![]() |
![]()
Это написан ноль, а на самом деле это логический ноль, отстоящий от физического нуля на некоторое количество секторов. В WINHEX приводится количество скрытых секторов. Если к физическому нулю прибавить количесво байт, занимаемых скрытыми секторами, то получится физический адрес начала MBR. Это я говорю не из теории, а из практики. По вышеуказанному принципу у меня уже всё работает.
|
![]() |
![]() |
![]() |
#9 |
Junior Member
Регистрация: 11.12.2007
Возраст: 40
Сообщений: 1
Вес репутации: 100/0 ![]() ![]() |
![]()
Ага, вот и я так же страдал пару месяцев назад.
Пока методом проб и ошибок не выяснил, что загрузочный сектор (при форматировании под Win, по крайней мере) смещен на N секторов. Причем для разных карт смещение различно (я встречался с значениями 0x4000 и 0x8000)! И нигде я не встретил про это упоминания! Теперь тупо перебираю сектора, пока не обнаружу заветный 0xEB )) |
![]() |
![]() |
![]() |
#10 |
Junior Member
Регистрация: 29.12.2007
Адрес: Bryansk, Russia
Сообщений: 4
Вес репутации: 100/0 ![]() ![]() |
![]()
Попробуй посмотреть здесь : http://city.tomsk.net/~pic16f84/mp3v...ru/device.html
Там описан плеер на MMC карточке. Думаю найдешь, то что нужно. |
![]() |
![]() |
![]() |
#11 | |
Senior Member
|
![]() Цитата:
Код:
PT & MBR начальный адрес 0000h , адрес последнего байта сектора 1E93h FFFFh. EB 3C 90 20 20 20 20 20 20 20 20 00 02 20 01 00 02 00 02 00 00 F8 7B 00 3F 00 10 00 E9 00 00 00 17 4B 0F 00 80 00 29 A9 3D 30 FC 4E 4F 20 4E 41 4D 45 20 20 20 20 46 41 54 31 36 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA ![]() Последний раз редактировалось Sergey1; 31.12.2007 в 13:04. |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/102 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#13 |
Senior Member
|
![]()
..можно вопрос?..
я вот тут вычитал что в SD карту данные кидаются блоками по 512 байт, может кто скажет..с какой скоростью можно передавать на неё этот блок, и сколько времени нужно чтобы он записался и карта сказала "готова к приёму следующего"?.. |
![]() |
![]() |
![]() |
#14 |
Member
Регистрация: 14.09.2007
Возраст: 44
Сообщений: 56
Вес репутации: 113/46 ![]() ![]() |
![]()
Теоретического минимума по скорости передачи нет.
Где-то слышал, что карта без обращения уходит в спячку, но пока с этим не сталкивался и в даташитах на это не натыкался. Меня интересовала неспешная передача данных и это возможно. Про 1 байт в день не интересовался, но если карта не уснет, то это возможно, хотя реально данные запишутся только по прошествии 512 байт. До этого момента они лишь будут буферизоваться! По мах скорости от карты зависит. Обычно, но не всегда, тактовая частота карты 25 МГц. При этом burst rate при clock speed 25 МГЦ для SPI bus mode = 3.125 MB/s, SD 1-bit mode 3.125 MB/s, SD 4-bit mode 12.5 MB/s. Хай спид в SPI mode обычно не работает. От спецификации к спецификации инфа и цифры могут меняется, поэтому трудно сказать что-либо однозначно ![]() на 18 ПИКе с кварцем 40 МГц и апаратным ЭС ПИ АЙ (Фосц/4) проблем обычно нет, вернее у меня не было при обращении к карте на таких скоростях. В то же время не было нужды писать и читать с мах скоростью, поэтому, ничё тут сказать не могу. Что касается времени доступа при чтении блока оно составляет от 0.5 до 100 милисек, при записи от 0.5 до 250 милисек. (табл.2.4. сандиск юзер мануал вер.2.2) ![]() Последний раз редактировалось vicve; 23.03.2008 в 00:22. |
![]() |
![]() |
![]() |
#15 | |
Senior Member
|
![]() Цитата:
http://www.onfulfillment.com/cypress...&p=939&sid=205 |
|
![]() |
![]() |
![]() |
#16 |
Member
Регистрация: 14.09.2007
Возраст: 44
Сообщений: 56
Вес репутации: 113/46 ![]() ![]() |
![]()
200 зелёных за наборчик - многовато.
можно ведь плату под себя развести и изготовить за эти бабки. Пользы было бы больше. А выйгрыш во времени сомнителен, т.к. с чужой платой разбираться надо, а затем всё под себя переделывать. Хотя, конечно, каждому - своё ![]() |
![]() |
![]() |
![]() |
#17 | |
Senior Member
|
![]() Цитата:
![]() ![]() |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Регистрация: 25.02.2007
Возраст: 48
Сообщений: 1,785
Вес репутации: 3611/100 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
[quote= Может быть так и задумано, но как то получается немного коряво.
![]() P.S Хотелось бы узнать, как это делается правильно.[/quote] Я его как то использовал. Я так понимаю Вам нужна функция getPartitionOffset http://www.bobrovnik.ru/SD.ZIP |
![]() |
![]() |
![]() |
#19 |
Member
Регистрация: 14.09.2007
Возраст: 44
Сообщений: 56
Вес репутации: 113/46 ![]() ![]() |
![]()
2 maagalex
честно говоря, думал в Израиле зарплаты вдвое выше. ![]() во жесть ![]() приезжай в москву бабки зарабатывать ![]() шучу канешн, но в каждой шутке... сорри за оффтоп ![]() |
![]() |
![]() |
![]() |
#20 | |
Senior Member
|
![]() Цитата:
![]() ![]() |
|
![]() |
![]() |
![]() |
#21 |
Senior Member
|
![]()
..купил наборчик, неделю играюсь-
циклом 100 раз записываю в карту блоки по 512 байт..цикл проходит за примерно пол секунды-скорость устраивает ![]() ..и ещё..в API для SDCARD в моём наборе есть два способа записи на карту-один это сначала открыть(создать) файл, а потом кидать туда байты-потом карточка открывается на компьютере и в любом текст.редакторе можно посмотреть., второй способ это запись ОЗУ-буфера или сектора из 512 байт..-мне этот второй способ подходит по скорости-но можно ли будет при этом читать его потом на обычном компе?..хотябы просто дабы сохранить или скопировать содержимое как есть на другую карту ![]() |
![]() |
![]() |
![]() |
#22 |
Senior Member
Регистрация: 28.03.2007
Адрес: Almaty
Возраст: 34
Сообщений: 365
Вес репутации: 194/51 ![]() ![]() |
![]()
WinHex решит все твои проблемы ;-)
__________________
Бывает, проснешься как птица – Крылатой пружиной на взводе. И хочется жить и трудиться!.. Но к завтраку это проходит... |
![]() |
![]() |
![]() |
#23 |
Senior Member
|
![]() |
![]() |
![]() |
![]() |
#24 |
Senior Member
Регистрация: 17.10.2007
Сообщений: 578
Вес репутации: 170/51 ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#25 |
Senior Member
Регистрация: 10.06.2008
Возраст: 58
Сообщений: 2,837
Вес репутации: 3992/110 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
Метки |
mmc, read sd card, спецификация фат |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Процедура чтения DS3235. | Watcher | Общетехнические вопросы | 67 | 29.11.2010 08:42 |
время записи в с SD карту | vptr | Общетехнические вопросы | 0 | 08.11.2007 10:00 |
PIC & SD | vicve | Продукция MICROCHIP | 15 | 15.09.2007 15:35 |
не работает SD карта | ИгорьС | Общетехнические вопросы | 2 | 20.07.2007 14:11 |
Чтение из CE210 | НиК | Продукция MICROCHIP | 1 | 17.05.2007 11:19 |