New Device: VMU (#205)

* Added VMU config files

* Update config.h for VMU

* Adjust battery limits

* Small amendments to full battery voltage

* Update README.md

* Update config.h for dev build

* Just a small update to Null Nano battery to match VMU
This commit is contained in:
DynaMight1124 2025-06-24 17:51:06 +01:00 committed by GitHub
parent 757b516a2d
commit e7bcbb48b5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 335 additions and 1 deletions

View File

@ -28,6 +28,8 @@
#include "targets/nullnano/config.h"
#elif defined(RG_TARGET_T_DECK_PLUS)
#include "targets/t-deck-plus/config.h"
#elif defined(RG_TARGET_VMU)
#include "targets/vmu/config.h"
#else
#warning "No target defined. Defaulting to ODROID-GO."
#include "targets/odroid-go/config.h"

View File

@ -73,7 +73,7 @@
#define RG_BATTERY_DRIVER 1
#define RG_BATTERY_ADC_UNIT ADC_UNIT_1
#define RG_BATTERY_ADC_CHANNEL ADC_CHANNEL_0
#define RG_BATTERY_CALC_PERCENT(raw) (((raw) * 2.f - 3500.f) / (4200.f - 3500.f) * 100.f)
#define RG_BATTERY_CALC_PERCENT(raw) (((raw) * 2.f - 3150.f) / (4150.f - 3150.f) * 100.f)
#define RG_BATTERY_CALC_VOLTAGE(raw) ((raw) * 2.f * 0.001f)
// Status LED

View File

@ -0,0 +1,115 @@
// Target definition
#define RG_TARGET_NAME "VMU"
// Storage
#define RG_STORAGE_ROOT "/sd"
#define RG_STORAGE_SDSPI_HOST SPI2_HOST
#define RG_STORAGE_SDSPI_SPEED SDMMC_FREQ_DEFAULT
// #define RG_STORAGE_SDMMC_HOST SDMMC_HOST_SLOT_1
// #define RG_STORAGE_SDMMC_SPEED SDMMC_FREQ_DEFAULT
// #define RG_STORAGE_FLASH_PARTITION "vfs"
// Audio
#define RG_AUDIO_USE_INT_DAC 3 // 0 = Disable, 1 = GPIO25, 2 = GPIO26, 3 = Both
#define RG_AUDIO_USE_EXT_DAC 0 // 0 = Disable, 1 = Enable
// Video
#define RG_SCREEN_DRIVER 0 // 0 = ILI9341
#define RG_SCREEN_HOST SPI2_HOST
#define RG_SCREEN_SPEED SPI_MASTER_FREQ_40M
#define RG_SCREEN_BACKLIGHT 1
#define RG_SCREEN_WIDTH 240
#define RG_SCREEN_HEIGHT 300
#define RG_SCREEN_ROTATE 0
#define RG_SCREEN_VISIBLE_AREA {0, 55, 0, 30} // Left, Top, Right, Bottom
#define RG_SCREEN_SAFE_AREA {0, 0, 0, 0} // Left, Top, Right, Bottom
#define ST7789_MADCTL 0x36 // Memory Access Control
#define ST7789_MADCTL_MY 0x80
#define ST7789_MADCTL_MX 0x40
#define ST7789_MADCTL_MV 0x20
#define ST7789_MADCTL_ML 0x10
#define ST7789_MADCTL_RGB 0x00
#define ST7789_MADCTL_BGR 0x08
#define RG_SCREEN_INIT() \
ILI9341_CMD(0xCF, 0x00, 0xc3, 0x30); \
ILI9341_CMD(0xED, 0x64, 0x03, 0x12, 0x81); \
ILI9341_CMD(0xE8, 0x85, 0x00, 0x78); \
ILI9341_CMD(0xCB, 0x39, 0x2c, 0x00, 0x34, 0x02); \
ILI9341_CMD(0xF7, 0x20); \
ILI9341_CMD(0xEA, 0x00, 0x00); \
ILI9341_CMD(0x36, 0x60); /* Display Rotation */ \
ILI9341_CMD(0xC0, 0x1B); /* Power control //VRH[5:0] */ \
ILI9341_CMD(0xC1, 0x12); /* Power control //SAP[2:0];BT[3:0] */ \
ILI9341_CMD(0xC5, 0x32, 0x3C); /* VCM control */ \
ILI9341_CMD(0xC7, 0x91); /* VCM control2 */ \
ILI9341_CMD(ST7789_MADCTL, (ST7789_MADCTL_MV | ST7789_MADCTL_MX | ST7789_MADCTL_BGR)); \
ILI9341_CMD(0xB1, 0x00, 0x10); /* Frame Rate Control (1B=70, 1F=61, 10=119) */ \
ILI9341_CMD(0xB6, 0x0A, 0xA2); /* Display Function Control */ \
ILI9341_CMD(0xF6, 0x01, 0x30); \
ILI9341_CMD(0xF2, 0x00); /* 3Gamma Function Disable */ \
ILI9341_CMD(0xE0, 0xD0, 0x00, 0x05, 0x0E, 0x15, 0x0D, 0x37, 0x43, 0x47, 0x09, 0x15, 0x12, 0x16, 0x19); \
ILI9341_CMD(0xE1, 0xD0, 0x00, 0x05, 0x0D, 0x0C, 0x06, 0x2D, 0x44, 0x40, 0x0E, 0x1C, 0x18, 0x16, 0x19); \
// Input
// Refer to rg_input.h to see all available RG_KEY_* and RG_GAMEPAD_*_MAP types
#define RG_GAMEPAD_ADC_MAP {\
{RG_KEY_UP, ADC_UNIT_1, ADC_CHANNEL_7, ADC_ATTEN_DB_11, 2048, 4096},\
{RG_KEY_DOWN, ADC_UNIT_1, ADC_CHANNEL_7, ADC_ATTEN_DB_11, 1024, 2047},\
{RG_KEY_LEFT, ADC_UNIT_1, ADC_CHANNEL_6, ADC_ATTEN_DB_11, 2048, 4096},\
{RG_KEY_RIGHT, ADC_UNIT_1, ADC_CHANNEL_6, ADC_ATTEN_DB_11, 1024, 2047},\
}
#define RG_GAMEPAD_GPIO_MAP {\
{RG_KEY_MENU, GPIO_NUM_27, GPIO_PULLUP_ONLY, 0},\
{RG_KEY_START, GPIO_NUM_0, GPIO_FLOATING, 0},\
{RG_KEY_A, GPIO_NUM_32, GPIO_PULLUP_ONLY, 0},\
{RG_KEY_B, GPIO_NUM_33, GPIO_PULLUP_ONLY, 0},\
}
#define RG_GAMEPAD_VIRT_MAP {\
{RG_KEY_SELECT, RG_KEY_A | RG_KEY_START},\
{RG_KEY_OPTION, RG_KEY_B | RG_KEY_START},\
}
// Battery
#define RG_BATTERY_DRIVER 1
#define RG_BATTERY_ADC_UNIT ADC_UNIT_1
#define RG_BATTERY_ADC_CHANNEL ADC_CHANNEL_0
#define RG_BATTERY_CALC_PERCENT(raw) (((raw) * 2.f - 3150.f) / (4150.f - 3150.f) * 100.f)
#define RG_BATTERY_CALC_VOLTAGE(raw) ((raw) * 2.f * 0.001f)
// Status LED
// #define RG_GPIO_LED GPIO_NUM_2
// I2C BUS
// #define RG_GPIO_I2C_SDA GPIO_NUM_15
// #define RG_GPIO_I2C_SCL GPIO_NUM_4
// SPI Display
#define RG_GPIO_LCD_MISO GPIO_NUM_19
#define RG_GPIO_LCD_MOSI GPIO_NUM_23
#define RG_GPIO_LCD_CLK GPIO_NUM_18
#define RG_GPIO_LCD_CS GPIO_NUM_5
#define RG_GPIO_LCD_DC GPIO_NUM_21
#define RG_GPIO_LCD_BCKL GPIO_NUM_14
// #define RG_GPIO_LCD_RST GPIO_NUM_NC
// SPI SD Card
#define RG_GPIO_SDSPI_MISO GPIO_NUM_19
#define RG_GPIO_SDSPI_MOSI GPIO_NUM_23
#define RG_GPIO_SDSPI_CLK GPIO_NUM_18
#define RG_GPIO_SDSPI_CS GPIO_NUM_22
// External I2S DAC
// #define RG_GPIO_SND_I2S_BCK GPIO_NUM_4
// #define RG_GPIO_SND_I2S_WS GPIO_NUM_12
// #define RG_GPIO_SND_I2S_DATA GPIO_NUM_15
// #define RG_GPIO_SND_AMP_ENABLE GPIO_NUM_NC
// Updater
#define RG_UPDATER_ENABLE 1
#define RG_UPDATER_APPLICATION RG_APP_FACTORY
#define RG_UPDATER_DOWNLOAD_LOCATION RG_STORAGE_ROOT "/vmu/firmware"

View File

@ -0,0 +1,14 @@
# VMU ESP32
- Status: Complete
- Design files and BOM: [**Instructables link**](https://www.instructables.com/ESP32-VMU-Handheld-Console-Yes-It-Plays-Doom/)
# Hardware info
- Module: ESP32-WROVER-E (16MB Flash)
- Screen: 1.69" ST7789V Screen
- 400mAh battery & charging via MicroUSB
- Sound
- Heavily based on Null Nano
# Images
![device.jpg](device.jpg)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

View File

@ -0,0 +1,4 @@
import os
os.environ["IDF_TARGET"] = "esp32"
os.environ["FW_FORMAT"] = "odroid"

View File

@ -0,0 +1,199 @@
#
# Serial flasher config
#
CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0"
CONFIG_ESPTOOLPY_BAUD_115200B=n
CONFIG_ESPTOOLPY_BAUD_230400B=n
CONFIG_ESPTOOLPY_BAUD_921600B=y
CONFIG_ESPTOOLPY_BAUD_2MB=n
CONFIG_ESPTOOLPY_BAUD=921600
CONFIG_ESPTOOLPY_COMPRESSED=y
CONFIG_ESPTOOLPY_FLASHMODE="dio"
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
CONFIG_ESPTOOLPY_FLASHFREQ_40M=n
CONFIG_ESPTOOLPY_FLASHFREQ_26M=n
CONFIG_ESPTOOLPY_FLASHFREQ_20M=n
CONFIG_ESPTOOLPY_FLASHFREQ="80m"
CONFIG_ESPTOOLPY_FLASHSIZE_1MB=n
CONFIG_ESPTOOLPY_FLASHSIZE_2MB=n
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=n
CONFIG_ESPTOOLPY_FLASHSIZE_8MB=n
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
CONFIG_ESPTOOLPY_FLASHSIZE="16MB"
CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
#
# Compiler options
#
CONFIG_COMPILER_OPTIMIZATION_DEFAULT=n
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
# IMPORTANT: ENABLE=y adds almost 50K to the executable, can't fit in our current 2.5MB goal...
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=n
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=n
CONFIG_COMPILER_CXX_EXCEPTIONS=n
CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
CONFIG_COMPILER_STACK_CHECK_MODE_NORM=n
CONFIG_COMPILER_STACK_CHECK_MODE_STRONG=n
CONFIG_COMPILER_STACK_CHECK_MODE_ALL=n
CONFIG_COMPILER_STACK_CHECK=n
#
# SPI configuration
#
CONFIG_SPI_MASTER_IN_IRAM=y
CONFIG_SPI_MASTER_ISR_IN_IRAM=y
#
# ESP32-specific
#
CONFIG_ESP32_REV_MIN_0=n
CONFIG_ESP32_REV_MIN_1=y
CONFIG_ESP32_REV_MIN_2=n
CONFIG_ESP32_REV_MIN_3=n
CONFIG_ESP32_REV_MIN=1
CONFIG_ESP32_DEFAULT_CPU_FREQ_80=n
CONFIG_ESP32_DEFAULT_CPU_FREQ_160=n
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240
CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT=n
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT=n
CONFIG_ESP_SYSTEM_PANIC_GDBSTUB=n
CONFIG_ESP32_DEBUG_OCDAWARE=n
CONFIG_ESP_MAIN_TASK_STACK_SIZE=8192
CONFIG_ESP_INT_WDT=y
CONFIG_ESP_TASK_WDT=n
CONFIG_NEWLIB_NANO_FORMAT=y
#
# SPI RAM config
#
CONFIG_ESP32_SPIRAM_SUPPORT=y
CONFIG_SPIRAM_BOOT_INIT=y
CONFIG_SPIRAM_IGNORE_NOTFOUND=y
CONFIG_SPIRAM_USE_MEMMAP=n
CONFIG_SPIRAM_USE_CAPS_ALLOC=n
CONFIG_SPIRAM_USE_MALLOC=y
CONFIG_SPIRAM_TYPE_AUTO=y
CONFIG_SPIRAM_TYPE_ESPPSRAM32=n
CONFIG_SPIRAM_TYPE_ESPPSRAM64=n
CONFIG_SPIRAM_SIZE=-1
CONFIG_SPIRAM_SPEED_40M=n
CONFIG_SPIRAM_SPEED_80M=y
CONFIG_SPIRAM_MEMTEST=n
CONFIG_SPIRAM_CACHE_WORKAROUND=n
CONFIG_SPIRAM_BANKSWITCH_ENABLE=n
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=32768
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
CONFIG_SPIRAM_OCCUPY_HSPI_HOST=n
CONFIG_SPIRAM_OCCUPY_VSPI_HOST=y
CONFIG_SPIRAM_OCCUPY_NO_HOST=n
#
# FAT Filesystem support
#
CONFIG_FATFS_CODEPAGE_437=y
CONFIG_FATFS_CODEPAGE=437
CONFIG_FATFS_LFN_NONE=n
CONFIG_FATFS_LFN_HEAP=y
CONFIG_FATFS_LFN_STACK=n
CONFIG_FATFS_MAX_LFN=255
CONFIG_FATFS_USE_FASTSEEK=y
#
# FreeRTOS
#
CONFIG_FREERTOS_HZ=100
CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE=n
CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL=y
CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=n
CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y
CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE=n
CONFIG_FREERTOS_ASSERT_DISABLE=n
CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1024
CONFIG_FREERTOS_USE_TRACE_FACILITY=n
CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=n
CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=n
#
# Log output
#
CONFIG_LOG_DEFAULT_LEVEL_NONE=n
CONFIG_LOG_DEFAULT_LEVEL_ERROR=n
CONFIG_LOG_DEFAULT_LEVEL_WARN=y
CONFIG_LOG_DEFAULT_LEVEL_INFO=n
CONFIG_LOG_DEFAULT_LEVEL_DEBUG=n
CONFIG_LOG_DEFAULT_LEVEL_VERBOSE=n
CONFIG_LOG_DEFAULT_LEVEL=2
CONFIG_LOG_COLORS=y
#
# Misc
#
# ODROID-GO partition table doesn't use any checksum
CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS=y
CONFIG_PARTITION_TABLE_MD5=n
CONFIG_APP_BUILD_BOOTLOADER=n
#
# HTTP Server
#
CONFIG_HTTPD_MAX_REQ_HDR_LEN=1024
CONFIG_HTTPD_MAX_URI_LEN=1024
#
# TLS
#
# Not ideal but I don't want to deal with CAs right now :(
CONFIG_ESP_TLS_INSECURE=y
CONFIG_ESP_TLS_SKIP_SERVER_CERT_VERIFY=y
CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=n
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y
# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL is not set
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN=y
# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set
# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200
# CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT is not set
# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set
CONFIG_MBEDTLS_TLS_CLIENT_ONLY=y
# CONFIG_MBEDTLS_TLS_DISABLED is not set
CONFIG_MBEDTLS_TLS_CLIENT=y
CONFIG_MBEDTLS_TLS_ENABLED=y
#
# SPI Flash driver
#
CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=n
#
# Wi-Fi
#
CONFIG_ESP32_WIFI_IRAM_OPT=n
CONFIG_ESP32_WIFI_RX_IRAM_OPT=n
CONFIG_ESP32_WIFI_NVS_ENABLED=n
#
# Ethernet
#
CONFIG_ETH_USE_ESP32_EMAC=n
CONFIG_ETH_USE_SPI_ETHERNET=n
CONFIG_ETH_USE_OPENETH=n
#
# Silence deprecations because I have no intention of fixing them right now
#
CONFIG_ADC_SUPPRESS_DEPRECATE_WARN=y
CONFIG_I2S_SUPPRESS_DEPRECATE_WARN=y
#
# Partition table
#
# CONFIG_PARTITION_TABLE_SINGLE_APP is not set
# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
# CONFIG_PARTITION_TABLE_TWO_OTA is not set
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="../partitions.csv"
CONFIG_PARTITION_TABLE_FILENAME="../partitions.csv"