da-nie писал(а):А uint8_t a=GetByte(1); что выдаёт?
0 тоже выдает. С какого не нули пойдут, сейчас попробую цикл туда вставить. А то каждый раз вытаскивать с кроватки DIP40 геморрой. Я аж прям уже пожалел, что не поставил TQFP44, или не предусмотрел разъем программирования. Но кто же знал?...
Тут указатель на Addr. В исходнике его нет. Если добавлять, то где еще код править надо?
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
По циклу где-то на 440 (dec) начинает выдавать значения отличные от 0.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
По циклу где-то на 440 (dec) начинает выдавать значения отличные от 0.
"Ватсон, это интересно!".
Откуда бы такая печаль? А попробуйте конденсатор по питанию у карты убрать. Может быть, карте что-то не нравится с питанием (оно, может, не успевает набраться к моменту чтения?).
da-nie писал(а): попробуйте конденсатор по питанию у карты убрать.
Честно? Два раза перечитал и не смог понять, как это может быть?
Во-первых, контроллер по фузам стартует +64 мс. Во, вторых, конденсатор стоит после стабилизатора и там нет в цепи никакого сопротивления, чтобы появилась какая-та задержка по нарастанию напряжения.
Ну да бог с ним, выпаял я этот конденсатор. Оставил только блокировочный 100 нФ по выходу, дабы стабилизатор не "завелся".
Результат нулевой. По адресу 0 так 0 и читает. В остальном работа эмулятора не изменилась.
PS. До выпайки конденсатора пробовал подключить карту 256 МБ просто для проверки... Так вот, по 0 адресу читает правильно. Но после подачи питания и отображения памяти карты в течении 20 минут больше эмулятор так ничего и не отразил. Больше терпения не хватило.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Честно? Два раза перечитал и не смог понять, как это может быть?
Честно. Разные чудеса бывают. Может, у вас тока источника 3.3 В не хватает на зарядку вашей ёмкости за время запуска обмена с картой и он уходит в защиту на какое-то время.
Во, вторых, конденсатор стоит после стабилизатора и там нет в цепи никакого сопротивления, чтобы появилась какая-та задержка по нарастанию напряжения.
Так сам конденсатор - уже задержка по нарастанию питания.
До выпайки конденсатора пробовал подключить карту 256 МБ просто для проверки... Так вот, по 0 адресу читает правильно.
А по остальным адресам? 0x55 и 0xAA там есть?
Но после подачи питания и отображения памяти карты в течении 20 минут больше эмулятор так ничего и не отразил.
Смотрим дальше. А попробуйте понизить частоту контроллера до 1 МГЦ. Ну и задержку, которую я ставил выше в SD_ReadBlock, конечно, надо убрать.
da-nie писал(а):А по остальным адресам? 0x55 и 0xAA там есть?
Эти адреса считываются без проблем на обеих картах. А вот начальные по 00 почему-то. Я не верю, что обе карты оказались уж какими-то "оригинальными" Пытаюсь осилить талмуд по FAT16, но пока непонятно...
da-nie писал(а):А попробуйте понизить частоту контроллера до 1 МГЦ
И попробовал.
На 1 МГц тактовой от внутреннего генератора вообще реакции никакой. Частоту шины я не менял, так и оставалась Fclk/128. В слепую менять не хочется без понимания...
На 8 МГц тактовой работало точно так же и с теми же ошибками, что на 16 МГц.
На тактовой 4 МГц я получил по 0 510 и 511 адресу соответственно 3f ff ff.
Дальше эксперименты с тактовой окончил. Попробовал еще раз грохнуть раздел и создать уже заново, но из-под Win10. Результат тот же, то есть отрицательный. Нормально с картой не дружит все равно.
Ну и еще раз переспрошу, почему прошивка дробит файл tap на несколько? Заголовок - это один файл, данные - это другой файл в понятии устройства. И между собой эти куски не связаны. Причем после воспроизведения заголовка зависает намертво.
Я вот просто не понимаю, почему у всех, кто собирал результат нормальный, а у меня две карты глючат? Опять же не верю, что это из-за того, что я заменил диоды на микросхему 4050.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
[uquote="serg_svd",url="/forum/viewtopic.php?p=3833006#p3833006"]Я вот просто не понимаю, почему у всех, кто собирал результат нормальный[/uquote]не у всех
Последние новости. Дали погонять микро SD карту на 1 ГБ. С ней устройство заработало без глюков.
Но меня это не устраивает. Карта чужая. Найти такой объем нынче проблематично, разве что у китайцев.
Но две мои карты на 32 и 256 МБ с этим устройством не работают.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Эти адреса считываются без проблем на обеих картах. А вот начальные по 00 почему-то. Я не верю, что обе карты оказались уж какими-то "оригинальными"
Значит, есть какой-то нюанс с этими картами. У меня есть карта на 256 Мб и она работает нормально.
Ну и еще раз переспрошу, почему прошивка дробит файл tap на несколько? Заголовок - это один файл, данные - это другой файл в понятии устройства. И между собой эти куски не связаны. Причем после воспроизведения заголовка зависает намертво.
Прошивка ничего не дробит. Но если с карты идёт мусор, она сходит с ума.
почему у всех, кто собирал результат нормальный, а у меня две карты глючат?
Разное бывает.
Опять же не верю, что это из-за того, что я заменил диоды на микросхему 4050.
Что это за микросхема? Насколько она быстрая? CD4050BE? Она?
Но две мои карты на 32 и 256 МБ с этим устройством не работают.
Вот если бы понять, почему, тогда можно было бы учесть особенности таких карт. Вот только в чём тут причина? Карта точно получает команду на чтение и отрабатывает её. Но после передачи сигнала готовности она начинает слать нули. Почему нули? Вот в чём вопрос. Вот, кстати, подобная проблема."Ответ 0xFE приходит, о считывает только 0x00."
Я не могу добиться ни ка каких примерах нормальную работу CMD17 чтение блока
даю запрос CMD17,0,0xFF -> 0x00 (вроде как гуд)
жду 0хFE и дожидаюсь
начинаю читать страничку - фигу, тока 0x00 идет и все.
Там пишут, что "После каждой команды нужно, уже при неактивном CS карты, еще послать минимум 8 клоков." Честно говоря, впервые вижу. Можно попробовать, конечно, но это как бы странно.
Как автор решил проблему и в чём она заключалась там, увы, не написано.\
Когда я запускаю cmd17 с адресом (0x00000000) для моей карты из PIC-18F4520 на шине SPI, я получаю правильный токен R1 возврата из командной строки. Затем, после проверки нескольких циклов, я получаю маркер 0xFE, возвращаемый из моего выдающегося SPI_Put_Char (0xFF). Затем должны начаться данные, чтобы я прочитал 512 байт в мой массив IO_Buffer. Когда я сканирую результаты, я получил много байтов 0x00. Как ни странно, и часто, примерно в позиции 448 в секторе 0, появляются некоторые данные - несколько байтов тут и там - тогда последние 32 байта (я могу видеть только 32 на моем ЖК-экране одновременно) - все нули, за которыми следует маркер 0x55AA ожидается в конце загрузочного сектора.
google translator
В ответах указано вот что:
Наконец-то нашел решение этой проблемы!
Оказывается, вы читали MBR, который находится по адресу 0 на SD-карте. Чтобы найти местоположение загрузочного сектора, нужно прочитать соответствующую запись в MBR. Записи начинаются с адреса 0x01be и по 16 байт каждая. Интересующий элемент в записи находится по смещению 0x08, имеет длину 4 байта и называется LBA. [Википедия] Чтобы получить адрес местоположения загрузочного сектора, нужно умножить LBA на размер сектора (512 байт). [Форум по микрочипам]
Я так понимаю, что там действительно нули и WinHex этот блок как раз не показывает почему-то. Он ноль отсчитывает иначе, если я правильно понял. То есть, сектора начинаются по смещениям в 0x01be+0x08 и умножить на 512. Попробую завтра поэкспериментировать.
Нет! В наличии была только HEF4050. Но не думаю, что это влияет.
И еще последние новости. Попробовал загрузить tap файл с тестовой флэшки 1 ГБ. Проблем при загрузке не возникло, разве, что показались, слишком большие паузы между блоками.
Но проблема в другом. После прочтения последнего блока и некоторой паузы железка начала читать какой-то другой раздел карты самостоятельно. При этом на дисплее не появилось ни название этого файла, а нумерация блока была 0. Что он там начал воспроизводить непонятно.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
разве, что показались, слишком большие паузы между блоками.
Есть много загрузчиков, которые после старта несколько секунд выводят анимацию. Вот поэтому паузы сделаны большими.
После прочтения последнего блока и некоторой паузы железка начала читать какой-то другой раздел карты самостоятельно.
Такого никогда не было. Это со всеми tap? Бывают битые tap - там в конце чушь записана. Пару раз попадал.
А контроллер не с aliexpress у вас? Может и проблема в контроллере быть - тут уж я не знаю.
Ну со всеми или нет, не гарантирую. Но взятых два случайно файла повели себя одинаково.
da-nie писал(а):А контроллер не с aliexpress у вас?
Нет, был давно куплен в чиподипе для макетной платы. Потому и DIP корпус. Я обычно SMD предпочитаю в плане монтажа. Но тут и плата позволяла по размерам, и разводка проще была...
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Как я уже написал, FAT тут не при чём. Всё дело в MBR, которой я на флэшках не ожидаю. Но на вашей флэшке она есть.
P.S. Если же вам FAT интересен, то я в этой теме где-то выкладывал спецификацию FAT на русском языке.
Заменил в предыдущем проекте этот файл и перекомпилировал. На флэшке 32 МБ и 256 МБ стала выскакивать ошибка, что файловая система FAT32.
da-nie писал(а):P.S. Если же вам FAT интересен,
Да я скачал и изучаю. Но пока непонятно все равно.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
А попробуйте вот тут номера поменять. size_t partition=0; От 0 до 3.
У вас там, случайно, нет расширенных разделов?
Потому как определяется всё это вот так:
Добавлено after 8 minutes 40 seconds:
Кстати, забыл в fat.c проверить, что там вообще раздел есть.
Вот такой модуль правильный. Попробуйте. Вполне возможно, будет писать, что файловая система не найдена. Тогда попробуйте другие номера разделов. Если и так не выйдет, значит, я с LBA где-то ошибся. У меня нет флэшек с MBR, поэтому проверить у себя не могу.
расположенную в той же функции, где и size_t partition=0;
Добавлено after 13 minutes 27 seconds:
serg_svd писал(а):После прочтения последнего блока и некоторой паузы железка начала читать какой-то другой раздел карты самостоятельно
Сейчас стал только пилот-тон выводить бесконечно. При этом блоки по счетчику инкрементируются
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Например, посмотреть в AOMEI Partition Assistant Standard Edition 6.3.
С этим модулем и пробовал.
Понял, в чём дело. Поменял в копии и затёр старый. Сейчас сделаю новый.
Кстати, компилятор выдает предупреждение
Это нормально.
Добавлено after 37 minutes 57 seconds:
Сделал карту с MBR с единственным разделом (точнее, MBR там уже был).
Вроде бы работает. Пишет, что MBR найден, потом переходит на нужный раздел и всё отображается как надо. После завершения выходит в меню. Всё как надо.
Изменил файлы fat.c и sd.c (повысил скорость до максимума).
Теперь пишет "Найден MBR" "FAT не найдена" на карте 32 МБ.
С картой 256 МБ вроде работает, но видит некую папку "YTM o", которой нет ни в скрытых, ни в системных.
На карте 1 ГБ есть тоже такая же непонятная папка, но с именем "LS"
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Теперь пишет "Найден MBR" "FAT не найдена" на карте 32 МБ.
Как это ни странно звучит, но у меня карту на 16 МБ даже всеми любимый (и вроде как очень хорошо работающий) fatfs (который я прикрутил к stm32) не может использовать - тоже пишет, что файловой системы не обнаружено.
С картой 256 МБ вроде работает, но видит некую папку "YTM o", которой нет ни в скрытых, ни в системных.
А попробуйте проверку диска запустить. Может, уже что-то порушилось.
На карте 1 ГБ есть тоже такая же непонятная папка, но с именем "LS"
Может, конечно, и тут нарушена файловая система, но может и нет. Пока у меня идей нет, что это могло бы быть.
Добавлено after 13 minutes 26 seconds:
Сейчас в AOMEI указал карту на 16 МБ, указал на MBR и выбрал "стереть жёсткий диск". Стёр. Создал раздел. Отформалировал (увы, только как FAT12). И fatfs увидел диск.
Попробуйте то же проделать с вашей SD-картой.