ZiFi FAQ

ZiFi — комплект аппаратного и программного обеспечения, реализующий задачу подключения модуля беспроводной сети WiFI к ZX EVO
Предупреждение: собственно я пока что даже не держал в руках этого модуля, и тем более не подключал.
Однако, этот модуль WiFi очень хорошо, даже слишком хорошо задокументирован. Инфу эту тяжко разгребать.
Этот материал создан на основе впечатлений от прочитанной документации. Пока что он предназначен для общего ознакомления с предметом и в нем могут быть неточности…


Q: Зачем это все и в чем отличие от других «супермегадевайсов» для «Интернета на Спектруме»
A: Близких по сути девайсов и способов было множество, подключались как при помощи Ethernet, так и по последовательному порту. Все упиралось в написание ПО всех уровней. Были вариации где Z80 реализовывал работу на уровне TCP сам, либо реализовывал сторонним процессором вместе с интернетом. Были вариации где сторонний компьютер брал эту работу на себя и передавал «пережеванные» данные по последовательному порту. Однако все это было в целом на довольно низком уровне протоколов — передать пакеты байтов. Дальше эти пакеты байтов надо разобрать и отобразить, а они в наше время — большие и сложные. На тех системах даже «простой текстовый» протокол для IRC-чата осилили не полностью. И что-то там еще несложноe с HTTTP. Никто не написал «Firefox for ZX Spectrum». В современности для отображения «любого сайта» требуется большое количество ресурсов, не только аппаратных, но и программистских. Частичное решение этой проблемы придумано давно — используются сервера-посредники для «упрощения» контекста и главное — делают упрощенные веб-странички для простых устройств. Можно очень долго и упорно программировать это все, уж сразу чтобы HTML паковался в SCR 6912 байт и просто отображался — другими словами то что сейчас любой сотовый сделает и быстрее и красивее.
Зато Спектрум гораздо лучше всего отобразит контекст подготовленный специально под него: те же SCR и гигаскрины, музыку, само-собой — демки, и прессу. Плюс есть образы дисков, которые отображаются… как диски. И сам отобразит он это лучше всего, остальное — эмуляция. «Реал», как говориться, «для того и нужен».
При этом самая рутинная операции остаются: включить и загрузить «большой» комп, куда то там залезть, скачать, распаковать и пожонглировать карточкой памяти. Первое что приходит на ум: использовать так называемую «беспроводную» карточку памяти и легким движением пальца (или мышки) сбрасывать на нее .trd. Но оказывается, что создатели таких карточек и думать не хотели, что мы будем сбрасывать на нее что-то иное кроме фоточек и музычки. Надо заметить, что есть карточки памяти, которые можно «потюнинговать» на работу с файлами любых типов — на них же все для этого есть: WiFi часть, процессор с Linux и Flash память — довольно типовой программируемый модуль. Такой модуль может больше — сам «залезть» в интернет и скачать файл, и даже путь до этого файла от Z80 получить. Однако такая WiFi-SD-карта не слишком удобна для ведения разработки: она, банально говоря, закрыта, и программно и, вообще то аппаратно, да и стоит недешево.
Поэтому нужен модуль для разработчика устройств с WiFi, с интерфейсами для подключения внешнего процессора и отладчика. Таких готовых модулей разработали немало, но самый дешевый и популярный среди них — только один.

Q: Что за модуль
A: Применяемый модуль для работы с WiFI представляет собой довольно мощный микроконтроллер, или даже систему на кристалле ESP8266.
Процессорная часть в нем объединена с различными интерфейсами, в том числе непосредственно WiFi, а так же небольшое ПЗУ с низкоуровневыми процедурами. Однако flash-память для программ и данных распаянна отдельной микросхемой, причем она бывает самых разных по объему.
Система эта довольно мощная, как-никак тактовая частота 80Мгц. Эмуляцию целого целого Спектрума может и не потянет, но в целом — уже где то близко к этому.
Практически на одной микросхеме можно поднять неслабый сервер, HTTP или например для Maincraft. Было бы программное обеспечение (то есть прошивка и среда для написания оных прошивок).
А с ПО проблем нет. Что специфично — процессорное ядро ESP8266 имеет свою более менее оригинальную архитектуру и нужен особый компилятор. Родной компилятор для ядра публично не доступен, да такм и свои заморочки. Однако набор для разработчика ПО (SDK) доступен публично, а так же публично доступен отдельный открытый компилятор на принципах GNU.
В результате появилось дикое количество самодеятельных средств для разработки, включая на базе Arduino. И понаписана масса прошивок, имеющих функционал сильно отличающегося от оригинальной прошивки: реализацию скриптовых языков Lua, Java, Basic, а так же остроспециализированных.
Понятно дело, что такая система сможет сама и в интернет залезть, и любой файл скачать, да и проиграть тоже.
Однако развивается и оригинальная прошивка, которая ориентирована на выполнение команд внешнего микроконтроллера, подключаемого по интерфейсу UART (TTL).
Таким образом стандартный модуль на ESP8266 практически не отличается от огромного количества других модулей с WiFi или просто Ethernet.
Так же работу этого модуля может выполнить любой другой программируемый девайс с выходом в интернет, в том числе обыкновенный компьютер (для этого и паять то ничего не надо, был бы софт для компа).
Но модуль этот очень маленький и очень дешевый…

Q: Как это работает.
A: Система вышла довольно витиеватой. Сам Z80, как известно своего UART не имеет (в давние времена это была отдельная большая микросхема). Однако в Atmega 128, которая находится на плате ZX EVO есть даже два UART.
Один из них удачно выведен на разъем на материнской плате, а вот второй выведен «наружу» в виде интерфейсов RS232 и USB. То есть подключить к этой Atmega можно хоть детектор гравитационных волн, лишь бы он подходящий порт имел.
ESP8622 штатно правда не шибко терпим к сигналу размахом 5В, но это решается, минимум — двумя резисторами. И ничто не мешает Atmega передавать все возможные команды на ESP8266, и получать с него данные, и соединяться и файлы качать.
Собственно, так и было сделано в 100500 других проектов, а в нашем случае Atmega просто работает интерфейсом UART для процессора Z80. То есть цепочка такая:
Z80 стандартными OUT выдает команды на Atmega128, она эти команды передает ESP8622. И обратно — получает данные, и передает их на Z80.
Если быть совсем точным, то команду OUT декодирует FPGA и передает через интерфейс SPI на Atmega. Но было реализовано уже давно, при создании EVO, и к делу это не сильно относится, но прошивку для Atmega надо было «научить» передавать на модуль WiFi.
ESP8622 модуль можно было бы напрямую подключить к FPGA, но это бы потребовало модификации прошивки или FPGA или самого модуля, что заметно сложнее. Для каких либо других Спектрумов придется реализовать этот контроллер UART по другому и другими микросхемами.

Q: Надо ли и как заменить прошивку для Atmega 128 на ZX Evo
A: Надо. без нее не заработает. Заменить можно штатными способами, описанным в документации: nedopc.com/zxevo/rom/zxevo_firmware_update.pdf
Это заливка через карточку памяти, а так же заливка по последовательному интерфейсу. Так же можно прошить и Atmega и FPGA соответствующими программаторами, благо разъемы есть, но это на крайний случай.
саму прошивку брать здесь: github.com/tslabs/zx-evo/blob/master/pentevo/avr/current/default/zxevo_fw.bin

Q: Надо ли заменить прошивку для модуля ESP8266
A: Возможно и придется. Модулей таких, с самыми разными версиями прошивок в них, продается очень много. Модуль может быть просто несовместимым, или со старой прошивкой.

Q: Как заменить прошивку для модуля ESP8266
A: К процессу прошивки придется подходить индивидуально. Надо будет решить вопрос как подключить модуль к PC:
в общем случае нужен будет конвертер интерфейсов RS232 (COM) -TTL или USB — UART (TTL), то есть все действие пойдет через последовательный COM-порт.
Этот конвертер может быть выполнен на микросхеме FT232, CP2101, PL2303 или СР340/341, как правило в виде отдельного модуля. На модуле может быть и необходимый преобразователь 5В -> 3,3В, но он может быть слишком слабомощным, то есть встанет вопрос внешнего питания.
Если конвертер уже размещен на модуле (то есть на модуле есть USB разъем), то тут возникает скорее обратная проблема — как сделать так чтобы конвертер с USB не помешал связи модуля с EVO.
Согласно нескольким отзывам на дешевых модулях стоит поддельная микросхема FT232, с которыми возникают различные проблемы, как с установкой драйвера так и при работе.
Отдельно надо отметить, что на модуле ESP8266 должны быть кнопки или предусмотрены перемычки для того чтобы модуль перешел в режим прошивки. Собственно говоря для того, чтобы чтобы ESP8266 вошел в режим в прошивки нужно, чтобы после его сброса (традиционно питание убрать или подать '0' на сигнал RST) необходимо подать '0' (закоротить на корпус) сигнал GPIO00. Так как делать это многократно довольно хлопотно, то придумали делать это под управлением софта, при помощи служебных сигналов интерфейса RS232: DTR и RTS.
Собственно обмен данными в режиме прошивки осуществляет встроенный в ESP8266, загрузчик. Протокол неплохо задокументирован: github.com/themadinventor/esptool/wiki/Serial-Protocol
Возможностей в протоколе маловато, поэтому навороченные софтины сперва банально грузят в память свой загрузчик stub, а он уж делает что надо.

Поскольку модулей в целом довольно много разновидностей, то вероятно придется погуглить схему и подключение конкретного модуля.
Пример подключения 10 pin модуля к FT232:
Пример схемы для прошивки
Пример от AndyD:
Драйвера от производителей:
www.ftdichip.com/Drivers/VCP.htm
www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx
www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41
www.winchiphead.com/download/CH341/CH341SER.ZIP

Модули к тому-же выпускаются с самым разным объемом памяти, что так же влияет на процесс прошивки.
Свежую и универсальную прошивку под все виды модулей есть здесь, но требуется регистрация:
esp8266.ru/forum/threads/at-0-60-sdk-1-5-2-dlja-modulej-s-512k-flash.1001/
forum.tslabs.info/download/file.php?id=1505
Поэтому надо будет зазеркалить ее в месте поудобнее.
Главное ее достоинство — заливается только один файл начиная с адреса 0x000000 (в памяти модуля) и — готово.

Прошивальщиков так же много разных.

Мне понравилась утилита для командной строки, для всех ОСей кстати:
github.com/igrr/esptool-ck/releases
Запуск ее такой
esptool -vv -cd nodemcu -cb 115200 -cp COM3 -ca 0x00000 -cf at060esp8266ru.bin

ключи: -cd nodemcu (ck, none) — в зависимости от схемы подключения модуля.
-cp COMxx — номер (виртуального) порта, куда подцеплен модуль

Описание других утилит будет добавлено позже.

Для теста подключения (если прошивка уже совместимая) и для проверки новой прошивки есть утилитка:
github.com/AppStackCC/ESP8266-Config/blob/master/ESP8266%20Config.exe?raw=true
Она несколько странноватая но кое какие инструменты для игрищь с модулем в ней есть.

Q: Подключение модуля ESP8266 к ZX Evo
A: Cхема, которая спроектирована, так сказать, по «максимуму правильности», должна содержать специальные микросхемы для согласования уровня напряжений. Модуль ESP8266 питается и оперирует сигналами амплитудой 3.3В в то время как в EV0 в основном в ходу напряжения 5В. Однако напряжение 3.3В можно найти как минимум c ATX блока питания для EVO. Atmega128 в EVO в принципе может воспринять и сигналы амплитудой 3.3 с 8266 без дополнительных преобразований, а вот 5В сигнал с Atmega на 8266 можно уменьшить до 3.3 обычным резистивным делителем (два резистора).

Итоговая простая схема подключения примерно такая:
ESP8266 to ZX EVO
Резисторы 1К и 2К точнее должны быть 1К и 1.5К а еще лучше 10К и 15К.

Есть очень подробный теоретический материал про согласование уровней сигналов

FAQ V0.6! to be continued…

20 комментариев

avatar
процессорное ядро ESP8266 имеет свою более менее оригинальную архитектуру со своим компилятором, который к тому же публично не доступен
Ну как же извиняюсь недоступен, когда вот.
А в СДК в Makefile видим:

ifeq ($(COMPILE), gcc)
	AR = xtensa-lx106-elf-ar
	CC = xtensa-lx106-elf-gcc
	NM = xtensa-lx106-elf-nm
	CPP = xtensa-lx106-elf-cpp
	OBJCOPY = xtensa-lx106-elf-objcopy
	OBJDUMP = xtensa-lx106-elf-objdump
else
	AR = xt-ar
	CC = xt-xcc
	NM = xt-nm
	CPP = xt-cpp
	OBJCOPY = xt-objcopy
	OBJDUMP = xt-objdump
endif

что немного намекает на существование некоего отличного от гцц компилятора, но сам то гцц очень даже доступен.
  • tsl
  • +2
avatar
а умельцы реализовали отдельный открытый компилятор на принципах GNU.
А, ок.
  • tsl
  • +1
avatar
но это решается, минимум — двумя резисторами
Одним.

Еще, сейчас пошла маза компилить сборки под флешку 1МБ (старые модули комплектовались 512кБ). Однако, исследования показали, что конская доза флеша приходится на так называемую User Area, в которую юзер может пихать свои говнокоды. Поэтому, если все это поджать, то штатная АТ-прошивка очень даже влазит в 512к.
Вот здесь лежит собранная отечественными умельцами прошивка для 512кБ флеша, свежайшая на момент написания статьи. Причем лежит не кусками, а сразу одним файлом с батником для прошивки в комплекте.
  • tsl
  • +7
avatar
Отечественные умельцы на том форуме надо сказать активно изучают кишочки этого модуля и сильно хают оригинальный код. Ну и всяких фишек придумывают, турболоадер например. Им бы демы писать :)
avatar
я научился собирать эту прошивку
там нашлось два три небольших секрета
avatar
глупый вопрос: в унрыле будет поддержка ZiFi?
avatar
̧¡а как же! ты же не предлагаешь, сидеть и писать для zifi® в аласме? (:
avatar
мсье знает толк в извращениях (:
avatar
Я тебе даже больше скажу, уже прямо сейчас VBI проверяет в свзяке PC<->ZX работу программы.
avatar
Будет поддержка через USB-RS232 переходник на реальный модуль ESP-01.
Иначе придется писать эмуляцию всей АТ-прошивки, что займет человеко-столетия.
avatar
Вчера под стрим с Revison набросал еще немного
avatar
потихоньку апдейтиться. научился прошивку собирать в принципе можно новые вещи добавлять можно сделать отдельную диагностическую прошивку или версию — выдавать например данные о чипе памяти на модуле.
из софтов есть на посмотреть скоростной прошивальщик flash and chips. и натурально турболоадер для повышенной скорости загрузки модуля при старте.
avatar
материал вырос до версии 0.6
наконец то нарисовалась приличную схeму подключения к EVO
на основе вот этого материала
www.martyncurrey.com/arduino-esp8266/
avatar
А готовые экземпляры будет продавать кто? )
  • TmK
  • 0
avatar
TmK, очень просто заказать у tslabs
и, знаешь, тебе — я очень рекомендую
avatar
спс) буду заказывать)
avatar
а я ничего выписывать не буду
я экономить буду

ибо гичья хрень не нужная
avatar
это он такой злой потому что у него WiFi нету…
avatar
С М Е К А Е Ш Ь!
avatar
Скорее всего — я.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.