Просмотр полной версии : "Магнитофон" для Спека
Шутки шутками, а проект практически завершён и есть ver2.1 "магнитофона". Ниже ссылки для скачивания схемы и прошивок для нескольких типов контроллеров
Это только первый пост данной темы! Читаем дальше :)
В и-нете куча файлов *.tzx и *.tap, как и загружать на Спекки без магнитофона?
Есть варианты:
1) Через звуковую карту ПЦ;
2) Через выходной порт ПЦ (допустим ЛПТ) с НЧ фильтром на выходе;
3) Через звуковые дорожки СDROM, можно с использованием wav, mp3;
4) С помощью следующего девайса...
Аппаратная часть:
1) Флэш-карта (допустим 128Мб)
2) ATMega16(162)
3) LED индикатор [8888]
4) Несколько кнопок, включая кнопу "Воспр."
5) Обвеска
Вот ссылка на интерфейс пользователя: сюда (http://zx.pk.ru/showpost.php?p=10845&postcount=50)
Вот как работать с режимом RECORD: сюда (http://zx.pk.ru/showthread.php?p=39827&highlight=%E7%E0%EF%E8%F1%FC#post39827)
Фотографии
Вот тут (http://zx.pk.ru/attachment.php?attachmentid=1723&d=1127402888) фотографии плэйера v.1.XX (ATMega8, плэйер больше мной не поддерживается) и "магнитофона" v.2.XX (ATMega162, можно скачать прошивку и схему см.внизу).
А вот тут (http://zx.pk.ru/attachment.php?attachmentid=5063&d=1176990490) фотографии "магнитофона" v.3.XX. Это коммерческая версия доступная только под заказ. Прошивка доступна не будет, хотя есть возможность обновления FIRMWARE (можно будет скачать позже) через SD/MMC карту.
В числе прочих функций и фич V.3.XX:
- Буферизация при работе с файлами и поддержка фрагментированых файлов
- ЖКИ 16*2
- Заливка фирмваре через SD/MMC карту
- Абсолютно новый юзер интерфейс с навигацией по файлам
- Питание от "пальчиковой" батарейки (разряд до 0,8В)
- Снижена частота кварца до 7МГц "с копейками", чтобы работать с картой напрямую без преобразователя уровней на 3.3<->5
- Поддержка не только TZX, но теперь и TAP ( как это не странно )
- Красивая PCB с паяльной маской
Users Manual (http://zx.pk.ru/showpost.php?p=89614&postcount=323)
FirmWare v.3.31f (http://zx.pk.ru/showpost.php?p=92339&postcount=326)
Файлы для сборки v.2.XX
Файлы выложены в порядке их появления на свет.
Плюсы конечно очевидны. Надежность считывания практически абсолютная будет.
Но надо сперва прикинуть стоимость такого девайса. Судя по всему ему еще нужен блок питания.
Ну и конечно востребованность.
Голосовалку я так и не научился делать, господа сделайте ктонить плиз.
2) Клон 8051 (которые я уважаю и уже не забуду, это точно) допустим AT89C4051 - для удешевления конструкции или более дорогой с USB.
Есть исчо фанаты? Какие за и против?
Я попробовал поработать с карточками SD и убедился, что для работы с ней простых контроллеров недостаточно.
Основная проблема - это недостаточный обьем внутреннего ОЗУ для поддержки стандартной файловой
системы с FAT12/FAT16.
Вполне комфортно можно работать только начиная например с ATMEGA64 (4 кб ОЗУ).
А для работы с USB тем более не подойдут простые контроллеры, поддерживающие только SLAVE режим.
CityAceE
11.03.2005, 11:57
Есть варианты:
1) Через звуковую карту ПЦ;
2) Через выходной порт ПЦ (допустим ЛПТ) с НЧ фильтром на выходе;
3) Через звуковые дорожки СDROM, можно с использованием wav, mp3;
4) С помощью следующего девайса...
5) C помощью программы для РЕАЛЬНОГО Спектрума записать TZX на магнитофон и загрузить программу с ленты :)
Я попробовал поработать с карточками SD и убедился, что для работы с ней простых контроллеров недостаточно.
Основная проблема - это недостаточный обьем внутреннего ОЗУ для поддержки стандартной файловой
системы с FAT12/FAT16.
Вполне комфортно можно работать только начиная например с ATMEGA64 (4 кб ОЗУ).
А для работы с USB тем более не подойдут простые контроллеры, поддерживающие только SLAVE режим.
Камиль тут ради дешевизны можно не привязываться к ФАТу а сделать что нить свое попроще.
Насчет УСБ имелось ввиду подключение самого девайса к ПЦ, чтобы заливать tzx. А в этом случае достаточно какогонить FT232BM и простого контроллера...
Т.е. подразумевалось что подключение идет не напрямую флашкарты к ПЦ, а через девайс (микроконтроллер).
А вот действительно расширить девайс для считывания обратно с ZX - это интересно :wink: .
Камиль тут ради дешевизны можно не привязываться к ФАТу а сделать что нить свое попроще.Даже в этом случае 128 байт явно недостаточно, тем более что как оказалось не все карточки поддерживают побайтный обмен. Мне попались PQI 64Mb, работающие с блоками по 64 байта.
Насчет УСБ имелось ввиду подключение самого девайса к ПЦ, чтобы заливать tzx. А в этом случае достаточно какогонить FT232BM и простого контроллера...
Не оптимально поскольку стоимость FT232 значительно превышает стоимость "простого контроллера".
Для начала, я для собственного удовольствия соберу опытный образец на том, что у меня уже есть и работает:
1) AT89C51RD2 + EEPROM + клава + 4 * семисегментника
2) Флэшка
Всё питание от 5 вольт.
Меня интересует, формат представления данных tzx и tap, а также метод двухфазного кодирования звуковой частотой. Где есть доки?
Не оптимально поскольку стоимость FT232 значительно превышает стоимость "простого контроллера".
Я считаю, что модификация с УСБ довольно дорогая. А 115200 через УАРТ - это не так уж мало и насколько я помню даже больше, чем скорость чтения дисководом Спекка с нетурбированым контроллером.
Не оптимально поскольку стоимость FT232 значительно превышает стоимость "простого контроллера".
Причем совершенно неоправданно. Дилеры капусту рубят :smile: .
А контроллеры с УСБ кстати тоже недешевые. Хотя например кардреадеры стоят копейки (а там и контроллер и УСБ).
Для начала, я для собственного удовольствия соберу опытный образец на том, что у меня уже есть и работает:
1) AT89C51RD2 + EEPROM + клава + 4 * семисегментника
2) Флэшка
Всё питание от 5 вольт.
Меня интересует, формат представления данных tzx и tap, а также метод двухфазного кодирования звуковой частотой. Где есть доки?
Доки в ПЗУ ZX-спектрума и во всяких турбозагрузчиках :wink: .
Разберись с начала с чтением флешки. Мне чтото кажется что недостаточно вышеприведенного контроллера для чтения флешки.
Для начала, я для собственного удовольствия соберу опытный образец на том, что у меня уже есть и работает:
2) Флэшка Тип флэшки?
Гы, дык там SPI <20 МГц Slave, что тут сложного?
Я говорю про ММС т.к. с ними работаю.
Меня интересует, формат представления данных tzx и tap, а также метод двухфазного кодирования звуковой частотой. Где есть доки?
А что ты собрался загружать?
Полезных/интересных программ которых нет под ТР-Дос можно по пальцам пересчитать.
Уж лучшебы кто-нибудь наконец собрал портативный плеер AY музыки с памятью хотябы мегов на 16, можно даже без индикатора.
Ну это полезно хотя бы для того чтобы отлаживать проги для забугорников на реале. Хачить действительно лучше на анреалах.
Ну это полезно хотя бы для того чтобы отлаживать проги для забугорников на реале.Для этого нет необходимости разрабатывать такое устройство. Можно грузить прямо с IBM-ки.
Для этого нет необходимости разрабатывать такое устройство. Можно грузить прямо с IBM-ки.
Ну она не у всех есть. Хотя наверно ее стоимость с помойки будет дешевле чем себестоимость сабжа.
Меня интересует, формат представления данных tzx и tap, а также метод двухфазного кодирования звуковой частотой. Где есть доки?
См. здесь по TZX:
http://www.worldofspectrum.org/TZXformat.html
к чему весь сыр-бор, если можно купить сидюк за 10$ и писать на болванки тем более ковертеры из tap/tzx есть.
к чему весь сыр-бор, если можно купить сидюк за 10$ и писать на болванки тем более ковертеры из tap/tzx есть.
74 минуты или в МП3 писать? :-)
Докладываю результаты работы над девайсом за выходные :-) :
1) MMC подключена к 51RD2 по линиям SPI, сигналы 5В и 3В согласнованы с помощью диодов поттянутых к выходу стабилизатора на 3,3В, от которого питается ММС.
2) Был получен отклик ММС на команду инициализации
3) Написаны функции для инициализации (сброс, настройка режимов), чтения сектора и записи сектора.
4) Расчёт задержек показал, что чтение и запись можно вести "на лету" на скорости 115200 бод, требовалась практическое подтверждние
5) На практике получилось, что I/O можно вести "на лету", что также открывает путь к использованию дешёвых микроконтроллеров ака 4051 с небольшим объёмом ОЗУ (не нужно буферизировать сектор в 512 байт!)
План дальнеёших работ:
1) Разработка простенькой БД или ФАТ (кому как нравиться) ака TR-DOS, без дублирования таблицы (слепок флэшки будет храниться на ПЦ на всякий случай) . Не охота с FAT16 возиться...
2) Реализация простого протокола обмена по UART с использованием команд: чтение сектора, запись сектора, инициализация
3) Написание программы верхнего уровня, которой будет доступен весь объём ММС, с функциями записи, чтения, verify + туева хуча всяких фишек
4) Рассмотрение форматов tzx и tap (спасибо Caro за ссылку) и написание функции микроконтроллера для поиска и декодирования этих файлов.
Все, кто может помочь дельным советом, присоединяйтесь!
Кто захочет, может взять на себя написание программы верхнего уровня или предложения...
74 минуты или в МП3 писать? :-)
сравни: cd-da при стоимости дисков 7рублей и стоимость твоего девайса.
про mp3 вообще молчу..
dvs: respect!
но все таки просьба, сделать чтение fat16 чтобы в других ридерах карточку можно было записать новой музой.
сравни: cd-da при стоимости дисков 7рублей и стоимость твоего девайса.
про mp3 вообще молчу..
Согласен с jtn, но отговаривать/разубеждать не буду, особенно если сам процесс по душе, лишь замечу:
Идеального качества загрузки не будет, поскольку «читалки» во многих клонах разные и далеко не идеальные, плюс разъемы. Вспомните про причины появления Tape Tester в ZX Spectrum 128.
От сбоев при загрузке, типа «холодильник» избавиться не удастся.
Устройство цифро-аналоговое и потребуется достаточно качественный блок питания с трансформатором (импульсник от мобильника может не подойти).
Без корпуса устройство быстро «закончится», поскольку внешнее и малогабаритное.
Магнитофоном это не будет, ибо сохраниться (SAVE “”) на такой девайс, насколько я понял нельзя.
Загрузка с ленты была чем-то сродни мазохизму, особенно на длинных играх для 128К или с дозагрузками (вспомнил R-Type), поэтому народ с огромным облегчением переходил на дисководы…
Будет ли на «Магнитофоне» перемотка вперед – назад и счетчик?
Если человеку хочется, то делать надо, а там видно будет. Всяко знания новые приобретет.
Если человеку хочется, то делать надо, а там видно будет. Всяко знания новые приобретет.
это бесспорно, однако очень узкое применение при достаточно больших затратах (хотя бы теже конвертеры из tzx, tap писать придется), поэтому сомневаюсь, что кто-то еще заинтересуется
CheburatoR
14.03.2005, 02:26
у меня тоже похожая идея, но основа будет заложена уже в железе спектрума - дополнительный стартовый ROM для "перемотки" и выбора файла TAP, TZX (или Z80), потом переключение на ROM 48/128 и загрузка (и выгрузка), обмен данных через специальный порт, тут потребуется изменения стандартных загрузчиков.
Z80 загрузка тоже подобным образом, а сохранение Z80 через NMI. Тут я придумал кое какие хитрости, так как загрузка и сохранение Z80 без изменения данных в ОЗУ это сложно реализовать.
Сам девайс который прицепляется к порту принципе любой - у меня идея реализовать на 8051 и диск с FAT16 или FAT32
но все таки просьба, сделать чтение fat16 чтобы в других ридерах карточку можно было записать новой музой.
Сам девайс который прицепляется к порту принципе любой - у меня идея реализовать на 8051 и диск с FAT16 или FAT32
Согласен, что лучше хорошенько попариться и реализовать стандарт FAT16.
Идеального качества загрузки не будет, поскольку «читалки» во многих клонах разные и далеко не идеальные, плюс разъемы. Вспомните про причины появления Tape Tester в ZX Spectrum 128.
Я вобще-то в первую очередь на АТМ ориентируюся, т.к. люди развивают эту платформу. А частоты и задержки можно будет подстраивать и хранить профили для каждого Спека.
От сбоев при загрузке, типа «холодильник» избавиться не удастся.
Это добавит романтики и воспоминаний :-)
Устройство цифро-аналоговое и потребуется достаточно качественный блок питания с трансформатором (импульсник от мобильника может не подойти)
Если НЧ фильтр - это одноразрядный ЦАП то ок. А вобще проблема с питанием - не проблема, на плате ЕНка и БП в конце концов можно в любом киоске купить на 8-12В.
Без корпуса устройство быстро «закончится», поскольку внешнее и малогабаритное.
Может уже кто на eBay лот выложил признавайтесь!!! :-) :-) :-)
Магнитофоном это не будет, ибо сохраниться (SAVE “”) на такой девайс, насколько я понял нельзя
Совсем забыл... Но это в перспективе, в вобще - ГЛАВНОЕ С ЧЕГО-ТО НАЧАТЬ
Кстати говоря возможности отгрузки - это супер козырь перед сторонниками CD :-)
Как я уже говорил, что главное с чего-то начать и вот новые идеи:
1) отказаться от UART и перейти на LPT (Centronix), т.е. сделать устройство ака кард-ридер-райтер, но гораздо дешевле, т.к. в состав может входить: разъём с кожухом DB25, микросхему буфера с открытым коллектором для согласования уровней, стабилизатор и ММС. Реализовать FAT16 в ПО верхнего уровня. Плюсы:
а) Возможность подключения к Спекки и к ПЦ (верхушки разные разумеется).
б) Скорость I/O гораздо выше.
в) Создав папку ZX в корневом каталоге дать возможность использовать MMC для хранения других данных.
г) Корпус уже есть ;-)
Ведётся активный поиск уже готового софта для LPT и MMC...
2) На "магнитофоне" вывести DB25 и подключать "картридж" к нему, придётся реализовать поддержку ФАТ16.
2 CheburatoR
Ты забываешь про туеву хучу прог с нестандартнами загрузчиками. Предложение: совместная работа над одной идеей, а то в одиночку долго париться.
Терзайте мой пост :-), но мне кажется, что задумка очень интересная!!!
Вот ссылка: http://www.cc5x.de/MMC/ , понимая только код, сделал вывод, что человек сделал то-же самое на PIC, что у меня на текущем этапе.
Вот тут: http://www.corvis.ru/departments/?Action=OpenProduct&Product_ID=10348&DepID=120&ClassID=400 LPT card reader, но цена!?!? Что там столько стоит, золота насовали что-ли :-)
Сегодня, получив доступ к LPT из XP, узнал максимальную частоту, с которой может работать LPT при использовании WinIO функций, она оказалась всего 33333Гц, что гораздо ниже, чем 115200 при работе через COM порт.
Сегодня, получив доступ к LPT из XP, узнал максимальную частоту, с которой может работать LPT при использовании WinIO функций, она оказалась всего 33333Гц, что гораздо ниже, чем 115200 при работе через COM порт.
Умножь частоту LPT на 8 (по разрядности) так будет корректней сравнивать.
она оказалась всего 33333Гц
Тут ошибочка вышла, оказалось 333КГц, что не так уж мало. При подключении к LPT оказалось, что ток нуля у BUSY около 3ма, поэтому диодами дело не ограничилось и пришлось переделать всю схему подключения: стабилизатор 3.3В , 7417, MMC и весь кард рид-райтер :)
На размышления об увеличении скорости навёл Роман своим постом о 8 битах, но ставить сдвиговыи регистр, генератор и счётчик или заменяющий всё это микроконтроллер - значит усложнять схему и увеличивать стоимость.
Распиновка текущего варианта:
LPT-----------MMC
D0----------->CLK_BUF
D1---------->MOSI_BUF
D2------------>CS_BUF
BUSY<-------MISO_BUF
GND-----------GND
Из Винды реальная скорость I/O получилась 15кб/с, из ДОСа можно выжать раза в 2-3 больше. На Спекки не пробовал. Теперь создавать наработки для работы с FAT гораздо проще...
Тут ошибочка вышла, оказалось 333КГц, что не так уж мало. При подключении к LPT оказалось, что ток нуля у BUSY около 3ма, поэтому диодами дело не ограничилось и пришлось переделать всю схему подключения: стабилизатор 3.3В , 7417, MMC и весь кард рид-райтер :)
Поставь какой нить самый дешевый AVR или чтот там у тебя есть и работай через все 8 разрядов с трансляцией на этом микроконтроллере и ничего усложнять не придется. А скорость значительно будет выше и извращаться не придется!
Согласен, идея отличная, тока я до сих пор ещё не начинал извращаться :)
Согласен, идея отличная, тока я до сих пор ещё не начинал извращаться :)
CLK через шину данных = извращение :wink: .
Докладываю по текущему состоянию дел :-)
1) Освоен в достаточной мере формат хранения данных: MBR + Partition Table Entrys + Partition Boot Record + FAT16 + Root Directory. С помощью написаного софта удалось отформатить ММС(FAT16 Ext, 4 sec per cluster) и протестить её в Сименс SX1, раздел с карты успешно распознаётся, ведётся набивка кода для реализации основных файловых функций (пока только FAT16 без длинных имён).
2) Параллельно ведётся работа над железом: микроконтроллер будет с аппаратным SPI ( предположительно ATMega8 ). "Львиная" доля кода для микроконтроллера будет взята из ПО верхнего уровня, т.к. всё-таки ANSI C стандарт.
PS: выяснилось, что работа с картой SD аналогична работе с MMC.
Дальше думаю надо приступать к озвучке tzx-го потока.
Через LPT получилось 106,6Кб/сек (ATmega8 x 16Mhz ) , пришлось "попариться". С железом хватит уже возиться, я думаю, пора прогу писать.
С вводом/выводом остановился на варианте: LPT (в режиме EPP 1.9), этот режим чрезвычайно прост для реализации на Спеке на той-же ВВ55.
В итоге выжал примерно 150Кбайт/сек, но суть не в этом, а в том что наряду с ФАТ16 уже второй стандарт реализован!
По прежнему продолжаю поиск исходников озвучки потока TZX, скачал PlayTZX by Tomaz Kac, ковыряю...
С вводом/выводом остановился на варианте: LPT (в режиме EPP 1.9), этот режим чрезвычайно прост для реализации на Спеке на той-же ВВ55.
В итоге выжал примерно 150Кбайт/сек, но суть не в этом, а в том что наряду с ФАТ16 уже второй стандарт реализован!
По прежнему продолжаю поиск исходников озвучки потока TZX, скачал PlayTZX by Tomaz Kac, ковыряю...
На спеке, вроде ты по магнитафонному собирался подключать :)
Есть какието дешевые отечественные ЖКИ матрицы символьные.
И еще на спеке можно сделать порт вывода на YM или АУ38910, обычно портовые ноги там не используются и висят в воздухе, приделайте шлейф и выведите наружу.
На спеке, вроде ты по магнитафонному собирался подключать :)
Так и есть!!! Только писать парсинг (разборку) файла TZX "в ломы" поэтому ищу готовое, что можно с минимальными доработками всунуть в Мегу и дёргать битом.
Итак, докладываю...
1) Поддержка TZX реализована в части тэга 0x10 (это для начала). Очень помогают исходники от Tomaz Kac, придерживаюсь его идеологии.
2) Загрузил во флэшку BOULDER_DASH и попробовал воспроизвести на
пьезо-биппере, подключенном к выводу ATMega... И что вы думаете?!?!? Запищал пилот-тон!!! А потом остальные данные стали попискивать. После этого понял, что пора цеплять аудио-кабель. Загрузил на ПК Win Spectrum Loader и попытался грузануть BOULDER. Не тут-то было... Из шести дата блоков прошёл только один :-((( Начал разбираться... При воспроизведении потока едениц (ровный писк) периодически проскакивали короткие-щелчки. Это был результат того, что флэшка не успевала выходить на режим чтения нового сектора. Что делать??? Буферизацию??? Это тот ещё гемор... Было решено переключить флэшку из режима Single Block Read в Multiple Block Read, что позволяет читать сектора один за другим, но накладывает ограничение на то, что в ФАТ файл должен занимать смежные кластеры ( я думаю, что сильно не помешает, в конце концов задача каждого дефрагера разместить файл на смежных секторах ). После этого блоки стали грузиться и CRC совпадать, но при многоповторном воспроизведении стало ясно, что загрузка не такая стабильная, как хотелось бы. Стал размышлять над выходной цепью, у меня была сделана как в ATM Turbo (на выводе 555ТМ 9 висит 10 кОм и усё). Методом околонаучного тыка сваял следующее: выход 155ЛП8 (повторитель с ОК, на входе сигнал от меги) подтянул 5 кОм к +5В, и последовательно с выходом повесил 22нф. В результате уже час гоняю Болдера и ни одного сбоя. Кстати говоря, при первом варианте на осцилографе почти прямоугольные импульсы, а во втором варианте фронты и спады более гладкие, как с магнитофонной ленты.
Need help, чтобы мою околонаучную выходную схему сделать научной :-)
Ещё вопрос к Камилю: как правильно реализовать Reset у меги??? Я на 51х вешал RC цепочку, у меги прочитал, что там есть ресет при павер апе, но у меня он работает не стабильно, я после этого вдобавок BODEN сделал, после этого ресет стал надёжным.
Нужно!!! :
1) Варианты ЖКИ и светодиодных индикаторов, которые не сильно увеличивают стоимость девайса.
2) Варианты юзер интерфейса, чтоб с минимумом кнопок осуществлять навигацию по пространству tzx файлов, если ставить три или четыре семисегментника, то получается 999(9) ячеек (что вроде бы хватает, одна ячейка - один tzx) . В этом случае, после выбора нужной ячейки (№ ячейки = имя файла) происходит воспроизведение с первого блока и индикатор переключается в режим индикации номера блока, с возможностью прокрутки блоков (чтобы можно было выбрать нужный уровень игры, например).
3) Програмер ( програмер-спектрумист-фанатик :-) ) на IAR C, чтоб дела быстрее шли, всё-таки магнитофон - это не плеер, надо ещё и писать в tzx'е.
Ещё вопрос к Камилю: как правильно реализовать Reset у меги??? Я на 51х вешал RC цепочку, у меги прочитал, что там есть ресет при павер апе, но у меня он работает не стабильно, я после этого вдобавок BODEN сделал, после этого ресет стал надёжным.Резистор 10 Ком на +5V и даже при выключенном BODEN работает без проблем.
Может с питанием проблема?
Ок спасибо. Питание вроде стандартное 7805 + 0,1 uF + 200 uF. Сделаю 10 кОм.
Ещё хочу добавить к сообщению "Нужно", нужны tzx снятые с защищённых лент, чтобы протестировать. Cкачал несколько новых tzx, а там обычные теги, т.е. не используются все навороты формата tzx.
Питание вроде стандартное 7805 + 0,1 uF + 200 uF. Сделаю 10 кОм.200 uF на выходе я бы ставить не стал, вполне достаточно от 10 до 22 uF.
2 Terazini
Ок. Вечером попробую.
Ещё провёл ряд экспирементов на стабильность системы: увеличил скорость воспроизведения на 25%, все блоки стали распознаваться как TURBO и также уверенно считывались, что я считаю гарантирует возможность работы с турбироваными нестандартными загрузчиками.
2 caro
У меня на этом же канале питания ещё прожорливые К155 висят :-) Остались от прежних времён, надо использовать в дело, поэтому и повесил 200.
По-прежнему жду предложений (см. несколько постов назад).
DVS: респект!!! сорец PlayTZX думаю ты портировать сможешь, там все блоки есть. также есть еще Taper, он вроде тоже с сорцами.
http://www.worldofspectrum.org/soundload.html
по поводу интерфейса. четырех кнопок хватит. режим, вперед, назад, игра/пауза.
при запуске в момент инициализации черточки. после инита переходим на последний проигрываемый файл (или нулевой если не запомнить). номер мигает.
вперед назад - прокрутка по файлам.
если нажать игра, входим в TZX, число больше не мигает. (выход по кнопке режима). если нажать игра еще раз, горит номер блока в TZX. и можно забацать какую то анимацию что мол играет.
в режиме проигрывания вперед/назад - перемотка, игра - пауза/игра, режим - остановка и выход в список TZX.
в списке TZX нажатие режим переглючает (хехе) в режим записи. записывать предлагаю с номера 999 вниз.
в режиме паузы, нажатие режим переключает в режим дописи (если такое возможно) к файлу.
ну а что еще вы хотели на цифровом дисплее и 4х кнопках? ;)
Ух-ты, как складно получилось, мне нравится :-)
сорец PlayTZX
Я его и разбираю, только как выяснилось есть разные авторы, я взял исходники by Tomaz Kac.
Индикатор хочу найти, чтобы I2C или SPI драйвер был, ну и дешёвый конечно около 100 руб, а то не охота динамической индикацией проц нагружать.
Ещё надо прикрутить индикацию событий:
1) MMC I/O ERROR
2) TZX ERROR
А если в tzx встретили тэг: STOP TAPE, то просто оставить индикацию номера блока или ещё добавить мигание какой-нить десятичной точки?
Я кстати Taper поковырял... да уж... куча наворотов, ещё буферизация всякая, в общем это крутая вещь.
Прицепил индикатор 4х8 (четыре восмерки) CC56-12EWA стоимостью 1$. Индикацию обновляю динамически во время pulse интервалов и пауз, для усложнения турбировал выгрузку на 30%... полёт нормальный. С опросом 4-х клавиш (выборка клавиши и выборка сегмента происходит одним сигналом) думаю проблем не будет, но появилось одно НО, которое заключается в том, что во время записи на динамическую индикацию отвлекаться категорически запрещено и она будет статической т.е. все 4 сегмента показывать будут одно и тоже пока придумал четыре десятичных точки :-) Выход из записи нажатием любой клавиши т.к. в статике будут выбраны все 4-ре.
Вроде нормально на 1$ индикаторе :-)
Выкладываю на обсуждение часть реализованого User Interface'a:
Итак, вывод: "8888" четыре сегмента, ввод: четыре кнопки - как предложил random.
"----" - во время инита, затем "F N", где N-номер файла (три сегмента), кнопками "+" и "-" меняем N в диапазоне 0-999, причём при долговременном нажатии скорость прокрутки растёт пропорционально времени!!!
При нажатии "Play", если ошибка обмена с MMC выводим "C_Er" - Card error держим 1,5 сек затем "F N",
иначе парсим tzx и в случае неудачи (неподдерживаемый тэг) выводим "F_Er" - file error в течении 1,5 сек затем "F N",
иначе "С M", M-число блоков в файле в течении 1,5 сек, затем "b L", где L-номер блока, кнопками "+" и "-" выбираем, при нажатии кнопки "Mode" выход в "F N", при нажатии "Play" сравнивается L c M, если L+1>M (L с нуля), то "b_Er" - неверный блок,
иначе появляется "P L" и начинается воспроизведение начиная с L (L изменяется) , выход из этого режима - повторное нажатие "Play" и выходим в "b L",
когда весь файл воспроизведён выходим в "F N"
Выкладываю на обсуждение часть реализованого User Interface'a:
Итак, вывод: "8888" четыре сегмента, ввод: четыре кнопки - как предложил random.
"----" - во время инита, затем "F N", где N-номер файла (три сегмента), кнопками "+" и "-" меняем N в диапазоне 0-999, причём при долговременном нажатии скорость прокрутки растёт пропорционально времени!!!
При нажатии "Play", если ошибка обмена с MMC выводим "C_Er" - Card error держим 1,5 сек затем "F N",
иначе парсим tzx и в случае неудачи (неподдерживаемый тэг) выводим "F_Er" - file error в течении 1,5 сек затем "F N",
иначе "С M", M-число блоков в файле в течении 1,5 сек, затем "b L", где L-номер блока, кнопками "+" и "-" выбираем, при нажатии кнопки "Mode" выход в "F N", при нажатии "Play" сравнивается L c M, если L+1>M (L с нуля), то "b_Er" - неверный блок,
иначе появляется "P L" и начинается воспроизведение начиная с L (L изменяется) , выход из этого режима - повторное нажатие "Play" и выходим в "b L",
когда весь файл воспроизведён выходим в "F N"
Ужас... к чему приводит экономия на спичках. Нет бы MT-16s2 или 16s1 - соответственно 16x2 или 16x1 буковок поставить... Заодно и нет проблем с динамической индикацией - оно само.
Ужас... к чему приводит экономия на спичках. Нет бы MT-16s2 или 16s1 - соответственно 16x2 или 16x1 буковок поставить... Заодно и нет проблем с динамической индикацией - оно само.
Увы для спектрумистов устройство дороже 300руб это уже трагедия! :-)
Увы для спектрумистов устройство дороже 300руб это уже трагедия! :-)
МЭЛТовский 10x1 буковок в терраэлектронике по 180р лежит! =)
Ну вот приехали, здрасьте, а ведь раньше мафон с механическим счётчиком считался - супер :-)))
Специально на ЗАКАЗ могу прикрутить и алфавитно-цифровой и графический и даже TFT с сенсорной матрицей!
если цена вопроса всего 180 рублей, я думаю что имеет смысл получить более удобный интерфейс. согласен, что интерфейс сложно сделать удобным на 3 цифирках ;)
Специально на ЗАКАЗ могу прикрутить и алфавитно-цифровой и графический и даже TFT с сенсорной матрицей!
Не слушай никого! Делай как хочется!
Как показывает практика всем нужна и кофемолка и ДВД плеер в одном лице а когда доходит до реального дела , тут сразу начинается хит "уууу как дорого ....".
Так чт не слушай никого и делай так как хочется тебе, мой дружеский совет :wink: .
Ну вот приехали, здрасьте, а ведь раньше мафон с механическим счётчиком считался - супер :-)))
DVS, это не смешно =)
Вот сам подумай, что удобнее, приятнее и прямее - выводить кракозябры на 4 циферках LED обо всех событиях, или нормальные месаги на ЛСД-дисплее нормальными буквами? =)
В последнем случае заодно и худо-бедно по файлсистеме бразвить можно...
Если серьёзно, то действительно в АЦ ЖКИ нет особой надобности т.к. с точки зрения юзера всё просто как орех, выбираешь ячейку, а затем либо в неё пишешь, либо читаешь ( а имя файла на монике :-) ) , а то что програмить его легко, так я знаю (лежит рядом 12х2) . Навигацию по каталогам через LPT кабель, либо ЮСБ ридер.
Кроме, того светодиодный индикатор очень хорошо вписывается с точки зрения опроса 4-х кнопок, т.к. при подсветке сегмента (катод в ноль) сканируется соответствующая кнопка, а на ЖКИ надо было снимать CS, переключать 4-е линиии на вход и сканить кнопки ( т.е. кнопки остаются динамически-опрашиваемы ), а потом возвращать линии обратно и вести обмен с ЖКИ (число ног ограничено всё-таки).
Если серьёзно, то действительно в АЦ ЖКИ нет особой надобности т.к. с точки зрения юзера всё просто как орех, выбираешь ячейку, а затем либо в неё пишешь, либо читаешь ( а имя файла на монике :-) ) ,
Я сейчас вот зашёл в свой каталог с ТЗХами, знаешь, сколько там файлов? Почти 6000, и занимают они мегов 300 (распакованные). Вот представь, взял я флешку на полгига, влил туда это, и что я дальше делаю на 4 семисегментиках? =) В случае буковок можно хоть как-то выбрать нужный файл (по первой букве, по второй, етц.).
Навигацию по каталогам через LPT кабель, либо ЮСБ ридер.
А по 6 тысячам файлов? =)
Кроме, того светодиодный индикатор очень хорошо вписывается с точки зрения опроса 4-х кнопок, т.к. при подсветке сегмента (катод в ноль) сканируется соответствующая кнопка, а на ЖКИ надо было снимать CS, переключать 4-е линиии на вход и сканить кнопки ( т.е. кнопки остаются динамически-опрашиваемы ), а потом возвращать линии обратно и вести обмен с ЖКИ (число ног ограничено всё-таки).
А сколько ног на ЛЕД убивается? 4+7? А на ЛСД всего 7. И даже пожертвовать ещё одну ногу на опрос 4 кнопок не жалко (если не удастся в его 7 вписаться).
И вообще, если ты для себя делаешь, то да, делай как нравится - Роман прав! :) Но если не только для себя, пожалуйста, подумай и о людях! =)
В общем пока останемся при своих имхах :-)
Я ещё маненько добавлю:
1) Получается, что даже если поставить индикатор за 180 руб, то это около 40-50% от себестоимости всего девайса ( ММС не считаем... а что с магнитофоном и кассеты уже в комплекте идут??? :-))) )
2) Не представляю, как можно будет среди 6000 файлов найти нужный по имени... Тогда уже и клаву надо как у сотового телефона ставить, с которой можно хоть как-то символы вводить, а всё это опять же в тугрики упирается.
3) В общем я конечно понимаю, что в и-нете очень много софта в формате tzx, но имхо надо записывать только то, что будешь узать, а 1000 файлов более, чем достаточно, на крайний случай можно купить несколько ММС и хранить на них всё, что ЕСТЬ.
В общем предлагаю альтернативу, которая может стать логическим продолжением: использовать ЮАРТ для связью с расширеной системой вв/выв (ЖКИ + клава). А эту расширеную систему реализовать на отдельном контроллере в отдельном корпусе.
Но только, имхо, компьютер у нас уже есть :-) не стоит делать ещё один.
Но если не только для себя, пожалуйста, подумай и о людях! =)
Дык тема и сделана для людей, все имеют возможность высказаться.
И ещё хочу добавить, что не получиться моноблок, который всех устроит. Всех устроит только модульная структура, а точнее возможность скомпановать самому, что хочется.
2) Не представляю, как можно будет среди 6000 файлов найти нужный по имени... Тогда уже и клаву надо как у сотового телефона ставить, с которой можно хоть как-то символы вводить, а всё это опять же в тугрики упирается.
В караоке тоже песен дофига, но выбор идет по четырем цифрам! Если надо - можно сделать распечатку и выбирать по номеру :-)
В караоке тоже песен дофига, но выбор идет по четырем цифрам! Если надо - можно сделать распечатку и выбирать по номеру :-)
Тогда уж ещё проще - мышкой! По даблклику, и в звуковуху жужжит... =)
использовать сам ZX для навигации. Ничего нового я не придумал - вспомните Boot в TrDos, вот ентот самый бут будет грузиться, а потом через TapeIn/TapeOut по UART обмениваться инфой. Проще кажется некуда... Помоему индикатор вообще не нужен, достаточно будет пары светодиодов.
Последняя мысль очень здравая.
Тогда уж ещё проще - мышкой! По даблклику, и в звуковуху жужжит... =)
Я ж грил, что комп уже есть :-)
Помоему индикатор вообще не нужен, достаточно будет пары светодиодов.
Да ладно пары... пусть будет 7х4 или даже 8х4 (с точками) светодиодов в одном корпусе :-)
потом через TapeIn/TapeOut по UART
Кто будет мастером?
Ещё одна идея, кто возьмётся?
Ввести режим, при входе в который формируется BASIC-файл, который тут-же идет на Tape-out магнитофона, а спек его подгружает. Смысл этого файла - вывести на экран таблицу ( разделённую "Press any key" ) соответствия номера файла имени взятого из хэддера!!! Но вся фишка в том как сделать динамический BAS имея массив строк (имён), гдё индекс - это его номер.
Сам я пока это делать не буду т.к. и без того заморочек ещё хватает.
Тогда уж ещё проще - мышкой! По даблклику, и в звуковуху жужжит... =)
Речь идет об автономном устройстве!
В принципе никто не мешает пользоваться ноутбуком, но себестоимость ;)
использовать сам ZX для навигации. Ничего нового я не придумал - вспомните Boot в TrDos, вот ентот самый бут будет грузиться, а потом через TapeIn/TapeOut по UART обмениваться инфой. Проще кажется некуда... Помоему индикатор вообще не нужен, достаточно будет пары светодиодов.
Вот - это уже разумная мысль! На девайсе оставить только минимум кнопок - например для выбора частей в данном тзх - для подгрузки уровней етц.
Кто будет мастером?
УАРТ он на то и уарт, что там хозяев и рабов нету =) Я сам например делал на з80 программный уарт с буферизацией - и всё работает ОК! Естественно надо предусмотреть, чтобы уартом в спек передавалось только когда он готов принять. Да и ещё кстати подумать, как насчёт переменной составляющей - ведь тейпин-тейпоут - они через компараторы-фильтры-усилители идут на цифру. Хотя как вариант - припаять в нужном месте 2 проводка цифровых, а весь аналог отрезать нафик =) Или изобретать свой протокол - тоже асинхронный, но без постоянной составляющей. Например, манчестер.
Ещё одна идея, кто возьмётся?
Ввести режим, при входе в который формируется BASIC-файл, который тут-же идет на Tape-out магнитофона, а спек его подгружает. Смысл этого файла - вывести на экран таблицу ( разделённую "Press any key" ) соответствия номера файла имени взятого из хэддера!!! Но вся фишка в том как сделать динамический BAS имея массив строк (имён), гдё индекс - это его номер.
Сам я пока это делать не буду т.к. и без того заморочек ещё хватает.
Вот именно, что на лету формировать васик - одна большая заморочка! =) Уж лучше забутить спек каким-либо фиксированным тейп-бутом и пусть потом спек сам по УАРТу (или ещё как) в жутком ФАТе карточки копается - файлы выбирает, имена показывает, етц. Девайсу тогда останется только нужную цепочку секторов считать с выбранным файлом.
Не надо никаких уартов и прочего, девайс должен быть автономен и со спеком общаться токо через мафонный вход/выход...
Не надо никаких уартов и прочего, девайс должен быть автономен и со спеком общаться токо через мафонный вход/выход...
Дык а и говорят о том, чтоб через эти выходы/входы. А как - как угодно, хоть уартом ;)
>Да ладно пары... пусть будет 7х4 или даже 8х4 (с точками) светодиодов в
>одном корпусе :-)
имхо, power on, load active, save active, end block, end tzxfile...
для отгрузок к каждому tzx привязать одноименный файл пусть .szx
>Ещё одна идея, кто возьмётся?
свое мнение по треду я писал в самом начале %)
>в жутком ФАТе карточки копается - файлы выбирает, имена показывает,
>етц. Девайсу тогда останется только нужную цепочку секторов считать с
>выбранным файлом.
на 3,5mhz проце тормоза жуткие будут (FK0 вроде на 30kbps удавалось разогнать rs232), надо какой то индексированный поиск что ли
Текущая обстановка:
Купил ридер за 150р для ПК :-) для прогонки на совместимость софта, создал в корне дирректорию "SPECCY", накидал туда tzx (лёгким движением руки 8-) ) и погонял их:полёт нормальный. Начинаю охоту на багов и реализацию более полной обработки ошибок и тэгов tzx.
2 jtn
Ok, сейчас качну. Я уже погонял HERO QUEST 48K ~120кб и HERO QUEST 128K ~115Кб, нашёл небольшой баг, исправил. В руки попала экзотическая вещь Athena128K с кучей всяких тэгов-примочек, буду прикручивать обработчики.
W.E.C. Le Mans грузиться, а вот Athen'y maketzx for Win32 не берёт, надо бы на реальном спеке прогнать.
Прошу заинтересованых людей выложить ссылки на экзотические tzx-ы.
PS: протестированы Boulder 1 - Boulder 5a, HERO QUEST 48K, HERO QUEST 128K - c блоками standart, несколько файлов с блоками standart и turbo, WEC Le Mans с защитой SpeedLock и блоками standart, turbo, pure tone, pulses, pure data.
taper возьмет наверное. когда я последний раз в этом ковырялся у него было больше всего блоков разных. давно было.
С воспроизведением вышел на стадию stable release :-) Нарисован вариант схемы, идёт проработка... Теперь по поводу воспроизведения, хочу попытаться писать в tzx в блок DirectRecording, по моему пониманию это универсальный блок в который можно запаковывать любые двухуровневые (по амплитуде) частотно-временные последовательности. Нужен пример tzx'a с таким блоком, мож у кого есть? Вполне вероятно, что этот блок распознаётся unreal'ом т.е. F3 - Load TZX, Shift-F7 - посмотреть кол-во и типы блоков. У меня таких файлов пока не наблюдается.
Нужен пример tzx'a с таким блоком, мож у кого есть? Вполне вероятно, что этот блок распознаётся unreal'ом т.е. F3 - Load TZX, Shift-F7 - посмотреть кол-во и типы блоков. У меня таких файлов пока не наблюдается.есть такое
2 SMT.
Благодарю, буду разбираться... Мне думается для реализации записи вариант DirectRecording самый простой.
Текущая обстановка:
Всё что хотелось реализовать, реализовано, НО к сожелению только на макете. Кто захочет повторить девайс, стучитесь на мыло.
Текущая обстановка:
Всё что хотелось реализовать, реализовано, НО к сожелению только на макете. Кто захочет повторить девайс, стучитесь на мыло.
От себя скажу, что желающие получить готовый девайс пишите мне, на основе Ваших посланий будет ставиться вопрос о производстве!
Southern Bear
10.05.2005, 00:36
А для самостоятельной сборки устройство не будет опубликовано?
Имея всё необходимое интересно самому изготовить.
А для самостоятельной сборки устройство не будет опубликовано?
Имея всё необходимое интересно самому изготовить.
По моему Вам уже ответили, пишите автору в мыло и все будет :smile:
а вот и патч для ipodlinux, позволяющий на IPOD (проигрыватель аудио) воспроизводить TZX файлы. полный рулез.
http://www.ipodlinux.org/forums/viewtopic.php?t=1782
От себя скажу, что желающие получить готовый девайс пишите мне, на основе Ваших посланий будет ставиться вопрос о производстве!
Желающих чтото не видно :)
За самостоятельную сборку по моей схеме уже один человек взялся. Видимо такоё же фанат как и я 8-)
В общем считаю, что схему надо упростить, а именно:
1) Выкинуть LPT обвязку освободив один порт с копейками (кому нужен паралельный интерфейс, если можно кард-ридер за 200р купить ??? )
2) Питание Меги перевести на 3,3 вольта, что даст возможность подключать SD/MMC напрямую к выводам.
Итого в составе:
1) Семисегментник из 4х знакомест
2) 4 кнопки
3) Мега + кварц
4) Стабилизатор на 3,3В для Меги и ММС
5) Стабилизатор на 5В для семисегментника
6) Мало-мало обвески :-)
Займусь этим как только закончу со своим очередным девайсом.
PS: разжился AVR-JTAG отладчиком, вот это вещь!!!
Если система будет PCшной, то файло заливать через кадр-ридер будет очень легко и где угодно.
2 dexus почитай тему плиз ;-)
DVS, я ступил - нпервую страницу только прочитал не увидел что другие есть :) Сорри.
Выкладываю фото своего "детища" :)
Итак,
слева: JTAG отладчик (самодельный, но на цивильной плате),
центр-выше: новый макет на 16 меге с 3,3В питанием, без преобразователей уровня и минимум обвески ;)
центр-ниже: макет на 8 меге, с которого всё и началось.
справа: модуль User interface :)
anarchyman
20.10.2005, 17:23
От себя скажу, что желающие получить готовый девайс пишите мне, на основе Ваших посланий будет ставиться вопрос о производстве!
Приветствую!
А сколько примерно, будет составлять стоимость готового изделия?
Мега8 стоит 52руб., Мега16 - 83руб. Так что рублей в 700 - 1500 вполне можно уложиться... :)
alexfreed
21.10.2005, 08:09
Мега8 стоит 52руб., Мега16 - 83руб. Так что рублей в 700 - 1500 вполне можно уложиться... :)
Наверное можно приспособить готовое устройство. ATMEL Butterfly.
Информация на их сайте. Есть все что надо: процессор, RS232 и память.
Правда не очень много - 512К, но на несколько игр хватит.
Все устройство размером со спичечный коробок и стоит около 15 баксов.
Мега16 ~100р
Обвеска ~150р
Индикатор ~70р
MMC/SD карта (по желанию, можно например б/у купить на 16Mb рублей за 100)
Печатная плата, ещё не знаю сколько, т.к. не развёл, но думаю около 200-250р.
Я считаю, что девайс оптимален под данную задачу и рассматривать другие конфигурации нет смысла (даже друзья с IPod и КПК не смогут делать Record отгрузки).
Пока совершенно нет времени на эту разработку, так что тем кому обещал схему и прошивку от новой версии девайса пока придётся подождать, девайс разрабатывается не для денег (хотя, возможно, когда будет плата, желающие смогут заказать конфиг по желанию), а ради интереса и поддержания платформы Speccy.
Ждемс...
По крайней мере законченного комплекта "схема+прошивка".
"MMC/SD карта " Это правильно, но вопрос с подключением.
Надо панельку наверно для подключения ...
Интересно, их продают?
Кусок разъема ISA вам в помощь!
"MMC/SD карта " Это правильно, но вопрос с подключением.
Надо панельку наверно для подключения ...
Интересно, их продают?У нас в Промэлектронике появились в продаже трех типов: один с защелкой и 2 без.
Название SDC09W1, SDC09W4 и SDC09W5P (это с защелкой)
Цена от 30 до 60 р.
Вот и призадумаешся ...
Или FDD подключать за 250р, или карточка - за 600р ...
Вот и призадумаешся ...
Или FDD подключать за 250р, или карточка - за 600р ...Вчера купил карточку SD на 16 Мегабайт за 100 р.
Правда это уже редкость. Но 128 Мегабайтные стоят уже меньше 400 р.
Просто это меняет концепт ZX - нет нужды включать контроллер FDD
в базовый комплект (использовать внешний)
Что скорее положительно, т.к. снижает стоимость ...
За устройство - респект!
ИДЕ-контроллер отменяется.
А есть какие-нибудь идеи по работе с трд-оброзами на карточке?
James DiGreze
04.11.2005, 07:44
imho, работа с trd'шниками через магнитофонный порт не реальна.
Выскажу пару слов по интерфейсу управления. Мне кажется, будет достаточно led-индикатор питания, и две кнопки - boot, start...
Набираем на Спектруме LOAD "". Жмем boot.
Кнопка boot активирует посылку программы-селектора на Спектрум. Которая должна осуществлять, в интерактивном режиме, выбор нужного образа. После того, как образ выбран, его номер запоминается в "магнитофоне". Далее делаем reset Спектруму. И опять набираем LOAD "". После чего нажимаем кнопочку start. Которая активирует посылку выбранного образа на Спектрум.
Подобная реализация позволит снизить себестоимость девайса за счет отсутствия "лишних" кнопок и дисплея примерно на 100-300рубликов.
Выскажу пару слов по интерфейсу управления. Мне кажется, будет достаточно led-индикатор питания, и две кнопки - boot, start...
Для работы с подгружаемыми уровнями нужна еще фиксируемая кнопка "ПАУЗА".
А индикатор стоимостью порядка 50 р. надо оставить.
Очень полезно если на нем будет показываться время до конца загрузки текущего блока.
James DiGreze
04.11.2005, 08:02
Паузу можно реализовать и как доп.функцию на boot'e, а на start'e доп.функцией поставить еще и stop...
Да, наверно все-таки индикатор нужен... Хотя спорно, в общем надо экспериментировать.
2 jdigreze
Такая идея с селектором уже была и как и в тот раз я задаю вопрос (внимание вопрос :-) бумм... ).
Возьмёшься сделать такой "селектор"? Если да, то учти, что структрура его должна динамически изменяться (BAS или ASM) в зависимости от файл-состава карты.
Если будет такой "селектор", то можно будет на печатку просто не впаивать индикатор и всё (обратной то связи у индикатора нету), даже софт переписывать не надо.
PS: софт под этот девайс пишется на IAR C.
структрура его должна динамически изменяться (BAS или ASM) в зависимости от файл-состава карты.
Если будет такой "селектор", то можно будет на печатку просто не впаивать индикатор и всё (обратной то связи у индикатора нету), даже софт переписывать не надо.
хммм... или я чего-то недопонял, или это проще пареной репы :-))
вот такой простейший вариант пришел в голову, на бейсике :-)
10 FOR n=0 to PEEK(25999)
20 for k=0 to 10
30 print chr$ peek 26000+n*12+k;
40 next k
50 print tab 1;peek 26000+n*12+11
60 next n
проще не придумать :) за tab 1 в 50 строке не ручаюсь, эмуля под рукой проверить нету, задумывалось, что после такого печать будет с 17го символа строки
полученный .$b можно даже не генерировать на лету, а хранить на флэхе
а генерировать только массив
адрес 25999 - число файлов(0-255, ничто не мешает чуть переделать под 65536 штук)
сдреса 26000-65535 - массив 12 байтных описаний файлов в виде 11 байт имя+1 байт номер
короче,
struct fdesc
{
char name[11];
unsigned char fileNumber;
}
James DiGreze
07.11.2005, 11:54
Неее... Динамический basic или asm - это бред! ;)
Нужна программа именно для двусторонноего обмена, что-то типа коммандера, который будет листать файлы на флэшке, устанавливать/снимать метку актуальности на/с файлов.
Протокол обмена, возможно, можно будет сделать синхронным. Т.е. если магнитофон передает данные, то синхросерию формирует спек, если спек передает данные, то сихру дает магнитофон.
К сожалению у меня "кай" пока в дауне, до выходных надеюсь его реанимировать и попробовать поработать через lpt с писишкой. Если все пройдет нормально - выложу спецификацию протокола обмена 0-го уровня. А дальше нужно будет думать о протоколе обмена информацией...
ЗЫ: Лет 5 назад я делал подобный обмен файлами с писишкой, все работало замечательно :)
2 Eltaron
Спасибо! Идея понятна! Но всё же, чтобы мне не заморачиваться, хотелось бы иметь tzx этого "селектора", с указанием того, начиная с какого смещения подсовывать туда fdesc[i], короче, чтобы заинтересованый человек взял и сделал этот кусок от и до.
В общем вот документ:
ТЗ (почти) на разработку файл менеджера для совместной работы ZX-совместимого компьютера и магнитофона HardTaper.
<b>Назначение:</b> Файл-менеджер предназначен для просмотра списка доступных файлов записанных на флэш носитель магнитофона, облегчения (ну вообще то кому как конечно и насчёт удешевления тоже) выбора воспроизводимого файла, а также блока в файле.
<b>Логика работы:</b>
Пока спекки находиться в режиме загрузки с ленты, нажатием кнопки (теперь уже комбинации кнопок т.к. кто следит за темой уже знают, что юзер-интерфейс состоит из 4-х сегментов индикатора и 4-х кнопок) на магнитофоне происходит загрузка файл-менеджера в спекки.
Файл-менеджер обеспечивая прокрутку и поиск нужного файла, передаёт его идентификатор обычной командой SAVE ( предварительно спрашивая Yes/No) магнитофону.
Магнитофон получив идентификатор файла, подготавливает его к воспроизведению и входит в режим паузы на время Tпз (задаётся уставкой).
Файл-менеджер делает вводит спекки в режим загрузки повторно (на этом его работа закончена).
Магнитофон выдержав паузу начинает воспроизведение файла.
Исполнение возложить на: jdigreze
Дата: 07.11.2005
Подпись: команда Спекки
:-)))
В процессе написания выяснился один минус: нельзя файл-менеджером выбрать подгружаемый уровень ( догадались почему? :-))) ), а с индикатора пожалуйста!
Это можно обойти сделав файл-менеджер теневым или...
Ну в общем кто ещё хочет участвовать и сделать дополнительные примочки :spy: ?
Дерзайте!
PS: ПЛЮС: сей файл-менеджер не увеличивает стоимости девайса ;-)
2 caro
Может как-нибудь скооперируемся насчёт разводки платы? PCAD и Eagle не мой профиль, а я люблю делать то, в чём я профи или почти профи.
Я бы оплатил опытную партию в количестве 5-10 шт.
Сколько это может стоить например в техносвязи.
Размер платы ~2 дип корпуса Меги16.
Плата не совсем простая т.к. требуется установка кнопок, индикатора, слота под флэш. За работу по разводке могу обещать 1-2 платы и оффициальный статус бета-тестера. В общем можем договориться через личку, если есть время.
James DiGreze
07.11.2005, 19:58
Кажется я встрял... Ок. Буду "попытаться сделать" ;)
ТЗ в общих чертах понятен. Есть некоторый вопрос для уточнения - внутренняя структура файловой системы на флэшке, и may be, есть параметры точек входа на загрузку и запись файлов туда?
В общем-то с AVR'ами немного знаком, так что могу попытаться и часть кода для магнитофона написать...
2 caro
Может как-нибудь скооперируемся насчёт разводки платы? PCAD и Eagle не мой профиль, а я люблю делать то, в чём я профи или почти профи.
Я бы оплатил опытную партию в количестве 5-10 шт.
Сколько это может стоить например в техносвязи.
Размер платы ~2 дип корпуса Меги16.
Плата не совсем простая т.к. требуется установка кнопок, индикатора, слота под флэш. За работу по разводке могу обещать 1-2 платы и оффициальный статус бета-тестера. В общем можем договориться через личку, если есть время.
Я бы тоже поучаствовал в процессе!
2 jdigreze
Для того чтобы воплотить эту идею не нужно знать ни AVR ни C. Суть в следующем...
Создаётся прога на спекки BAS+CODE, которая будет как раз той частью (почти весь файл менеджер), которую магнитофон будет выгружать на спек. Уважаемый Eltaron предложил на BAS написать вьювер, а в CODE запихать список файлов как цепочку из fdesc (короче говоря будет цепочка из блоков по 11 байт 8байт имя + 3 байта расширение, идентификатор или номер не нужен ;-) ) . Этот вариант нужно доработать в части юзер-интерфейса (поиск, прокрутка, сортировка...) и добавить отправку выбранного файла т.е. 11 байт обратно в магнитофон. Сию прогу BAS+CODE нужно выгрузить в виде tzx и сказать куда в области CODE (адрес или смещение от начала) начинать писать 11байтовые блоки (как их туда подсунуть - это уже моя забота главное чтобы tzx был). Обработка SAVE, тоже моя забота, но SAVE делает файл менеджер, кроме того SAVE можно сделать своим (не из BASICa) , пилот-тон укоротить или вообще свою кодировку сделать.
Вот так понятно?
2CHRV
Я же тебя обещал платку, когда будет и статус бета-тестера. Или у тебя время на разводку появилось?
James DiGreze
08.11.2005, 08:37
Т.е. ты можешь сформировать CODE-файл в формате tzx сам? и отошлешь его следом за селектором? или все-таки tzx должен сформировать я? Как-то все это мутно... Допустим у юзера всего 10 файлов, а мы ему вместе с селектором будем посылать стандартный набор для 1000файлов * 11 = 11Кб дескрипторов, где 110байт будут заполнены, а остальные дескрипторы будут пустыми, все это дело будет грузиться в спек минуты 3...
Ладно, я начинаю писать вьюер дескрипторов, со скроллером и т.п. Остальное обсудим в процессе ;)
Eltaron предложил на BAS написать вьювер, а в CODE запихать список файлов как цепочку из fdesc (короче говоря будет цепочка из блоков по 11 байт 8байт имя + 3 байта расширение, идентификатор или номер не нужен
а, в общем-то, и расширение имхо не нужно :-))
все равно оно tzx :-))
если без него, то на файл будет всего 8 байт, что удобней, чем 11, ибо степень двойки, да и в 48К дескрипторов уместится больше... правда все равно на все образы с WOS не хватит :)
2 Eltaron
Расширение пригодится в будущем.
2 jdigreze
Блок CODE (его часть) я буду формировать на лету. А в tzx пусть лежит блок CODE под один файл, хотя можно и без него обойтись, надо смотреть как будет прощё.
2 Eltaron
Расширение пригодится в будущем.
2 jdigreze
Блок CODE (его часть) я буду формировать на лету. А в tzx пусть лежит блок CODE под один файл, хотя можно и без него обойтись, надо смотреть как будет прощё.
А если вам сделать например подобие каких нить команд на магнитофонный выход, и например закачивать сперва каталог... Потом с помощью команд в магн.выход делать соответствующую загрузку :).
Типа полный интерактив. :wink:
1. CHRV дело говорит - зачем грузить весь каталог, если он в экран не поместится
2. Boot должен грузиться как можно быстрее - короткий басик с урезанными до минимума по длине пилоттонами, затем высокоскоростной обмен. например USART - спек без турбо потянет 38кбит.
3. чтобы сделать отгрузки можно каждой игре сопоставить каталог в котором будут храниться или:
a) только подгружаемые уровни
б) сами отгрузки
т.е. после загрузки программы остальные блоки будут браться исключительно из одного каталога, а не шкериться по всем файлам на флешке. ну и савки при этом не потеряются.
4. сделать оцифровку в realtime несложно, но вот с упаковкой и записью во флеш наверное будет косяк... ну дак и многие савки не слишком большие - пара сотен байт. хотя в разных стратегиях...
5. был такой копировщик (вроде quick copy или quicksilva copy если нужно уточню газвание), который позволял ускорять загрузку от 2х до 10раз, если использовался стандартный басиковский загрузчик с LOAD'ами. смысл был тот, что вставлялась нулевая рем-строка с фастлоад, а все LOAD'ы заменялись на usr xxx. все последующие блоки уже были записаны в ускоренном виде. Почему бы не применить и эту идею?
пока вроде всё.
James DiGreze
09.11.2005, 06:02
Кстати, при интерактивном взаимодействии с магнитофоном, можно будет и OSь сделать как для "веника"... В стиле внешнего накопителя... (На ПК такие идут с USB/IEEE1394, внутри "веник" или флэш). Но пока не будем лезть в дебри, надо обкатать железо на простом софте, а потом все апгрейды будут решаться на уровне перешивки процессора магнитофона.
Да, насчёт блочной загрузки я уже сообразил, с этим согласен.
Поднимаю свою тему из забвения и сообщаю, что HardTaper доработан как аппаратно, так и программно.
1) Аппаратно сделан TapeIN формирователь на 561ЛН2 ( не забудем про 3,3 вольтовое питание, поэтому LM555 не проходит )
2) Кварц поставил на 14Мгц, так оно легче т.к. кратно 3,5 МГц :-)
3) Доработан софт и теперь я могу сказать, что моё детище умеет и PLAY и RECORD.
4) Запись сделана следующим образом: пользователь выбирает нужный номер файла и включает режим записи, который обязательно ждёт подтверждения, потому как можно случайно перезаписать нужный файл. При всём при этом на флэш-карте уже должен лежать файл с соответствующим номером и расширением tzx, который создаётся там на обычном "ридере" путём копирования любого(!) файла подходящего размера и переименованием его в формат [номер.tzx], таким образом создаётся слот для записи! Размер файла каждый выбирает сам под свои нужды, например 1Мб файла хватает на ~6 мин. записи при частоте сэмплирования 22050. Замечу, что запись вёдётся согласно стандарту tzx и записи сделаные мной как с ленты, так и с линейного выхода звуковой карты потом были проверены в Unreal, т.е. файлы содержащие записи копируются с флэш-карты на ПК и загоняются в Unreal, который успешно их "ест". Таким образом были проверены Boulder ( записал со старенькой кассеты ) и ATHENA 128 ( с линейного выхода ).
Проблемы ещё есть, но данный вариант уже очень близок к тому, о котором я мечтаю.
Схему вместе с прошивкой думаю выложить здесь, как только нарисую схему ( просьба заинтересованым людям "попинывать" меня по почте, а то я опять пропаду... )
PS: всех с праздником, Днём Защитника Спек..., в смысле Отечества :-)
Вот, файлы, которые обещал.
Кто хочет участвовать в отладке и усовершенствовании собирайте и прошивайте. HEX формата intel-extended, как прошить рассказывать небуду об этом и так много написано.
Схемой интересуются в два раза чаще, чем прошивкой :-)
Хотя по объёму она в два раза больше :-)
Вот, файлы, которые обещал. Кто хочет участвовать в отладке и усовершенствовании собирайте и прошивайте. HEX формата intel-extended, как прошить рассказывать небуду об этом и так много написано.
Устройство привлекательное, но возникает вопрос:
Можно выложить исходный текст программы ?
Дело в том, что у меня нет ATmega162, зато есть несколько ATmega8515, ATmega163.
Я попробовал бы для них версию откомптилировать. Специально заказывать ATmega162, когда без дела горстка других мег лежит - жаба давит :)
Могу сделать для 16(32) и 161, 163. Исходники пока выкладывать не собираюсь.
James DiGreze
26.02.2006, 08:09
Могу сделать для 16(32) и 161, 163. Исходники пока выкладывать не собираюсь.
Ну, тогда просьба: Откомпиль, плиз, для Mega8515, у меня такой тоже в "загашниках" имеется ;)
Могу сделать для 16(32) и 161, 163. Исходники пока выкладывать не собираюсь.
Сделай для меги8515 или просто 8515 (даже наверное лучше просто для 8515го) тогда, пожалуйста. И схему с ней выложи (ну чего к каким ногам меги подпаять).
Хех... я посмотрю конечно насчёт 8515, надо 14МГц и 16Кб code mem + 1Кб data mem. Но честно говоря, если б я скачал схему и прошивку, то мне не жалко бы было 150р за контроллер отдать. Схема итак простейшая... Основная ценность в программе, которую я предоставляю фанатам безвозмездно.
Вот hex для ATMega16(32) и ATMega163. Владельцам 8515 придётся раскошелиться, т.к. "бинарник" 11 Кб.
Как кто-то соберёт, отпишитесь! Интересней развивать будет!
Поигрался с кодом, но в 8К никак не влазит. В общем под 8515 и мега8 могу только плэйер сделать, если мне кто-нибудь обяснит, почему он хочет делать имеено на контроллере с 8К, который ненамного дешевле 16Кбайтного.
Я не понимаю, зачем для загрузки программ в память "Спектрума" нужно собирать устройство для USB, которое дороже самого "Спектрума"? Всё равно скорость передачи данных будет 6000 бит в секунду. Не проще ли использовать магнитофон, CD-player?
Я не понимаю, зачем для загрузки программ в память "Спектрума" нужно собирать устройство для USB, которое дороже самого "Спектрума"? Всё равно скорость передачи данных будет 6000 бит в секунду. Не проще ли использовать магнитофон, CD-player?
Всё понято неправильно. Откуда 6000 бит/с? Читать и ещё раз читать тему.
PS: не в обиду.
Я не понимаю, зачем для загрузки программ в память "Спектрума" нужно собирать устройство для USB, которое дороже самого "Спектрума"? Всё равно скорость передачи данных будет 6000 бит в секунду. Не проще ли использовать магнитофон, CD-player?
Читай тред с самого начала!!! DVS "баловался", "баловался" и.... сделал достаточно интересный девайс!!!
Есть ли программа для реального "Спектрума", позволяющая записать программу с дискеты (ТР-ДОС формат) на магнитофон?
Есть ли программа для реального "Спектрума", позволяющая записать программу с дискеты (ТР-ДОС формат) на магнитофон?
Программы особой не надо, достаточно изменить басик-бутблок. Но если программа предназанчена для работы с диском (подгружает модули и прочее) прийдется конкретно хачить и править.
Вообще на текущий момент для российского клона требование наличия БЕТА-интерфейса практически обязательно.
Отредактировал первый пост и добавил туда ссылки для скачивания схемы и прошивок, дабы даже самые нетерпиливые и ленивые фанаты могли до них добраться.
James DiGreze
06.03.2006, 10:17
Поигрался с кодом, но в 8К никак не влазит. В общем под 8515 и мега8 могу только плэйер сделать, если мне кто-нибудь обяснит, почему он хочет делать имеено на контроллере с 8К, который ненамного дешевле 16Кбайтного.
Ну, если "не лезет", то будем делать как положено ;)
Правда у меня есть еще мега64, вот на ней можно вдоволь развернуться, хотя она подороже 16-й. Зато запись на фат16 можно попытаться реализовать "полноприводно"...
После тестирования посмотрим... мне кажется, что слот для записи довольно удобно. А "полноприводная" запись - это сразу куча проблем, тут действительно 64 мегу надо.
Для тех кому интересно сообщаю, что сейчас в моём распоряжении появились ЖК индикаторы на базе Philips PCD8544 (Nokia 3410 монохромный-130р) и с EPSON S1d15g14 (Nokia 3510i цветной 12бит - 160р). "Контакт" с ними налажен :-) (оба подключены через LPT для отработки функций на "C" ). Больший интерес представляет цветной 12битный дисплей, но для него нужна BACKLIGHT подсветка, которую я сделал из световода и четырёх суперярких белых светодиодов. Кусочки скриншотов из игр от Спекки смотрятся замечательно, несмотря на то, что дисплей сделан по устаревшей CSTN технологии, но зато цены не кусаются :-)
Следующий этап это создание принципиально новой ветки проекта. Т.е. "магнитофон" на 64 меге (мне ОЗУ теперь мало) + LCD EPSON S1d15g14.
Также хотелось бы прикрутить AY и играть музыкальные файлы. В общем анализирую требуемые ресурсы... возможно вообще на ARM перейти придётся.
Для тех кому интересно сообщаю, что сейчас в моём распоряжении появились ЖК индикаторы на базе Philips PCD8544 (Nokia 3410 монохромный-130р) и с EPSON S1d15g14 (Nokia 3510i цветной 12бит - 160р). "Контакт" с ними налажен :-) (оба подключены через LPT для отработки функций на "C" ). Больший интерес представляет цветной 12битный дисплей, но для него нужна BACKLIGHT подсветка, которую я сделал из световода и четырёх суперярких белых светодиодов. Кусочки скриншотов из игр от Спекки смотрятся замечательно, несмотря на то, что дисплей сделан по устаревшей CSTN технологии, но зато цены не кусаются :-)
Следующий этап это создание принципиально новой ветки проекта. Т.е. "магнитофон" на 64 меге (мне ОЗУ теперь мало) + LCD EPSON S1d15g14.
Также хотелось бы прикрутить AY и играть музыкальные файлы. В общем анализирую требуемые ресурсы... возможно вообще на ARM перейти придётся.
А проект не планирует перейти в опенсорц стадию? А то мне бы вот не только читать, а еще и писать не помешало бы - типа полноценная замена магнитофона чтобы была...
James DiGreze
09.04.2006, 18:38
"Полноприводную" запись сделать на меге16 не представляется возможной, маловато оперативки, потому запись только в "слоты". А вот на меге64 внетреннего ОЗУ должно с лихвой хватать на запись в FAT16. ОЗУ требуется около 2,5Кб.
А проект не планирует перейти в опенсорц стадию? А то мне бы вот не только читать, а еще и писать не помешало бы - типа полноценная замена магнитофона чтобы была...
Если внимательней посмотреть пару тройку листков в конце треда, то там можно найти мой пост о том, что запись уже сделана :v2_walkm:
Запись реализована по принципу слотов, которые представляют собой заранее заготовленые файлы ( важен только размер (пишу на 22050Гц) и расширение tzx) находящиеся в одной дирректории со всеми tzx. После записи в этот слот готовый файл можно слить на ПК и грузануть в unreal. Проверено :v2_finge:
При этом я "пошёл по пути наименьшего сопротивления" (с) jdigreze :)
Т.е. не стал заморачиваться с поиском 32 свободных байт в фат, чтобы разместить туда filere_cord, и с поиском свободного блока секторов.
Зато всё работает :v2_wink2:
Опен соурс возможен только после хорошего документирования всех исходников, чем я потихоньку занимаюсь.
2 jdigreze
Я делал расчёт кэша исходя из необходимости успевать выводить картинку на ЖКИ. У меня тоже получилось 2,5Кб.
Так как картинки будут лежать на той же флэшке, поэтому нужно успевать пополнять кэш из одного файла и подгружать картинку из другого файла. Может это и не очень нужно (достаточно только текст выводить), но зато можно красиво анимировать загрузку игры скриншотами :v2_finge:
acidrain
10.04.2006, 20:50
в моём распоряжении появились ЖК индикаторы на базе Philips PCD8544 (Nokia 3410 монохромный-130р) и с EPSON S1d15g14 (Nokia 3510i цветной 12бит - 160р). "Контакт" с ними налажен :-) (оба подключены через LPT для отработки функций на "C" ).
Интересно, а как идет управление дисплеем? У меня есть возможность и более качественные дисплеи брать по более низким ценам. Хотелось бы их применить в своих проектах =) Не подскажешь, что и как в случае с этими двумя от 3410 и 3510 никой?
[B]
1) Флэш-карта (допустим 128Мб)
2) Клон 8051 (которые я уважаю и уже не забуду, это точно) допустим AT89C4051 - для удешевления конструкции или более дорогой с USB.
3) MAX232 т.е. UART<->RS232
4) ЖК индикатор на HD44780
5) Несколько кнопок, включая кнопу "Воспр."
6) Обвеска
Я не понимаю зачем флешка ??? И зачем MAX ??? Когда в AT89C51 есть Serial Port, простые буфера на 12 вольт и прямо к компорту, скорости 115200 хватит по горло. На ПиЦи делаем программу, которая в своём формате общается с микроконтроллером, а на микроконтроллере делается преобразование данных в сигналы ! Уверен что скорости на 100% хватит, ну, конечно если взять AT89xxx на 20-30 мегагерц ! Скорость 115200 - 11 килобайт в секунду, чего хватит да же с дисковвода передачу сделать, хотя тут нужно посчитать, но на кассету хватит. В 1996-ом году я подвесил на прямую магнитофонный выход к COM-PORT'у, и как не странно - работало, хотя тогда я не понимал чем это может обернуться 5в против полярных 12в, да же ничего не сгорело, но скорости передачи да же без всяких микроконтроллеров хватало ... =)
Интересно, а как идет управление дисплеем? У меня есть возможность и более качественные дисплеи брать по более низким ценам. Хотелось бы их применить в своих проектах =) Не подскажешь, что и как в случае с этими двумя от 3410 и 3510 никой?
В нашем приборе используется ЖКИ на том же микроконтроллере EPSON. Я запускал его. Правда корявый как никогда !!! Самое приятное, что в описании команд управления были EXAMPL'ы под Z80. В микроконтроллере есть один идиотизм, там вначале посылаются данные, а потом команда. Есть описание ...
Я не понимаю зачем флешка ??? И зачем MAX ??? Когда в AT89C51 есть Serial Port, простые буфера на 12 вольт и прямо к компорту, скорости 115200 хватит по горло. На ПиЦи делаем программу, которая в своём формате общается с микроконтроллером, а на микроконтроллере делается преобразование данных в сигналы ! Уверен что скорости на 100% хватит, ну, конечно если взять AT89xxx на 20-30 мегагерц ! Скорость 115200 - 11 килобайт в секунду, чего хватит да же с дисковвода передачу сделать, хотя тут нужно посчитать, но на кассету хватит. В 1996-ом году я подвесил на прямую магнитофонный выход к COM-PORT'у, и как не странно - работало, хотя тогда я не понимал чем это может обернуться 5в против полярных 12в, да же ничего не сгорело, но скорости передачи да же без всяких микроконтроллеров хватало ... =)
"Война уж минула давно..." (с) :v2_laugh:
Те кто внимательно читает тред меня поймут :v2_tong:
PS: без обид
Интересно, а как идет управление дисплеем? У меня есть возможность и более качественные дисплеи брать по более низким ценам. Хотелось бы их применить в своих проектах =) Не подскажешь, что и как в случае с этими двумя от 3410 и 3510 никой?
Можно скачать pdf через google на контроллеры которые я указал.
У обоих контроллеров последовательный Serial интерфейс.
У 3410 формат слова 8 бит, у 3510 формат 9 бит в слове (9-бит DATA/CMD, а у 3410 выбор идёт ногой). Лучше pdf качнуть или могу "намылить".
А нету ли инфы по алкателевскому (one touch 310) индикатору ? А то нет у меня нокии :)
А нету ли инфы по алкателевскому (one touch 310) индикатору ? А то нет у меня нокии :)
Думаю что там установлен PCD8544 как в 3310. Если контактов на ЖКИ 8, то это точно PCD8544.
acidrain
11.04.2006, 12:50
Лучше pdf качнуть или могу "намылить".
Спасибо! Уже качнул. буду изучать :)
Это не PCD8544, а ножек 18 штук :(. Звеняйте за оффтоп.
Всем привет! Вот собрал девайс, а он ругается. Сначала пишет "C_er", потом "b_er". Железо следующее: mega16, кварц 14.318 (от него и спек работает). Частота кварца критична? Может я карту не так форматирую, вроде надо FAT16? Файлы писал в корень с оригинальными именами, и с цифровыми (1.txz, 01.tzx, 001...). Карточка видится ридером и тел SL45. Вот такая ситуация, что посоветуете?
Поздравляю!
C_er - это значит ошибка карты.
Что надо сделать:
1) Поддерживаются карты отформатированные под Windows. Поэтому если есть возможность, то нужно форматнуть в FAT16 под виндой. Вообще-то винда мухлюет и не пишет в 0 сектор информацию по разделам, хотя по стандарту это не допустимо, но мне пришлось ориентироваться на винду (доделываю универсальную поддержку с 0 сектором и без)
2) С mega16 не тестировал (мой вариант на 162 меге), поэтому вполне возможно, что где-то забыл исходники поправить. Буду смотреть.
Имена файлов должны быть формата:
N.tzx, где N-номер файла 1-999 без дополнения слева нулями, т.е. не 001 и 01, а просто 1.tzx
При первом включении со вставленной картой в случае успешной инициализации карты, выводиться номер недавно использемого (воспроизводимого/записываемого) файла без C_er.
А файлы в корень класть или в папку (проскакивало в теме - папка "SPECCY")? Форматировал и виндой, и телефоном (siemens SL45). Может карта старая и SPI не держит :(
А файлы в корень класть или в папку (проскакивало в теме - папка "SPECCY")? Форматировал и виндой, и телефоном (siemens SL45). Может карта старая и SPI не держит :(
Да, верно, нужно в корне создать папку "SPECCY" и класть файлы туда.
SPI все должны держать.
Папку я создавал, значит проблема в другом :( А частота кварца должна быть точно 14.000 или можно 14.318 ?
James DiGreze
01.06.2006, 15:38
Частота кварца влиять не должна. Карте пофиг, с какой частотой идут данные, лишь бы не быстрее чем положено стандартом (совру ведь ;) - 25Mbit/s)
Питание 3.3В?
Притание 5В, на 3.3 мега не заводится :( Карта через делители резисторные подключена (100к+47к, еще пробовал 10к+4.7к)
James DiGreze
01.06.2006, 16:12
На меге не важно... а вот для флэшки 5В может быть фатально.
100К+47К - 3,4В... Хм... В идеале надо ставить 561ПУ4 (4050), но сам я подключал через резюки - работало. Хз. Проверь правильность подключения флешки. Кстати, какой объем у оной? И тип - SD или MMC? они немного разные, хотя в режиме SPI должны работать одинаково.
Еще, проверь сигнал /CS флешки, при обращении там должно быть около 0.
Перепаял на 3.3 мега завелась :). Но все равно после "play" c_er, а потом b_er. Флешка MMC infineon 32Mb. А на счет правильно подключил... На LPT вроде работает, хотя кинте рисунок плиз (желательно с пояснением куда нога ИДЕТ, а не как она называется ;)
Перепаял на 3.3 мега завелась :). Но все равно после "play" c_er, а потом b_er. Флешка MMC infineon 32Mb. А на счет проавильно подключил... На LPT вроде работает, хотя кинте рисунок плиз (желательно с пояснением куда нога ИДЕТ, а не как она называется ;)
OT: чё за кошка такая интересная на аватаре и что с ней?
OT: чё за кошка такая интересная на аватаре и что с ней?
Картинка называется найди птичку ;)
Еще заметил: если второй раз жмешь play пытается плеить, а потом пишет b_er... Видать сегодня опять не высплюсь... ;)
А без карты b_er не пишет - выходит в выбор файла.
James DiGreze
01.06.2006, 17:24
Поворачиваешь карточку контактами к себе:
_______
/1234567|
| |
1) /CS
2) DI (к MOSI на меге)
3) GND
4) +3.3V
5) CLK (к SCK на меге)
6) GND
7) DO (к MISO на меге)
Всё так и есть :((( Надо с другой картой попробовать...
Функционировать должно с любой картой. Исходники проверил, вроде как всё ок.
Насчёт 14МГц@5В могу сказать, что это действительно штатный режим, а на 3.3В использование на такой частоте не совсем корректно, но я сам об этом вычитал только месяца 1,5 назад.
Я раньше тоже пытался использовать делители, но на высокой частоте SPI (14/4=3,5) высокоомные делители валят фронты, лучше тогда ПУ ставить.
Если результаты будут прежние, то я тогда на макете со 162 мегой в панельку воткну переходник с 16 мегой и "половлю жуков".
PS: лучше б я только для 162 меги прошивку выложил.
PS: лучше б я только для 162 меги прошивку выложил.
Не переживай ;) Отладим. На чем пишеш: Си или Асм ?
Сейчас вспомнил - у меня же мега8 есть, на ней, кажется, "play only" реализован, можешь схему и прошивку выложить? (или я это пропустил?)
На 8меге я по почте отправлял схему и прошивку, это был промежуточный вариант для оценки удобства эксплуатации. Сейчас я уже далеко от него ушёл и перестал поддерживать. Но если всё же охота собрать, то стукнись в почту.
Я не переживаю собственно, просто надо какую то методику сборки отработать, возможно добавить расширенные коды ошибок, хотя схема простая.
Подредактировал первый пост.
Вчера ночью с МР3 плеера пробовал грузить - в realspec сделал wav, потом winamp (disc_writer.dll). На 320/48000 прошло успешно :) Смущает только размер mp3...
Ну с MP3 плэйерами, КПК и эмуляцией Спека уже всё ясно итак :-)
Нашел SD карту на 16Mb :) А кто знает как её подключить? Поделитесь плз.
Вот:
http://mp3vkarmane.nm.ru/mmc.html
PS: внизу про SD
Вот спасибо! Вечером попробую.
Не, не работает :( SD вообще не инитит - даже плеить не пытается. А я правильно понял, что MMC и SD подключаются 1 к 1?
James DiGreze
02.06.2006, 20:04
Да. Только у SD контактов 9. Восьмой тонкий очень близко к седьмому. А девятый на скосе, с противоположной стороны, и находится на большем расстоянии от края, чем остальные. Эти контакты в SPI не задействованы 100% ;)
Есть смутное подозрение на инициализацию сдвигового регистра SPI, но код я не видел, могу ошибаться.
Только что подключил АЛС318 - теперь могу читать сообщения целиком (сначала поставил 321 на 1 цифру). И вот что заметил: после инита (----) "F -1" минус первый файл ??? Card error = "C 0" Может прошива собрана неправильно ?
Ещё такой вопрос: fuses как выставлять? У меня: CKOPT, BOOTSZ1, BOOTSZ0, BOOTRST=0, остальные - по умолчанию.
Залил прошивку от mega162 - ведет себя так же :(
Итак, проясним всё по порядку:
1) "----" - означает начало инициализации
2) F -1 - это значит, что из EEPROM прочиталось 0xFFFF (чистая она), после первой же попытки воспроизвести/записать какой-либо реальный файл, его номер будет записан в EEPROM и при следуещем включении будет выводиться он.
3) Если нажать кнопку воспроизведение при правильно выбраном файле и появляется "C_er" значит не прошла инициализация карты, т.е. нет отклика.
Процедура инициализации наипростейшая и её должны проходить все правильно подключенные карты.
Ближе к вечеру смогу в прямом эфире (через ICQ) пообщаться. И фьюзы считаю (BOOTSZ1,0 BOOTRST - не трогать, CKOPT - посмотрю).
Ещё такой вопрос: fuses как выставлять? У меня: CKOPT, BOOTSZ1, BOOTSZ0, BOOTRST=0, остальные - по умолчанию.Для ATMega162:
По умолчанию CKSEL3..0 выставлен в состояние 0010 и CKDIV8 = 0.
Это задает работу от внутреннего RC генератор на 8 Мгц c делителем на 8.
В результате контроллер работает на частоте 1 МГц :)
Для работы с внешним кварцем необходимо CKSEL3..0 выставить в состояние 1110 или 1111.
Для ATMega16:
По умолчанию CKSEL3..0 выставлен в состояние 0001.
Это задает работу кристалла от RC генератора на частоте 1 МГц.
То же самое, что и для ATMega162 надо выставить CKSEL3..0 в состояние 1111.
CKOPT лучше оставить незапрограммированным (=1).
PS. 1 означает незапрограммированное состояние бита.
Ой, извиняйте, я имел в виду не "по умолчанию", а не запрограммированы (=1) ;)
С аськой облом - я в деревню уехал, а инет здесь...
Такой вопрос: покопал прошивку и увидел обработчик INT0 - это я что-то путаю или так надо, нога ведь в воздухе висит ?
Добавил распознавание 0 сектора. Это дало возможность работать с картами отформатированными под FAT16 и содержащими либо несодержащими таблицу разделов.
Протестировал с двумя MMC картами, проблем не выявил.
Остаются открытыми два вопроса:
1) Работоспособность SD карт
2) Работоспособность прошивки под ATMega16
По 1-му: на SD карте Panasonic 8Mb успешно включается режим SPI, но карта не выводиться из Idle режима. Пробовал команды CMD1, CMD5, ACMD41. Буду копать дальше.
По второму вопросу пока ничего, практически не проверял, но теоретически всё в норме.
Попробовал другие кварцы (14.000, 8.000), как и предпологал ничего не дало :(
Состояния с картой/без карты отличаются, но вместо "C_er" пишет "C 0" и счетчик на 0 сбрасывает, потом "b 0" и ждет в этом положении. Если снова жмешь play - "b_er"
DVS, может вставишь в прошивку выдачу отладки на RS232?
James DiGreze
05.06.2006, 06:15
По 1-му: на SD карте Panasonic 8Mb успешно включается режим SPI, но карта не выводиться из Idle режима. Пробовал команды CMD1, CMD5, ACMD41. Буду копать дальше.
алгоритм инициализации (проверен на нескольких картах):
CS=1,
выдем 10 байт #0FFh в карту,
(далее как для каждой команды)
CS=1
выдем синхро-байт #0FFh
CS=0
выдем синхро-байт #0FFh
выдаем #040h (CMD0, "go idle")
выдаем четыре #000h (параметры)
выдаем #095h (CRC7 для CMD0, можно не менять для остальных команд)
(далее опять только для инициализации)
выдаем #0FFh, при этом одновременно читается отклик,
если отклик равен #0FFh, то опять читаем отклик
если полученный отклик не равен #001h, то ошибка (входим в ступор или на начало ;))
(теперь выводим карту из IDLE)
CS=1
выдем синхро-байт #0FFh
CS=0
выдем синхро-байт #0FFh
выдаем #041h (CMD1, "card init")
выдаем четыре #000h (параметры)
выдаем #095h (CRC7 для CMD0, для остальных CMD это неверно, но игнорируется картой...)
(ждем готовности карты)
выдаем #0FFh, при этом одновременно читается отклик,
если отклик равен #0FFh, то опять читаем отклик
если полученный отклик не равен #000h, то продолжаем читать отклик "до победного".
при отклике =0 в данной точке можно считать карту инициализированной, и далее работать с ней без заморочек.
PS: Надеюсь, кому-нибудь пригодится :)
2 jdigreze
Всё аналогично, но в pdf для SD с сайта www.sandisk.com написано, что CMD1 для SD
"не катит" и нужно пользоваться ACMD41, я пробовал выдавать 40h+41dec и просто 41h (CMD1), дык в обоих случаях в response R1 взведён бит 0 (карта в idle) и бит 2 (недопустимая команда). Может нужно в этом случае CRC правильный слать?
Не пойму пока в чем фишка... А ты на SD пробовал этот алгоритм?
2 skyther
Без вопросов отладку поставлю. Напиши ещё, как ты схему всё-таки построил.
James DiGreze
05.06.2006, 10:44
А ты на SD пробовал этот алгоритм?
Работает 100%. Выслал тебе на электромыло свои сырцы для at89s8252.
ACMD41, если не ошибаюсь, требуется для работы с криптованием, а обычные разделы видны как на MMC.
Работает 100%. Выслал тебе на электромыло свои сырцы для at89s8252.
Спасибо, смотрю... Но процентов на 99% уверен, что у меня делается всё точно также и даже с CRC тот же мухлёж.
Карта SD Panasonic 8Mb, какие ещё могут быть траблы? Частота SPI высока? Думаю, что 3,5МГц вполне щадящий режим.
Полярность сигналов по SPI? Наверное нет, на всех MMC всё проходит на ура.
Напиши ещё, как ты схему всё-таки построил.
По твоей схеме ;). Собрано на слепыше у ленинграда. Карта и нидикатор висят на проводах (~10 см), кнопок нет - тыкаю проводом в индикатор. Питание меги 3.3, тактовая от неё идёт в спек.
тыкаю проводом в индикатор
Антидребезг у меня конечно вставлен, но не исключён дабл клик :-)
Поясни ещё ситуацию с C_er. Уже не появляется?
Если выводиться "C 0" это значит ты открыл не существюущий файл, либо в файле нет поддерживаемых tzx тэгов. А "b 0" значит что ты вошёл в меню воспроизведения блоков(тэгов) и при нажатии play у тебя появилось b_er, это опять же означает, что нет поддерживаемых tzx тэгов.
Попробуй разные tzx. Когда при нажатии из позиции "F n" появиться "C m", где m не нуль, значит парсинг tzx файла прошёл успешно и найдено m блоков.
C_er появляется с SD. Пробовал разные tzx, втч и из этой темы. Брось плиз образ карты (winimage), которая у тебя работает. Размер желательно 32 Мб, но можно и другой - подгоню.
James DiGreze
05.06.2006, 11:34
Спасибо, смотрю... Но процентов на 99% уверен, что у меня делается всё точно также и даже с CRC тот же мухлёж.
Карта SD Panasonic 8Mb, какие ещё могут быть траблы? Частота SPI высока? Думаю, что 3,5МГц вполне щадящий режим.
Полярность сигналов по SPI? Наверное нет, на всех MMC всё проходит на ура.
У меня, конечно, выбор SD небольшой. Обкатывал на Verbatim 256Mb и Kingston 128Mb.
Частота у меня ~2,8MHz.
Проверь регистр конфигурации SPI. У меня вот так:
in SPCR (#D5)
7. spie = 0 (без прерываний)
6. spe = 1 (SPI включен)
5. dord = 0 (Старший бит идет первым)
4. mstr = 1 (Работаем Хозяином :))
3. cpol = 0 (Полярность. При простое SCK=0)
2. cpha = 0 (Фаза. Действительные данные при SCK=1. Устанавливаются до фронта SCK, снимаются после.)
1. spr1 = 0 (делитель...
0. spr0 = 0 ...HCLK/4)
2 jdigreze
Всё аналогично.
2 skyther
В общем дома поразбираюсь.
Сейчас пока нету возможности image снять и debug вставить.
James DiGreze
05.06.2006, 12:18
А может-таки трабл из-за логической структуры диска?
У меня SD'шки имеют и MBR (в нулевом сектор), и PBRS (описатели логических разделов). В MBR у меня только одна "запись" - указатель на PBRS, который имеет адрес #0C900h (для Verbatim 256Mb) и #0CC00h (для Kingston 128Mb). В PBRS находится тоже только одна запись, указывающая на начало Primary Partition.
Я с этими описателями наверно месяц мучался, не мог понять, почему в MBR нет указания на Primary Partition...
2 jdigreze
Вот тут надо поразбираться. Дело в том, что 0 сектор при форматировании перезаписывается. Если форматировать под виндой то, в нулевой сектор сразу начинается с BOOT record primary partition (это где первые три байта JMP EB3C90 ), а если на Palm или в фотике, то в нулевой пишется PBRS (это где 4 описателя разделов по 16 байт, но юзается только самый первый, а в конце два байта сигнатуры 0x55AA) и уже оттуда можно попасть в BOOT record primary partition (это где первые три байта JMP EB3C90 ).
А вот MBR я в нулевом секторе никогда не видал... Может просто в терминологии не стыкуемся?
James DiGreze
06.06.2006, 06:02
А вот MBR я в нулевом секторе никогда не видал... Может просто в терминологии не стыкуемся?
Ага. Видимо так. ;) Вот мое понимание:
В классической терминологии (применительно к HDD), MBR - MasterBootRecord, находится в 0-м секторе любого диска. В нашем случае, любой флэш можно отформатить, и как "винт", и как "флоп". У меня с магазина было отформачено как HDD. По-этому присутствует MBR (у "флопового" формата нет MBR), в которой находится таблица для 4-х Primary partitions:
offset - len (bytes)
-----------
0x1BE - 16
0x1CE - 16
0x1DE - 16
0x1EE - 16
0x1FE - 2 (0x55,0xAA)
Внутри каждой записи находится смещение на PBRS (Partition Boot Record Sector). А вот уже в PBRS указывается информация о структуре раздела, в нашем случае FAT16. Т.е. офсеты, кол-ва секторов на FAT, Root и прочее указывается именно в PBRS.
2 jdigreze
Это я в своём посте напутал с терминами ( долго вспоминал и обозвал по своему :-), да простят меня гуру в этой области и не закидают памидорами ), но суть одна и таже, хотя я считаю, что MBR (буквы S в конце нету) - это загрузочный блок длиной 446 байт (сидит в нулевом секторе). А за MBR следует Partition Table, которая может указывать на 4 PBRS сектора.
К логической структуре сейчас хорошая привязка. Пробовал форматировать на разных девайсах.
Алгоритм такой:
1) Читаю 0 сектор и анализирую первые три байта, если они EB,3C,90 то считаю, что это PBRS и MBR c Partition Table отсутствуют.
2) Иначе, считаю, что в нулевом секторе есть Partition Table и джамп на PBRS делаю оттуда.
3) Парсинг и проверки на совместимость с FAT16...
Всё это работает, если при форматировании MBR заполняется 00 или FF, я ещё не встречал чтобы было что-то другое. Но возможна корректировка алгоритма. Предложения?
2 skyther
Ссори за формат файла, сегодня вечером поправлю. Это "нечто" для debugera :-)
James DiGreze
06.06.2006, 09:18
Всё это работает, если при форматировании MBR заполняется 00 или FF, я ещё не встречал чтобы было что-то другое. Но возможна корректировка алгоритма. Предложения?
Все правильно! ...должно работать. На моих картах MBR заполнен #000h, за исключением, естественно, самой Partition Table ;)
Предложения? Хз. Нужен дамп 0-го сектора с конкретного экземпляра флешки.
2 skyther
А действительно, можешь нуль сектор (в разных вариантах) считать и выложить?
2 skyther
Пробуй! (HEX Intel-extended)
Могу ещё hex eepromы выложить, если -1 смущает :-)
Если не заведётся, то буду подключать 16 мегу (есть одна в запасе) и "копать"...
Вот имиджи с ММС карты. Фрматировал win2k и winImage, SL45 отказывается :( видать перехимичил...
УРА, ОНО РАБОТАЕТ !!! :)
В чём был косяк?
Загрузил игру (15 блоков) - работает :) Пацаны, с меня пиво !!!
Поздравляю. Ты один из первых, кто повторил FlashTaper!!!
Я догадываюсь в чём косяк был... Ну да ладно.
Запись пробуй, другие TZX пробуй, короче всё пробуй. Тока кнопки не забудь прикрутить :-)
PS: завтра выложу v2.2 для ATMega16 и 162 в первом посте.
Если не трудно погоняй SD-шки, а то у меня одна на 8Mb и она меня в ступор вводит.
Погонял разные tzx, вроде всё ОК :) SD завтра вечером проверю.
Как реализована запись? Если, например, читаем заголовок + файл, они пишутся в разные tzx?
Про запись я уже писал, но мне не трудно повторить.
Принцип записи слотовый. Т.е. в директории SPECCY пользователь должен создать несколько файлов(слотов) с именами формата N.tzx (в общем как обычно). Создавать файлы(слоты) рекомендую простым копированием какого либо большого файла, а затем его нужно переименовать в N.tzx. Размер файла выбирается произвольно, расчитывая время на которое расчитана запись исходя из скорости сэмплирования 22050 отсчётов(бит)/секунду.
Далее выбираешь в меню нужный номер файла и вместо того чтобы нажать play жмёшь record (другая крайняя кнопка), а затем play.
После записи полученый файл можно считать и проверить в эмуляторе ;-) (я так несколько игр с кассет "цифранул").
Я не это имел ввиду, что в существующий файл пишем я понял. Вопрос в следующем: если читаем 2 блока (малой длины, в один tzx входят), они запишутся в один и тот же tzx или в разные, по очереди? (мне думается что в один...)
James DiGreze
07.06.2006, 06:47
Вот имиджи с ММС карты. Фрматировал win2k и winImage, SL45 отказывается :( видать перехимичил...
Или нет MBR, тогда отформатированно как флоп, или считано не с 0-го сектора. Скорее всего первое, с учетом реакции SL45...
В любом случае, ПОЗДРАВЛЯЮ С УСПЕШНЫМ ЗАПУСКОМ! :v2_clapp:
2 skyther
Всё будет записываться в один файл. Лимит по времени определяется размером слота. В общем-то запись в чём то похожа на запись WAV (используется тэг 15h TZX Direct Recording ).
Мне в общем надо оформить нормальное руководство по эксплуатации. Ещё нужно подумать над дальнейшим развитием проекта... прикручивать алфавитно-цифровой ЖКИ или лучше добавить управление через T_in/T_out как уже предлагалось, а может вообще к ZX_BUS подрубить и рулить через доп. порты + 254 :-) Осталось где-то 4,5-5Кб CODE mem.
James DiGreze
07.06.2006, 10:29
ЖКИ не надо. Давай лучше по T_in/T_out обмен наладим ;)
Кстати, я себе уже все детали закупил, осталось собрать все в кучу, так что скоро буду юзать...
Я делал индикатор на жк от часов (4 разряда),
для автономной работы - 5 мс 176-й серии :),
управление - 5 линий ...
Жрет мало, процессор не напрягает.
И главное - стоит копейки :)
Можно, кстати, прикрутить ЖК аналог того индикатора, который сейчас используется не переделывая схему и прошивку.
Предлагаю обратный счётчик добавить (в секундах или мин:сек), в паузе (и после выбора файла) - общее время, а при воспроизведении - текущий блок.
Управление через out вроде уже предлагалось - формируем бейсик с табличкой номер:имя, а потом кнопками выбираем, сбрасываем спек и грузим как обычно. Можно на кнопку \"mode\" добавить \"play cat\".
Ещё можно пищалку сделать: жмешь кнопку - пищит ;), ошибка - другой звук.
\"Можно, кстати, прикрутить ЖК аналог того индикатора\"
А какой сейчас используете? :)
Часовой жк стоит 30р, плюс детальки -20р
2 skyther
Перед началом воспроизведения отображается общее число блоков, а при воспроизведении отображается номер текущего блока \"P__N\".
При записи отображается процент заполнения слота.
Со временами дела обстоят так:
Нужно при расчёте времени делать довольно серьёзный парсинг(разбор) и учитывать, что разные блоки воспроизводяться с разными скоростями (особенно образы с защитой), а как быть с подгружаемыми уровнями?
2 ASDT
Индикатор светодиодный CC56-12EWA около 2$, но учитывая интерфейс можно прикрутить любой другой (более мелкий, более крупный).
АЛС318 рулез ;) 9 цифр и никаких доработок железа.
АЛС318 рулез ;) 9 цифр и никаких доработок железа.
У меня тоже есть широкий индикатор с маленькими циферками и линзочками надо каждой цифрой. По-моему тоже 318. Смотрится великолепно (у меня в частотомере установлен).
\"9 цифр \" Он наверно кушает много :)
\\\"9 цифр \\\" Он наверно кушает много
Может и много, только у меня всё на плате спека собрано и питается от ATX ;)
А мобильный девайс вы хотите от батареек/аккамулятора питать?
А мобильный девайс вы хотите от батареек/аккамулятора питать?
А как же? На то он и мобильный девайс, что бы АЭС за собой на тележке не возить :)
\"мобильный девайс\"
Собственно да, внешнее ус-во, соответственно
питание туда заводить нежелательно ...
АЭС за собой на тележке
А я всё думал: чего это провода к индикатору дымятся ;)
А серьёзно: берём старую трубку и достаём дисплей с аккамулятором ;)
А фрагментированные файлы поддерживаются? Была несколько раз ошибка \"F_er\", которая устранялась после полного стирания и записи tzx файлов.
А фрагментированные файлы поддерживаются? Была несколько раз ошибка \\\"F_er\\\", которая устранялась после полного стирания и записи tzx файлов.
Нет пока не поддерживаются, но работы в этом направлении ведутся. Для этого надо доволно много переделать, в частности добавить хорошую буферизацию. Дело в том, что пока идёт воспроизведение \"беготня\" по секторам может превысить межбитный интервал.
James DiGreze
07.06.2006, 13:50
А сразу после выбора файла может быть можно построить цепочку в ОЗУ по принципу: 4 байта - адрес сектора (не номер), 1 байт - длина нефрагментированного участка. Выделить под это дело байт этак 50, т.е. на цепочку из 10 фрагментов. Если длина равна нулю - конец цепочки. Если файл фрагментирован более 10 фрагментов, то \"еггог\" еще до старта вывода...
2 jdigreze
Да, это нужно сделать, но только ошибка у меня всё равно появляется до начала воспроизведения потому как парсинг идёт и там проверяется целостность блоков файла. Хотя есть вероятность того, что парсинг проскочит \"не родные\" сектора.
Поэтому наверное проще добавить перед парсингом проверку на смежность кластеров файла. Просто по фату пробежаться от начала файла и до конца :-)
Погонял SD карту, не работает :( Вот лаги с теримнала:
MMC_GO_IDLE: OK
MMC_SEND_OP_COND: FAILED
DOS_mmcStartMR: FAILED
2 skyther
Спасибо. Это очень важная информация. Получилось тоже самое, что и у меня с SD. Надо разбираться...
James DiGreze
08.06.2006, 06:09
Просто по фату пробежаться от начала файла и до конца
Честно сказать, я думал, что у тебя так и сделано... Видимо обшибси... :v2_smoke:
Хм. И странно, что SD не хочет реагировать на CMD1. Вот что по этому поводу пишет SanDisk:
The host must poll the card (by repeatedly sending CMD1) until the ‘in-idle-state’ bit in the card response indicates
(by being set to 0) that the card completed its initialization processes and is ready for the next command.
Т.е. CMD1 (set_op_cond) должен в любом случае вывести карту из сна, но эту команду нужно посылать многократно, пока не сбросится бит <<in-idle-state>>.
И еще:
In SPI mode, however, CMD1 has no operands and does not return the contents of the OCR register. Instead, the
host can use CMD58 (SPI Mode Only) to read the OCR register. It is the responsibility of the host to refrain from
accessing cards that do not support its voltage range.
А вместо OCR, будет возвращаться один байт - R1, в котором бит <<0>> и есть <<in-idle-state>>.
В общем, хз... Я полностью ориентировался на SD, и отличий от MMC не знаю. А документ от SanDisk называется ProdManualSDCardv1.9.pdf, если не найдешь, пиши на мыло, отправлю... Правда там около 1,1Мб ;)
Честно сказать, я думал, что у тебя так и сделано... Видимо обшибси...
В следующих версиях будет доделано ;-)
Т.е. CMD1 (set_op_cond) должен в любом случае вывести карту из сна, но эту команду нужно посылать многократно, пока не сбросится бит <<in-idle-state>>.
Он не только не сбрасывается, там ещё и бит <<illegal command>> взведён!
У меня подозрения закрались насчёт реакции SD на отпускание CS... Дело в том, что Response R1 (после отправки команды и CRC) я читаю так: тактирую SPI побайтно, т.е. по 8 бит, и смотрю, что мне в регистр сваливается, как только это что-то отлично от 0xFF я прекращаю тактирование, считаю что принял R1 и отпускаю CS. Но по идее нужно читать ещё 40 бит, так как длина R1 48бит, но зачем это делать если полезная инфа содержиться только в первых 8 битах!!!
Поэтому я считал, что после отпускания CS, карта при следующем CS не будет пытаться вывести мне оставшиеся 40 бит.
В общем, то в обоих вариантах результат не удовлетворительный SD отказывается выходить из Idle, мало того во втором варианте с чтением всех 48 бит R1 отличается от полученного по первому варианту (8 бит) !!! :-)
Продолжаю поиск решения...
PDF у меня вроде достаточно, даже на какой то проц Intel XCA Application Note скачал, там написано как SD инициализировать: CMD0, CMD55, ACMD41 - пробовал и так.
Вот как это делается:
u08 mmcCommand(u08 cmd, u32 arg)
{
u08 r1;
u08 retry=0;
// send command
spiTransferByte(cmd | 0x40);
spiTransferByte(arg>>24);
spiTransferByte(arg>>16);
spiTransferByte(arg>>8);
spiTransferByte(arg);
spiTransferByte(0x95); // crc valid only for MMC_GO_IDLE_STATE
// end command
// wait for response
// if more than 8 retries, card has timed-out
// return the received 0xFF
while((r1 = spiTransferByte(0xFF)) == 0xFF)
if(retry++ > 8) break;
// return response
return r1;
}
u08 mmcSendCommand(u08 cmd, u32 arg)
{
u08 r1;
// assert chip select
SPI_CS = 0;
// issue the command
r1 = mmcCommand(cmd, arg);
// release chip select
SPI_CS = 1;
return r1;
}
u08 mmcReset(void)
{
u16 retry;
u08 r1=0;
retry = 0;
do
{
// send dummy bytes with CS high before accessing
spiTransferByte(0xFF);
spiTransferByte(0xFF);
spiTransferByte(0xFF);
spiTransferByte(0xFF);
// resetting card, go to SPI mode
r1 = mmcSendCommand(MMC_GO_IDLE_STATE, 0);
// do retry counter
retry++;
if(retry>100)
{
#ifdef DEBUG
USART_puts("MMC_GO_IDLE: FAILED");
#endif
return 0xFD;
}
} while(r1 != 0x01);
#ifdef DEBUG
USART_puts("MMC_GO_IDLE: OK");
#endif
// TODO: check card parameters for voltage compliance
// before issuing initialize command
retry = 0;
do
{
// initializing card for operation
r1 = mmcSendCommand(MMC_SEND_OP_COND, 0);
// do retry counter
retry++;
if(retry>5000)
{
#ifdef DEBUG
USART_puts("MMC_SEND_OP_COND: FAILED");
#endif
return r1;
}
} while(r1);
#ifdef DEBUG
USART_puts("MMC_SEND_OP_COND: OK");
#endif
...
Повторю, что с MMC работает на УРА. Я mmcReset вообще делаю перед воспроизведением каждого файла :-)
James DiGreze
08.06.2006, 10:19
DVS, попробуй эту функцию вот в таком виде. ;)
u08 mmcSendCommand(u08 cmd, u32 arg)
{
u08 r1;
// release chip select
SPI_CS = 1;
spiTransferByte(0xFF);
// assert chip select
SPI_CS = 0;
spiTransferByte(0xFF);
// issue the command
r1 = mmcCommand(cmd, arg);
return r1;
}
В том документе, который у меня, там требуется постоянно перед и после снятия /CS слать синхру по SCK в кол-ве 8 штук при MOSI=1.
Хех, интересно про такой метод тактирования я инфы не находил, смотрел только "времянку" (диаграмма с задержками) для MMC.
Вечером попробую и отпишусь.
При посылке синхры после изменения CS, карта стала выходить из idle!!!
Но "чем дальше в лес-тем болше дров" теперь карта непонятно как выходит из MULTIPLE_BLOCK_READ и MULTIPLE_BLOCK_WRITE, дело в том, что стоит только вогнать её в режим MULTIPLE_BLOCK_READ, затем сбросить контроллер и попытаться провести инициализацию, то в R1 будет 0x3F (стабильно). А когда мне требуется снова режим MULTIPLE_BLOCK_READ, но с другого сектора, то карта вобще в него не входит. Попытался сделать STOP_TRAN ( CMD12 ), эффект есть, но не всегда.
Короче говоря MULTIPLE_BLOCK_READ с определённого сектора включается только один раз после инициализации. Я попытался прочитать PBRS, всё ок, данные правильные.
Попытался сделать перед началом MULTIPLE_BLOCK_READ
mmcReset(), в которую перед CMD0, добавил CMD12 и всё запустилось! Но!!!
Мне так не нравится :-((( Как то оно жёстко и в лоб, всё равно, что перед запуском другого приложения винду перегружать :-)
James DiGreze
09.06.2006, 07:59
А процедуру MULTIPLE_BLOCK_READ (CMD18) можно подсмотреть? А то я пользовался по-секторным... Кстати, CMD12 (STOP_TRAN) обязательна для останова выполнения CMD18 и CMD25, после неё нужно отослать #0FFh (при этом должны получить от карты #0xFh, где х - любое число), далее опять шлем в карту #0FFh, при этом должны получить response = #0FDh, что говорит об успешном завершении обмена.
Ну, вот вроде бы и всё...
А процедуру MULTIPLE_BLOCK_READ (CMD18) можно подсмотреть?
В смысле код функции интересует?
после неё нужно отослать #0FFh (при этом должны получить от карты #0xFh, где х - любое число), далее опять шлем в карту #0FFh, при этом должны получить response = #0FDh
Буду разбираться, а пока с полным сбросом всё работает :-)
Кстати, что если сразу после инициализации до начала MULTIPLE_BLOCK_READ, послать CMD12 ? Я посмотрел R1=0, но в MULTIPLE_BLOCK_READ не входит, точнее так на команду MULTIPLE_BLOCK_READ R1=0, дальше жду синхробайта в ответ (долго жду) и не дожидаюсь :-)
И ещё момент (может из предыдущих сообщений не понятно было): если войти в MULTIPLE_BLOCK_READ и счиать определённое кол-во байт, затем не делать STOP_TRAN!!!, то GO_IDLE хоть запосылайся - сброса не будет! Поэтому на всякий случай пришлось перед GO_IDLE сделать STOP_TRAN. Иначе только питание отключать или карту вынимать, а это не хорошо.
Всё таки в MMC как то оно логичнее что-ли сделано, хотя если бы я группой команд MULTIPLE_... не пользовался, то ничего и не заметил.
James DiGreze
09.06.2006, 10:29
В смысле код функции интересует?
Ага. Если не хочешь на всеобщий доступ, пиши на мыло ;)
Буду разбираться, а пока с полным сбросом всё работаетОднако, это не правильно...
Кстати, что если сразу после инициализации до начала MULTIPLE_BLOCK_READ, послать CMD12 ? Я посмотрел R1=0, но в MULTIPLE_BLOCK_READ не входит, точнее так на команду MULTIPLE_BLOCK_READ R1=0, дальше жду синхробайта в ответ (долго жду) и не дожидаюсь
Хз. Но скорее всего так делать нельзя...
И еще. Сразу не обратил внимание. Считывать блоки нужно по 512 байт + 1 байт начала блока + 2 байта CRC для каждого сектора. Если произвольно послать CMD12, то данные (512байт) нужно дочитать до конца + CRC, и только после этого придет респонз.
И ещё момент (может из предыдущих сообщений не понятно было): если войти в MULTIPLE_BLOCK_READ и счиать определённое кол-во байт, затем не делать STOP_TRAN!!!, то GO_IDLE хоть запосылайся - сброса не будет! Поэтому на всякий случай пришлось перед GO_IDLE сделать STOP_TRAN. Иначе только питание отключать или карту вынимать, а это не хорошо.
После входа в MULTIPLE_BLOCK_... карта реагирует только на CMD12 и питание ;) И это нормально!
Кстати, GO_IDLE лучше не делать. Нет смысла. У меня хоть и посекторно работает, но постоянное чтение/запись идет в разные области карты, и все нормально.
Всё таки в MMC как то оно логичнее что-ли сделано, хотя если бы я группой команд MULTIPLE_... не пользовался, то ничего и не заметил.
Скорее всего MMC карты менее требовательны к полноте реализации протокола. Карты SD сложнее устроены, с ними и работать приходится сложнее. :)
ЗЫ: У тебя ящик электропочты 1,5Мб примет? Давай док вышлю, там с диаграммами очень всё наглядно...
Кстати, GO_IDLE лучше не делать. Нет смысла.
Я не сторонник слишком ветвлённых функций, поэтому предпочитаю, пусть оно будет в одном месте и сгодиться в любом случае, как при смене на новую карту, так и при переинициализации текущей карты.
То что ты просил лежит у меня на ftp. Туда же можешь положить pdf. Инфу для доступа смотри в привате.
James DiGreze
09.06.2006, 12:07
Вот такой у меня вопрос возник: данные о файлах внутри tzx имеют выравнивание, или же отделяются маркерами?
Это я к тому, что у тебя при чтении, после посыла STOP_TRANS идет retry на 255 байт, а если, например сектор считан от начала всего на 10 байт, а потом ты шлешь STOP_TRANS, после чего пытаешься дождаться в течении 255 байт респонза, то его не получишь, в результате все остальные команды будут игнорироваться. Попробуй после посыла CMD12 дочитать текущий сектор до конца (+2 байта CRC), и лишь потом войти в цикл ожидания респонза. Респонз должен прийти через 1 байт.
данные о файлах внутри tzx имеют выравнивание, или же отделяются маркерами?
И не то и не другое.
Это я к тому, что у тебя при чтении, после посыла STOP_TRANS идет retry на 255 байт, а если, например сектор считан от начала всего на 10 байт, а потом ты шлешь STOP_TRANS, после чего пытаешься дождаться в течении 255 байт респонза, то его не получишь, в результате все остальные команды будут игнорироваться. Попробуй после посыла CMD12 дочитать текущий сектор до конца (+2 байта CRC), и лишь потом войти в цикл ожидания респонза. Респонз должен прийти через 1 байт.
Я про это знаю. За выходные думаю "выйдет каменный цветок" :-)
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot