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

Обсуждаем цифровые устройства...
Аватара пользователя
da-nie
Говорящий с текстолитом
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.
Контактная информация:

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

Сообщение da-nie »

Не надо ли ставить какой-нибудь делитель по выходу, или хотя бы защиттить этот выход резистором Ом на 100? Я понимаю, в схеме входного компаратора уже есть делитель и развязывающий конденсатор. Но мало ли...
Если у вас есть подозрение, что ваш спектрум может быть повреждён сигналом в 5 В или может спалить порт микроконтроллера, то вам действительно стоит поставить делитель или резистор. Я не ставил, как видите. :)
не вижу назначения кнопок S1-S4.
Дело в том, что оно описано в самой программе. То есть, поставить их можно как угодно, а в программе заменить макросы и перекомпилировать.

По-умолчанию, они заданы в файле te.c так:

Код: Выделить всё

#define BUTTON_UP_DDR      DDRD
#define BUTTON_UP_PORT     PORTD
#define BUTTON_UP_PIN      PIND
#define BUTTON_UP          3

#define BUTTON_CENTER_DDR  DDRD
#define BUTTON_CENTER_PORT PORTD
#define BUTTON_CENTER_PIN  PIND
#define BUTTON_CENTER      2

#define BUTTON_DOWN_DDR    DDRD
#define BUTTON_DOWN_PORT   PORTD
#define BUTTON_DOWN_PIN    PIND
#define BUTTON_DOWN        1

#define BUTTON_SELECT_DDR  DDRD
#define BUTTON_SELECT_PORT PORTD
#define BUTTON_SELECT_PIN  PIND
#define BUTTON_SELECT      4
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

da-nie писал(а):Если у вас есть подозрение, что ваш спектрум может быть повреждён сигналом в 5 В или может спалить порт микроконтроллера
Подозрений нет и не было, а вот защитить порт микроконтроллера самого эмулятора от КЗ в разъеме стоит. Я, пожалуй, поставлю токоограничительный резистор.
da-nie писал(а):По-умолчанию, они заданы в файле te.c так:
Спасибо за пояснение!
Да, прошивку я буду все равно компилировать под себя. Из-за удобства трассировки изменил подключение индикатора
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
oleg88
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Сб окт 24, 2015 20:37:56
Откуда: nr. Moscow

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

Сообщение oleg88 »

[uquote="serg_svd",url="/forum/viewtopic.php?p=3831073#p3831073"]Я просто разрабатываю свою плату и хотелось бы правильно кнопки расположить[/uquote]
Извините, а чем Вам не нравится плата Zorel из сообщения на третьей странице?
Кнопки можно переназначить в проекте.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

oleg88 писал(а):а чем Вам не нравится плата Zorel
Сложная, габаритная, много переходных отверстий и тонких проводников. Такая плата годится для производства, а не для домашнего изготовления.
У меня плата будет 45х85 мм под размер индикатора Winstar WH1602A. Кроме этого я внес некоторые изменения в авторскую схему
1) как выше написал, изменил подключение индикатора и кнопок. Для этого пришлось перекомпилировать исходники.
2) для питания SD карты поставил стабилизатор LM1117-3.3V с фильтрующими конденсаторами. Автор зачем-то сэкономил на них. Кроме этого добавил FB по питанию и поставил электролит на 100 мкФ для карты, как рекомендуют.
3) Добавил резистор 100 Ом для защиты порта PD0.
4) поставил выключатель на подсветку индикатора. Она в моём случае прожорливая. И, хоть, питать собираюсь от зарядки сотового телефона, но предусмотрел выключатель на всякий случай.
5) ну и последнее, поставил вместо диодов буфер 4050 на SD карту для согласования уровней.

Микроконтроллер оставил в DIP корпусе. С ним трассировка получилась проще, да и размеры платы позволяют.

Еще хотел предусмотреть на плате разъем для микро SD карты, но не нашел даташник и готовый футпринт на сдутый с платы какого-то планшета слот. Решил обойтись большим разъемом SD.

PS Пока все это на словах. Плату планирую изготовить ан днях и проверить работоспособность
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

Что-то не работает плеер...
Исходник брал на Github, компилировал в AtmelStudio 7/
Порты индикатора и кнопок переназначил для себя, изображение есть.
После подачи питания на идникатор выводится объем карты памяти, после этого индикатор очищается и все, реакции на кнопки нет. На индикаторе тоже ничего нет. Компилировалось без ошибок.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
da-nie
Говорящий с текстолитом
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.
Контактная информация:

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

Сообщение da-nie »

после этого индикатор очищается и все,
Ну тут есть варианты:
1) Начальный сектор FAT16 находится не в начале карты. Эмулятор сканирует первые 32 МБ и ищет его.
2) Не хватает питания и карта перестаёт отвечать верно после инициализации.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

da-nie писал(а):) Начальный сектор FAT16 находится не в начале карты. Эмулятор сканирует первые 32 МБ и ищет его.
Карта всего 32 МБ :)) , ретро... Отформатировал по умолчанию, размер кластера 512
Пробовал ставить другую карту на 256 Мб, тоже самое.
Питания 100% хватает. Питаю от БП. С подсветкой ток не более 120 мА, при этом сама подсветка жрет 100 мА.
Стабилизатор LM1117-3.3, по питанию карты стоит электролит 100 мкФ
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
da-nie
Говорящий с текстолитом
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.
Контактная информация:

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

Сообщение da-nie »

Карта всего 32 МБ
Было у меня такое "ретро". 16 Мб и 512 МБ - вообще ни в какую не работает с ними. Считывалась хрень одна. А с другими всё работало отлично. В чём дело - не знаю (и конденсаторами обвешивал, и дросселями).
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

Тогда печально :(
У меня других SD, кроме 32 и 256 МБ нет. И сейчас даже магазины не работают с этим чертовым карантином :(
Есть карта микро SD на 32 ГБ. Но, как я понял, ее надо в FAT16 форматировать? Опасаюсь ее угробить... Она нужа
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
da-nie
Говорящий с текстолитом
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.
Контактная информация:

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

Сообщение da-nie »

У меня других SD, кроме 32 и 256 МБ нет. И сейчас даже магазины не работают с этим чертовым карантином
А попробуйте просто подождать. Прошивка напишет файловую систему, если найдёт, или сообщит об ошибке.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

Подождал... Пишет "Тип ф. системы FAT32 - ошибка"
Я форматировал FAT16/512 это точно. Нашел и скачал софт, что Вы тут советовали для форматирования карт. Он тоже выдает, что флэшка у меня FAT16.
Похоже проблема где-то в исходниках? Поможете решить?
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
da-nie
Говорящий с текстолитом
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.
Контактная информация:

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

Сообщение da-nie »

Подождал... Пишет "Тип ф. системы FAT32 - ошибка"
Возможно, нашлись обрывки старой файловой системы.

О, а у вас на карте не вышли логические разделы, случайно? Нет там остатков ничего подобного?
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

Я полное форматирование уже больше 5 раз делал. Там вряд ли чего могло остаться. Да и с таким объемом карта не могла быть отформатирована в FAT32 автоматически
Логических разделов нет. Смотрел Вашим софтом

PS. удалил раздел и создал заново.
Опять очень долго думает, но стал распознавать карту. При этом часть папок вообще не видит, хотя имена папок короткие и содержат только цифры и буквы латиницы. Проще говоря, я создал две папки 48k и 128k.
Но если папку 128k плеер видит аж два раза, то 48k вообще не видит. Кроме этого плеер видит папку Sustem volume .. хотя ее даже в скрытых файлах нет.
В общем две проблемы.
1) очень долго открывает флэшку
2) некорректно работает с файлами.

PS2. пока так и не удалось выбрать ни один *.tap файл и запустить его на исполнение
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
da-nie
Говорящий с текстолитом
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.
Контактная информация:

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

Сообщение da-nie »

Смотрел Вашим софтом
А попробуйте штатными средствами Windows посмотреть.
Опять очень долго думает, но стал распознавать карту.
Долго думает, потому что начало FAT ищет - оно нифига не в нулевом секторе.
Вам надо бы глянуть, что на карте на низком уровне. Там, похоже, файловая система не такая простая, как представляется.
некорректно работает с файлами.
Он корректно работает только с истинной FAT16 без причуд. Можно, конечно, попробовать fatfs свободный прицепить вместо моей самоделки, но там много возни с адаптацией - подход принципиально разный к поиску файлов и работе с директориями.
Кроме этого плеер видит папку Sustem volume .. хотя ее даже в скрытых файлах нет.
Это кусок какой-то файловой системы, видимо.

Добавлено after 18 minutes 22 seconds:
Попробуйте открыть карту в WinHex. Там выберите Tools->Open disk. И посмотрите, с чего начинается карта.
Вот как начинается рабочая SD-карта.
Изображение
Вложения
fat16.GIF
(19.33 КБ) 491 скачивание
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

da-nie писал(а):А попробуйте штатными средствами Windows посмотреть.
Смотрел. FAT16/512 показывает без проблем. Система Win10, иной, увы, нет...
da-nie писал(а):оно нифига не в нулевом секторе.
Возможно! Я в таких нюансах не разбираюсь. Напишите инструкцию, как правильно отформатировать флэшку.
da-nie писал(а):Это кусок какой-то файловой системы, видимо.
Это не кусок системы, а, опять же, причуды виндовс. Она создает на каждом накопителе такую скрытую папку для восставновления. Я вчера всю ночь читал как от этого избавится, но у меня ничего не срослось. Правда я не лез в реестр еще, как там советовали. Редактирование реестра - это уже на крайний случай.

Вот что у меня WinHex показывает
Изображение

Ну и напоследок, на скрине видно, что я закинул несколько tap файлов в корень, чтобы проверить хотя бы работу эмулятора. Но и тут меня поджидал странный сюрприз. Присчитывании магнитофон пропускает заголовочные данные и шпарит только основные. Я в Вашем исходнике ничего не менял, кроме переназначения портов. Единственное, пришлось перекопировать содержимое файла te.c в main.c. Иначе компиляция не работала.

Добавлено after 23 minutes 8 seconds:
На всякий случай, попробуйте, пожалуйста, сами откомпилировать под мои изменения. Я как бы не сомневаюсь в правильности создания проекта в AS7, но мало ли...
кнопки
Спойлер

Код: Выделить всё

#define BUTTON_UP_DDR      DDRD
#define BUTTON_UP_PORT     PORTD
#define BUTTON_UP_PIN      PIND
#define BUTTON_UP          1

#define BUTTON_CENTER_DDR  DDRD
#define BUTTON_CENTER_PORT PORTD
#define BUTTON_CENTER_PIN  PIND
#define BUTTON_CENTER      2

#define BUTTON_DOWN_DDR    DDRD
#define BUTTON_DOWN_PORT   PORTD
#define BUTTON_DOWN_PIN    PIND
#define BUTTON_DOWN        3

#define BUTTON_SELECT_DDR  DDRD
#define BUTTON_SELECT_PORT PORTD
#define BUTTON_SELECT_PIN  PIND
#define BUTTON_SELECT      4
Индикатор
Спойлер

Код: Выделить всё

#define WH1602_DB7_PORT	PORTC
#define WH1602_DB7_DDR	DDRC
#define WH1602_DB7			2

#define WH1602_DB6_PORT	PORTC
#define WH1602_DB6_DDR	DDRC
#define WH1602_DB6			3

#define WH1602_DB5_PORT	PORTC
#define WH1602_DB5_DDR	DDRC
#define WH1602_DB5			4

#define WH1602_DB4_PORT	PORTC
#define WH1602_DB4_DDR	DDRC
#define WH1602_DB4			5
Остальное без изменений относительно Вашего исходника на Github

Добавлено after 1 minute 13 seconds:
PS. тест памяти, однако, долгий...

Добавлено after 16 minutes 51 second:
Добавлю еще про глюк воспроизведения tap файлов. Я вроде упоминал, что файлы раза по два отображаются? Так вот! Это так. Причем первым идет именно файл с данными, а следующим по кругу заголовок. Но при воспроизведении заголовка данные не воспроизводятся и плеер зависает. Я не знаю с чем это связано. С картой или прошивкой?
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
da-nie
Говорящий с текстолитом
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.
Контактная информация:

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

Сообщение da-nie »

Возможно! Я в таких нюансах не разбираюсь. Напишите инструкцию, как правильно отформатировать флэшку.
Да ели б я знал. У меня XP и я ни на 7, ни на 10 не переходил - я вместо них на linux mint перешёл.
Она создает на каждом накопителе такую скрытую папку для восставновления
Вы же говорили, что в скрытых этой папки не было. Она, наверное, системная, а их показ у вас отключён. Она не помешает работе.
Вот что у меня WinHex показывает
Показывает начало вроде как правильно.
Ищутся байты 0xe9 или 0xeb. 0xeb у вас есть на своём месте. Дальше со смещением в 511 должен быть байт 0xAA и со смещением 510 байт 0x55. Вот этих байт, думаю, у вас там нет.

Вот из русскоязычной спецификации на FAT:
Нет ни чего специфичного в Секторе 0 диска FAT. Рассматривая сектор как массив байт, sector[510] содержит 0x55, а sector[511] содержит 0xAA.

ЗАМЕТКА: Во многих описаниях FAT ошибочно говорится, что сигнатура 0xAA55 расположена в “последних 2 байтах boot сектора”. Это верно, если — и только если — BPB_BytsPerSec равняется 512. Если BPB_BytsPerSec больше чем 512, смещение этой сигнатуры не изменяется (хотя допустимо, что и в конце сектора эта сигнатура тоже будет присутствовать).
Если же у вас там эти байты есть, тогда значит, чтение с карты у вас нестабильно (и конденсатор не помог). Попробуйте в этом случае снизить скорость spi в настройках в sd.c.

//настраиваем SP
SPCR=(0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(1<<SPR1)|(1<<SPR0);
SPSR=(0<<SPI2X);//удвоенная скорость SPI

Изображение

Вот как должно быть:

Изображение
На всякий случай, попробуйте, пожалуйста, сами откомпилировать под мои изменения.
Вот, попробуйте.Но вряд ли в этом дело.
тест памяти, однако, долгий...
Там просто алгоритм "в лоб".
Вложения
image2.GIF
(7.47 КБ) 461 скачивание
Firmware.zip
(139.2 КБ) 153 скачивания
image.GIF
(16.06 КБ) 445 скачиваний
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

da-nie писал(а):Она, наверное, системная
Да, системная. Неправильно выразился
da-nie писал(а):Вот этих байт, думаю, у вас там нет.
Все на месте
Изображение
da-nie писал(а):Попробуйте в этом случае снизить скорость spi в настройках в sd.c.
Куда уже ниже, если у Вас уже стоит скорость fclk/128? Её повысить, максимум, можно...
da-nie писал(а):Но вряд ли в этом дело.
Спасибо! То же самое, что и у меня
da-nie писал(а):ам просто алгоритм "в лоб".
Ну раз ошибок не выдала, то значит живая память :)
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
da-nie
Говорящий с текстолитом
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.
Контактная информация:

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

Сообщение da-nie »

Куда уже ниже, если у Вас уже стоит скорость fclk/128? Её повысить, максимум, можно...
Не обратил внимания. :) Должно быть, потому и понижал, что с какими-то не работало.

Раз у вас всё на месте, значит, считывание идёт с ошибками. Поэтому прошивка и не находит эти метки.

Попробуйте в fat.c вписать такое:

Код: Выделить всё

//----------------------------------------------------------------------------------------------------
//Инициализация FAT
//----------------------------------------------------------------------------------------------------
void FAT_Init(void)
{
 WH1602_SetTextUpLine("");
 WH1602_SetTextDownLine("");

 LastReadSector=0xffffffffUL;
 //ищем FAT
 FATOffset=0; 

 uint8_t a=GetByte(0); 
 uint8_t b=GetByte(510); 
 uint8_t c=GetByte(511); 

 char str[16];
 sprintf(str,"%x %x %x",a,b,c);
 WH1602_SetTextDownLine(str);
 _delay_ms(10000);
Какие байты выводятся?
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

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

Сообщение serg_svd »

da-nie писал(а):Какие байты выводятся?
0 55 aa
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
da-nie
Говорящий с текстолитом
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.
Контактная информация:

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

Сообщение da-nie »

0
А вот не должно быть 0. У вас там eb. Есть какая-то проблема со считыванием байт.А uint8_t a=GetByte(1); что выдаёт? С какого байта не нули?

Может, стоит попробовать в sd.c заменить функцию на вот такую:

Код: Выделить всё

//----------------------------------------------------------------------------------------------------
//считать блок в 512 байт в память
//----------------------------------------------------------------------------------------------------
bool SD_ReadBlock(uint32_t BlockAddr,uint8_t *Addr)
{
 if (SDType!=SD_TYPE_SD_V2_HC) BlockAddr<<=9;//умножаем на 512 для старых карт памяти
 //даём команду чтения блока
 uint8_t a1=(uint8_t)((BlockAddr>>24)&0xff);
 uint8_t a2=(uint8_t)((BlockAddr>>16)&0xff);
 uint8_t a3=(uint8_t)((BlockAddr>>8)&0xff);
 uint8_t a4=(uint8_t)(BlockAddr&0xff);
 uint8_t answer[ANSWER_R1_SIZE];
 bool ret=SD_SendCommand(CMD17,a4,a3,a2,a1,ANSWER_R1_SIZE,answer);//посылаем CMD17
 if (ret==false || answer[0]!=0) return(false);//ошибка команды
 SD_TransmitData(0xff);//байтовый промежуток
 //ждём начало поступления данных
 uint16_t n;
 for(n=0;n<65535;n++)
 {
  uint8_t res=SD_TransmitData(0xff);
  if (res==0xfe) break;//маркер получен
  _delay_us(10);
 }
 if (n==65535) return(false);//маркер начала данных не получен
 for(n=0;n<512;n++,Addr++)
 {
  _delay_us(100);
  *Addr=SD_TransmitData(0xff);//читаем байт с SD-карты
 }
 //считываем CRC
 SD_TransmitData(0xff);
 SD_TransmitData(0xff); 
 return(true);
}
Я _delay_us(100); добавил в цикл приёма данных. Может быть, карта почему-то не успевает.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Ответить

Вернуться в «Цифровая техника»