VR system based on Confu HDMI to MIPI board with two OLED displays
VR шлем на основе платы Confu HDMI to MIPI.
Плата содержит в себе конвертер HDMI to MIPI DSI Toshiba TC358870 и управляющий мироконтроллер STM32F103, в углу платы золтоая маркировка HDMI to DSI Version 1.2, в комплекте поставлялись дисплеи H381DLN01.2. На плате был обнаружен вывод разьема SWD, что позволило без труда считать оригинальную прошивку. В составе прошивки был обнаружен стандартный DFU загрузчик STM располагающийся по адресам 0х0000000 0х0003000, начиная со смещения 0х0003000 располагается основная прошивка микроконтрорллера. Ближняя к разьему DSI кнопка платы отвечает за передачу управления встроенному загрузчику. Необходимо зажать кнопку и подключить плату через USB к компьютеру. Плата будет обнаружена компьютером как STM Device in DFU mode. Используя утилиту DfuSe Demo от STM можно сделать резервную копию прошивки в формате .DFU и произвести загрузку новой прошивки. Интерфейс сохранения копии прошивки выделен красным на рисунке.
Загрузчик по старой китайской традиции собран абы как и имеет два интерфеса DFU, один для внутренней flash а второй (не работающий) для SPI flash, что вызывает неадекватную работу ряда сторонних утилит позволяющих работать с DFU. Для быстрой прошивки кода в плату прямо из VS Code пришлось подправить немного проект https://github.com/IntergatedCircuits/LibUsbDfu, скомпилированная утилита включена в проект, скрипт Build and load from DFU при выполнении сразу прошивает скомпилированный код в плату используя утилиту для DFU. Для сборки проекта используется VS Code. Быстрая прошивка кода доступна через меню "Терминал->Запуск задачи->DFU: Build and load from DFU" VS Code". По неизвестной мне причине, разработчки платы не использовали линии аппаратного I2C процессора STM32. Что бы не менять дизайн платы пришлось использовать программный I2C в проекте. Точки подключения I2C на плате показаны на рисунке ниже Что бы не отломить резисторы, я подпаял тонкие проводки к площадкам резисторов подтяжки и вывел I2C используя дорожки от неиспользуемых в схеме микросхем. К шине I2C подключен датчик трекера BNO055 и OLED дисплей 128x32 на базе SSD1306. Дисплей отображает информацию регистра состояния Toshiba TC358870, загруженный EDID, прочую информацию Дисплей можно не устанавливать, наличие дисплея код определит самостоятельно в процессе инициализации. Датчик трекера на базе GY-BNO055 9DOF. В качестве основы были использованы очки Fit VR, отладочный макет выглядит сегодня так
Порядок действий
- Сохранить резервную копию прошивки платы используя DfuSe Demo или через STlink SWD
- Перевести плату в режим DFU (зажав нижнюю кнопку подключить USB)
- Открыть проект в VS Code, произвести сборку и прошивку проекта "Терминал->Запуск задачи->DFU: Build and load from DFU" VS Code".
- Скачать и установить комплект программного обеспечения OSVR http://assets.razerzone.com/eeimages/osvr/HDK_Windows_Installer_Beta_0.8.0.0.exe
- Скачать файлы конфигурации https://github.com/fa1ke5/confu_vr/blob/main/doc/srv_config.rar и распаковать содержимое в каталог C:\Program Files\HDK-Software-Suite\OSVR-Core\bin
- В утилите HDK Tray Application выбрать Options->Custom, указать файл osvr_config_HDK_2_extended_mode_no_cam_my.json
- Запустить сервер, установить и запустить SteamVR. Должен быть обнаружен VR шлем с трекером и запустится процедура настрoйки комнаты.
!!!!Важно
В текущих файлах конфигурации настройка дисторции соответствует оригинальному HDK OSVR находится она в файле OSVR_HDK_2_0_my.json раздел: "distortion": { "type": "mono_point_samples", "mono_point_samples_built_in": "OSVR_HDK_20_V1" }, Процедуру настройки выложу чуть позже......
Микропрограмма контроллера имеет встроенный USB Serial поддерживающий отладку. Краткий список команд доступен по команде h
Commands list:
H - help.
S - status register.
D - Display status register on OLED.
I - get chip ID.
F - find I2C devices.