Обсуждаем цифровые устройства...
Ответить

Re: Эмулятор магнитофона для ZX-Spectrum

Сб апр 25, 2020 11:04:14

da-nie писал(а):А uint8_t a=GetByte(1); что выдаёт?

0 тоже выдает. С какого не нули пойдут, сейчас попробую цикл туда вставить. А то каждый раз вытаскивать с кроватки DIP40 геморрой. Я аж прям уже пожалел, что не поставил TQFP44, или не предусмотрел разъем программирования. Но кто же знал?...

da-nie писал(а):bool SD_ReadBlock(uint32_t BlockAddr,uint8_t *Addr)

Тут указатель на Addr. В исходнике его нет. Если добавлять, то где еще код править надо?

Re: Эмулятор магнитофона для ZX-Spectrum

Сб апр 25, 2020 11:06:43

Тут указатель на Addr. В исходнике его нет. Если добавлять, то где еще код править надо?


Почему нет? https://github.com/da-nie/ZX-Spectrum_T ... mware/sd.c Вот, самая последняя функция.

Re: Эмулятор магнитофона для ZX-Spectrum

Сб апр 25, 2020 11:24:07

А, понял! Не на ту функцию посмотрел.
добавление задержки ничего не дало.
Код:
   char str[16];
   uint8_t b=GetByte(510);
   uint8_t c=GetByte(511);
   for (uint16_t addr1=0; addr1<512; addr1++)
   {    
      uint8_t a=GetByte(addr1);         
      sprintf(str,"%3d: %x %x %x",addr1,a,b,c);
      WH1602_SetTextDownLine(str);
      _delay_ms(250);
   }
    _delay_ms(10000);

По циклу где-то на 440 (dec) начинает выдавать значения отличные от 0.

Re: Эмулятор магнитофона для ZX-Spectrum

Сб апр 25, 2020 11:31:25

По циклу где-то на 440 (dec) начинает выдавать значения отличные от 0.


"Ватсон, это интересно!".
Откуда бы такая печаль? А попробуйте конденсатор по питанию у карты убрать. Может быть, карте что-то не нравится с питанием (оно, может, не успевает набраться к моменту чтения?).

Re: Эмулятор магнитофона для ZX-Spectrum

Сб апр 25, 2020 12:05:42

da-nie писал(а): попробуйте конденсатор по питанию у карты убрать.

Честно? Два раза перечитал и не смог понять, как это может быть?
Во-первых, контроллер по фузам стартует +64 мс. Во, вторых, конденсатор стоит после стабилизатора и там нет в цепи никакого сопротивления, чтобы появилась какая-та задержка по нарастанию напряжения.
Ну да бог с ним, выпаял я этот конденсатор. Оставил только блокировочный 100 нФ по выходу, дабы стабилизатор не "завелся".
Результат нулевой. По адресу 0 так 0 и читает. В остальном работа эмулятора не изменилась.
PS. До выпайки конденсатора пробовал подключить карту 256 МБ просто для проверки... Так вот, по 0 адресу читает правильно. Но после подачи питания и отображения памяти карты в течении 20 минут больше эмулятор так ничего и не отразил. Больше терпения не хватило.

Re: Эмулятор магнитофона для ZX-Spectrum

Сб апр 25, 2020 13:14:24

Честно? Два раза перечитал и не смог понять, как это может быть?


Честно. Разные чудеса бывают. Может, у вас тока источника 3.3 В не хватает на зарядку вашей ёмкости за время запуска обмена с картой и он уходит в защиту на какое-то время.

Во, вторых, конденсатор стоит после стабилизатора и там нет в цепи никакого сопротивления, чтобы появилась какая-та задержка по нарастанию напряжения.


Так сам конденсатор - уже задержка по нарастанию питания.

До выпайки конденсатора пробовал подключить карту 256 МБ просто для проверки... Так вот, по 0 адресу читает правильно.


А по остальным адресам? 0x55 и 0xAA там есть?

Но после подачи питания и отображения памяти карты в течении 20 минут больше эмулятор так ничего и не отразил.


Смотрим дальше. А попробуйте понизить частоту контроллера до 1 МГЦ. Ну и задержку, которую я ставил выше в SD_ReadBlock, конечно, надо убрать.

Re: Эмулятор магнитофона для ZX-Spectrum

Вс апр 26, 2020 22:41:31

Наконец-то форум заработал!

da-nie писал(а):А по остальным адресам? 0x55 и 0xAA там есть?

Эти адреса считываются без проблем на обеих картах. А вот начальные по 00 почему-то. Я не верю, что обе карты оказались уж какими-то "оригинальными" Пытаюсь осилить талмуд по FAT16, но пока непонятно...
da-nie писал(а):А попробуйте понизить частоту контроллера до 1 МГЦ

И попробовал.
На 1 МГц тактовой от внутреннего генератора вообще реакции никакой. Частоту шины я не менял, так и оставалась Fclk/128. В слепую менять не хочется без понимания...
На 8 МГц тактовой работало точно так же и с теми же ошибками, что на 16 МГц.
На тактовой 4 МГц я получил по 0 510 и 511 адресу соответственно 3f ff ff.
Дальше эксперименты с тактовой окончил. Попробовал еще раз грохнуть раздел и создать уже заново, но из-под Win10. Результат тот же, то есть отрицательный. Нормально с картой не дружит все равно.

Ну и еще раз переспрошу, почему прошивка дробит файл tap на несколько? Заголовок - это один файл, данные - это другой файл в понятии устройства. И между собой эти куски не связаны. Причем после воспроизведения заголовка зависает намертво.

Я вот просто не понимаю, почему у всех, кто собирал результат нормальный, а у меня две карты глючат? Опять же не верю, что это из-за того, что я заменил диоды на микросхему 4050.

Re: Эмулятор магнитофона для ZX-Spectrum

Пн апр 27, 2020 00:05:43

Я вот просто не понимаю, почему у всех, кто собирал результат нормальный
не у всех

Re: Эмулятор магнитофона для ZX-Spectrum

Пн апр 27, 2020 10:56:30

Последние новости. Дали погонять микро SD карту на 1 ГБ. С ней устройство заработало без глюков.
Но меня это не устраивает. Карта чужая. Найти такой объем нынче проблематично, разве что у китайцев.
Но две мои карты на 32 и 256 МБ с этим устройством не работают.

Re: Эмулятор магнитофона для ZX-Spectrum

Пн апр 27, 2020 20:29:29

Эти адреса считываются без проблем на обеих картах. А вот начальные по 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. Попробую завтра поэкспериментировать.

Вот в чём дело:
Отстаёте от жизни. В те замшелые времена не было Flash-носителей, а MBR действительно "сидел" в каждом диске. Сейчас не так!
Поскольку простые Flash-носители (USB-флэшка, флэш-карта памяти) имеют только один дисковый раздел, то форматирующая программа вольна выбирать: писать MBR+PBR либо только PBR. Второй случай встречается нередко. На карточке без MBR в нулевом секторе находится сразу PBR.
Для определния типа boot-record, находящегося в нулевом секторе, достаточно проверить первые три-четыре байта сектора (я для простоты обычно проверяю как uint32_t: ноль или не ноль).

Re: Эмулятор магнитофона для ZX-Spectrum

Пн апр 27, 2020 22:30:01

da-nie писал(а):CD4050BE

Нет! В наличии была только HEF4050. Но не думаю, что это влияет.

И еще последние новости. Попробовал загрузить tap файл с тестовой флэшки 1 ГБ. Проблем при загрузке не возникло, разве, что показались, слишком большие паузы между блоками.
Но проблема в другом. После прочтения последнего блока и некоторой паузы железка начала читать какой-то другой раздел карты самостоятельно. При этом на дисплее не появилось ни название этого файла, а нумерация блока была 0. Что он там начал воспроизводить непонятно.

Re: Эмулятор магнитофона для ZX-Spectrum

Пн апр 27, 2020 23:19:08

разве, что показались, слишком большие паузы между блоками.


Есть много загрузчиков, которые после старта несколько секунд выводят анимацию. Вот поэтому паузы сделаны большими.
После прочтения последнего блока и некоторой паузы железка начала читать какой-то другой раздел карты самостоятельно.


Такого никогда не было. Это со всеми tap? Бывают битые tap - там в конце чушь записана. Пару раз попадал.
А контроллер не с aliexpress у вас? Может и проблема в контроллере быть - тут уж я не знаю.

Re: Эмулятор магнитофона для ZX-Spectrum

Вт апр 28, 2020 00:30:41

da-nie писал(а):Это со всеми tap?

Ну со всеми или нет, не гарантирую. Но взятых два случайно файла повели себя одинаково.
da-nie писал(а):А контроллер не с aliexpress у вас?

Нет, был давно куплен в чиподипе для макетной платы. Потому и DIP корпус. Я обычно SMD предпочитаю в плане монтажа. Но тут и плата позволяла по размерам, и разводка проще была...

PS. По FAT попалась интересная (для меня) статья в картинках. Может она поможет разобраться?
http://s-engineer.ru/opisanie-fajlovoj-sistemy-fat16/

Re: Эмулятор магнитофона для ZX-Spectrum

Вт апр 28, 2020 09:34:37

Попробуйте вот такую версию. Но под себя перекомпилируйте, разумеется. Я поменял только файл fat.c.

Firmware.zip
(257.68 KiB) Скачиваний: 100


Может она поможет разобраться?


Как я уже написал, FAT тут не при чём. Всё дело в MBR, которой я на флэшках не ожидаю. Но на вашей флэшке она есть.
P.S. Если же вам FAT интересен, то я в этой теме где-то выкладывал спецификацию FAT на русском языке. :)

Re: Эмулятор магнитофона для ZX-Spectrum

Вт апр 28, 2020 11:29:03

da-nie писал(а):Я поменял только файл fat.c.

Заменил в предыдущем проекте этот файл и перекомпилировал. На флэшке 32 МБ и 256 МБ стала выскакивать ошибка, что файловая система FAT32.
da-nie писал(а):P.S. Если же вам FAT интересен,

Да я скачал и изучаю. Но пока непонятно все равно.

Re: Эмулятор магнитофона для ZX-Spectrum

Вт апр 28, 2020 11:42:02

А попробуйте вот тут номера поменять. size_t partition=0; От 0 до 3.
У вас там, случайно, нет расширенных разделов?
Потому как определяется всё это вот так:

Код:
FATType=FAT12;
 if (CountofClusters<4085UL)
 {
  WH1602_SetTextProgmemDownLine(Text_FAT12);
  while(1);
 }
 else
 {
  if (CountofClusters<65525UL)
  {
   WH1602_SetTextProgmemDownLine(Text_FAT16);
   _delay_ms(2000);
   FATType=FAT16;
  }
  else
  {
   WH1602_SetTextProgmemDownLine(Text_FAT32);
   FATType=FAT32;
   while(1);   
  }
 }


Добавлено after 8 minutes 40 seconds:
Кстати, забыл в fat.c проверить, что там вообще раздел есть.
Вот такой модуль правильный. Попробуйте. Вполне возможно, будет писать, что файловая система не найдена. Тогда попробуйте другие номера разделов. Если и так не выйдет, значит, я с LBA где-то ошибся. У меня нет флэшек с MBR, поэтому проверить у себя не могу.
Вложения
fat.c
(25.94 KiB) Скачиваний: 81

Re: Эмулятор магнитофона для ZX-Spectrum

Вт апр 28, 2020 12:48:54

da-nie писал(а):size_t partition=0; От 0 до 3.

Не помогло. Все время ошибка FAT32
da-nie писал(а):У вас там, случайно, нет расширенных разделов?

Я не знаю как это определить. Флэшка форматировалась стандартными методами через Управление дисками с удалением и созданием нового раздела
da-nie писал(а):Вот такой модуль правильный.

С этим модулем и пробовал.

Кстати, компилятор выдает предупреждение Warning dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
на строчку кода
Код:
FATOffset=*((uint32_t*)offset);

расположенную в той же функции, где и size_t partition=0;

Добавлено after 13 minutes 27 seconds:
serg_svd писал(а):После прочтения последнего блока и некоторой паузы железка начала читать какой-то другой раздел карты самостоятельно

Сейчас стал только пилот-тон выводить бесконечно. При этом блоки по счетчику инкрементируются

Re: Эмулятор магнитофона для ZX-Spectrum

Вт апр 28, 2020 13:33:18

Я не знаю как это определить.


Например, посмотреть в AOMEI Partition Assistant Standard Edition 6.3.

С этим модулем и пробовал.


Понял, в чём дело. Поменял в копии и затёр старый. Сейчас сделаю новый.

Кстати, компилятор выдает предупреждение


Это нормально.

Добавлено after 37 minutes 57 seconds:
Сделал карту с MBR с единственным разделом (точнее, MBR там уже был).
Вроде бы работает. Пишет, что MBR найден, потом переходит на нужный раздел и всё отображается как надо. После завершения выходит в меню. :dont_know: Всё как надо.

Изменил файлы fat.c и sd.c (повысил скорость до максимума).

Firmware.zip
(141.78 KiB) Скачиваний: 112

Re: Эмулятор магнитофона для ZX-Spectrum

Вт апр 28, 2020 16:58:22

Теперь пишет "Найден MBR" "FAT не найдена" на карте 32 МБ.
С картой 256 МБ вроде работает, но видит некую папку "YTM o", которой нет ни в скрытых, ни в системных.
На карте 1 ГБ есть тоже такая же непонятная папка, но с именем "LS"

Re: Эмулятор магнитофона для ZX-Spectrum

Вт апр 28, 2020 17:19:13

Теперь пишет "Найден MBR" "FAT не найдена" на карте 32 МБ.


Как это ни странно звучит, но у меня карту на 16 МБ даже всеми любимый (и вроде как очень хорошо работающий) fatfs (который я прикрутил к stm32) не может использовать - тоже пишет, что файловой системы не обнаружено.

С картой 256 МБ вроде работает, но видит некую папку "YTM o", которой нет ни в скрытых, ни в системных.


А попробуйте проверку диска запустить. Может, уже что-то порушилось.

На карте 1 ГБ есть тоже такая же непонятная папка, но с именем "LS"


Может, конечно, и тут нарушена файловая система, но может и нет. Пока у меня идей нет, что это могло бы быть.

Добавлено after 13 minutes 26 seconds:
Сейчас в AOMEI указал карту на 16 МБ, указал на MBR и выбрал "стереть жёсткий диск". Стёр. Создал раздел. Отформалировал (увы, только как FAT12). И fatfs увидел диск. :)
Попробуйте то же проделать с вашей SD-картой.
Ответить