Root README: new "Интерфейсы" section listing the supported AT+ subset alongside the native SPI protocol. firmware/README.md: added the three AT-related fixes (lazy WiFi init before the first network AT command, AT+GMR display-capture timing, AT+NET_NTP -> standard AT+CIPSNTPCFG/ AT+CIPSNTPTIME) to the changelog - all verified present in current source before writing this up. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Прошивка ESP32 (модуль ZiFi32 для ZX Evolution / TS-Conf)
Скомпилированная прошивка для WiFi/SPI-модуля на базе ESP32-S3, используемого платформой ZX Evolution / TS-Conf ("Pentevo").
Исходная база: этот форк основан на
tslabs/zx-evo —
полный исходный код лежит в pentevo/esp32/src рядом с этой папкой; в
firmware/ — только готовые к прошивке бинарники.
Требования
Прошивка ядра платы ZX Evolution/TS-Conf должна быть собрана с поддержкой VDAC2 и ESP32 (ZiFi32) — без этого ядро вообще не увидит модуль ESP32 на шине SPI (независимо от того, насколько корректна прошивка самого ESP32), а видеочип FT8xx работать не будет. Проверьте это, прежде чем считать проблему подключения проблемой стороны ESP32.
Перемычка RESET на разъёме IDE тоже должна быть установлена — см.
../hardware/connection_diagram.webp.
Что изменено относительно апстрима
Основная часть работы в этом форке — мост VFS, открывающий реальную SD-карту ZX Evolution как сетевую шару по SMB2/3, чтобы любой клиент Windows/macOS/Linux мог просматривать, скачивать, загружать и удалять файлы на реальной файловой системе Wild Commander без извлечения карты. Эта часть всё ещё активно дорабатывается — см. раздел "Статус" ниже.
Изменения, примерно в порядке внесения:
- Подключена реальная файловая система. SMB2-обработчики в
vfs_bridge.cpp(CREATE/READ/WRITE/CLOSE/QUERY_DIRECTORY/QUERY_INFO и т.д.) теперь общаются с реальной файловой системой через небольшой мост запрос/ответ (vfs_request.cpp) поверх существующей SPI-связи со стороной Z80, вместо оригинальной захардкоженной демо-файловой системы. - Поддержка загрузки файлов (WRITE) и удаления файлов и пустых
директорий, включая корректную обработку
FILE_DELETE_ON_CLOSEи ответSMB2_STATUS_DIRECTORY_NOT_EMPTYпри попытке удалить непустую директорию. - Исправления листинга директорий: поддержка пагинации
SMB2_RETURN_SINGLE_ENTRY(нужна собственному SMB2-клиентуcmd.exe, не только Проводнику), недостающие не-"ID" классы информации о директории, синтезированные записи./.., и баг кодированияNextEntryOffsetв вендоренномlibsmb2, молча портивший любой листинг длиннее двух записей. - Исправление перечисления шар в
srvsvc: RPC-канал всегда сообщал заглушку-имя шары"test"из Фазы 1 независимо от того, к чему реально подключился клиент — исправлено на реальное имя шары. - Добавлена поддержка
SMB2_FILE_FS_VOLUME_INFORMATION(нужна голомуdir/net use; Проводник её не запрашивает, поэтому пропустили изначально). - Исправления стабильности: падение по нулевому указателю в обработке named-pipe RPC transceive, и нулевая по длине SPI DMA-транзакция, которая могла подвесить весь SPI-канал к стороне Z80.
- Исправления в интерфейсе AT-команд (
at_uart.cpp/at_cip.cpp, не связаны с VFS/SMB, но тоже часть этого форка):AT+CIPSTART(и любая другая первая после загрузки сетевая AT-команда) падал, если стек WiFi ещё не был поднят (мьютексtcpip_taskещё не создан) — исправлено ленивой инициализацией WiFi перед первой сетевой командой.- Ответ на
AT+GMRдобавлялvTaskDelay(500ms)перед содержимым — без этой паузы реальный ZiFi-клиент на ZX Evolution иногда не успевал захватить баннер на экран. - Собственная нестандартная команда
AT+NET_NTPзаменена на реальные команды спецификации ESP-ATAT+CIPSNTPCFG/AT+CIPSNTPTIME.
- Патчи
libsmb2(вендорено вsrc/third_party/libsmb2):SMB2_FSCTL_DFS_GET_REFERRALSтеперь отвечаетSTATUS_OBJECT_PATH_NOT_FOUNDвместоSTATUS_NOT_IMPLEMENTED— неверный код статуса отправлял Проводник Windows в шторм повторных запросов ещё до попытки подключения к шаре.- Разбор
SET_INFOстал терпимым к классам информации, которые сервер отдельно не реализует (пропускает сырой буфер вместо ошибки разбора) — раньше жёсткая ошибка разбора здесь рвала всё TCP-соединение вместо отказа только в этом одном запросе, что проявлялось как обрыв Проводником копирования файла посередине с общей ошибкой. - Возврат
-2изclose_cmdтеперь отображается в ответе CLOSE какSMB2_STATUS_DIRECTORY_NOT_EMPTYвместо общегоSTATUS_NOT_IMPLEMENTED.
- Упрощена авторизация до обычных гостевых/анонимных сессий
(
authorize_handlerвсегда успешен) — более ранняя попытка принудительной NTLMv2 + подписи SMB2 оказалась не связана с уже исправленным багом листинга, поэтому убрана как лишняя сложность. - Убрано частое отладочное логирование каждого запроса, добавленное для отлова описанных выше багов, заменено одной итоговой строкой на соединение.
Статус
SMB2/3-сервер (чтение, просмотр, загрузка, удаление) работает с реальными
клиентами Windows/Samba. Работа всё ещё продолжается — создание
директорий (MKDIR) пока не реализовано, перезапись существующего файла
более коротким содержимым не обрезает старый хвост, и нет поддержки
уведомлений об изменениях в реальном времени (change_notify), поэтому
Проводник может на мгновение показывать устаревший листинг до обновления.
Актуальное состояние конкретных обработчиков — в комментариях исходного
кода.
Прошивка
Целевой чип: ESP32-S3. Через esptool.py напрямую:
esptool.py --chip esp32s3 -p COM5 -b 460800 write_flash \
--flash-mode dio --flash-freq 80m --flash-size detect \
0x0 bootloader.bin \
0x8000 partition-table.bin \
0x10000 esp-spi.bin
(замените COM5 на реальный порт; flasher_args.json в этой папке
содержит те же смещения в собственном JSON-формате idf.py — для справки
или скриптов.)
Если собираете из исходников: ESP-IDF v6.1 (не v6.1-rc1) —
idf.py build flash.
Аппаратная часть
См. ../hardware/:
connection_diagram.webp— как этот модуль подключается к плате ZX Evolution.pcb_photo.jpg— фото переходной платы.gerber/— Gerber-файлы переходной платы.