Added Lilygo T-TWR Plus target, using stub drivers.

pull/193/head
Silvano Seva 2023-07-26 12:04:10 +02:00
rodzic 21a93911da
commit 7c2c61f948
12 zmienionych plików z 443 dodań i 0 usunięć

Wyświetl plik

@ -2,6 +2,44 @@
cmake_minimum_required(VERSION 3.20.0)
#
# Zephyr build system imposes to have a fixed folder structure for the target-specific
# files, that is [...]/boards/ARCH/BOARDNAME because it infers the target
# architecture by looking at the name of the parent folder of the board folder.
#
# This does not make sense, because:
# 1) The folder with the target-specific files should be put anywhere, given that
# the project using Zephyr may have its own conventions.
# 2) Inferring the target architecture only from the folder tree is an idiocy.
#
# So: to make Zephyr play happily in his sandpit without complaints, we create a
# board_root subfolder inside the build one and we copy the board-specific config
# files there from our platform/targets tree creating the necessary folder tree.
#
# NOTE: the board-specific CMakeLists.txt files have to use the ${OPENRTX_ROOT}
# variable as the base path. E.g. ${OPENRTX_ROOT}/platform/drivers/somedriver.c
#
if (${BOARD} STREQUAL "ttwrplus")
set(ARCH xtensa)
set(CONF_FILE ${CMAKE_CURRENT_LIST_DIR}/platform/mcu/ESP32S3/zephyr.conf)
endif()
#
# Create the board_root folder and the proper folder tree for the targets
#
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_CURRENT_LIST_DIR}/platform/targets/${BOARD}
${CMAKE_CURRENT_LIST_DIR}/build/board_root/boards/${ARCH}/${BOARD})
#
# Set the BOARD_ROOT and OPENRTX_ROOT variables
#
set(BOARD_ROOT ${CMAKE_CURRENT_LIST_DIR}/build/board_root)
set(OPENRTX_ROOT ${CMAKE_CURRENT_LIST_DIR})
#
# Finally, set up the project
#
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(openrtx)

Wyświetl plik

@ -0,0 +1,27 @@
# SPDX-License-Identifier: GPL-3.0-or-later
#
# CMake configuration file for the T-TWR Plus OpenRTX target
#
cmake_minimum_required(VERSION 3.20.0)
target_sources(app
PRIVATE
${OPENRTX_ROOT}/platform/mcu/ESP32S3/drivers/delays.c
${OPENRTX_ROOT}/platform/targets/ttwrplus/platform.c
${OPENRTX_ROOT}/platform/drivers/stubs/audio_stub.c
${OPENRTX_ROOT}/platform/drivers/stubs/cps_io_stub.c
${OPENRTX_ROOT}/platform/drivers/stubs/display_stub.c
${OPENRTX_ROOT}/platform/drivers/stubs/keyboard_stub.c
${OPENRTX_ROOT}/platform/drivers/stubs/nvmem_stub.c
${OPENRTX_ROOT}/platform/drivers/stubs/radio_stub.c
)
target_include_directories(app
PRIVATE
${OPENRTX_ROOT}/platform/targets/ttwrplus
)
target_compile_definitions(app PRIVATE PLATFORM_TTWRPLUS)

Wyświetl plik

@ -0,0 +1,7 @@
# LilyGo T-TWR Plus board configuration
# SPDX-License-Identifier: Apache-2.0
config BOARD_TTWRPLUS
bool "LilyGo T-TWR Plus Board"
depends on SOC_ESP32S3

Wyświetl plik

@ -0,0 +1,19 @@
# LilyGo T-TWR Plus board configuration
# SPDX-License-Identifier: Apache-2.0
config BOARD
default "ttwrplus"
depends on BOARD_TTWRPLUS
config ENTROPY_GENERATOR
default y
config HEAP_MEM_POOL_SIZE
default 98304 if WIFI
default 40960 if BT
default 4096
choice BT_HCI_BUS_TYPE
default BT_ESP32 if BT
endchoice

Wyświetl plik

@ -0,0 +1,9 @@
# SPDX-License-Identifier: Apache-2.0
choice BOOTLOADER
default BOOTLOADER_MCUBOOT
endchoice
choice BOOT_SIGNATURE_TYPE
default BOOT_SIGNATURE_TYPE_NONE
endchoice

Wyświetl plik

@ -0,0 +1,9 @@
# SPDX-License-Identifier: Apache-2.0
if(NOT "${OPENOCD}" MATCHES "^${ESPRESSIF_TOOLCHAIN_PATH}/.*")
set(OPENOCD OPENOCD-NOTFOUND)
endif()
find_program(OPENOCD openocd PATHS ${ESPRESSIF_TOOLCHAIN_PATH}/openocd-esp32/bin NO_DEFAULT_PATH)
include(${ZEPHYR_BASE}/boards/common/esp32.board.cmake)
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)

Wyświetl plik

@ -0,0 +1,36 @@
/***************************************************************************
* Copyright (C) 2023 by Federico Amedeo Izzo IU2NUO, *
* Niccolò Izzo IU2KIN *
* Silvano Seva IU2KWO *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, see <http://www.gnu.org/licenses/> *
***************************************************************************/
#ifndef HWCONFIG_H
#define HWCONFIG_H
#include <zephyr/device.h>
/*
* Display properties are encoded in the devicetree
*/
#define DISPLAY DT_CHOSEN(zephyr_display)
#define SCREEN_WIDTH DT_PROP(DISPLAY, width)
#define SCREEN_HEIGHT DT_PROP(DISPLAY, height)
#define PIX_FMT_BW
/* TODO: battery type */
#define BAT_NONE
#endif /* HWCONFIG_H */

Wyświetl plik

@ -0,0 +1,93 @@
/***************************************************************************
* Copyright (C) 2023 by Federico Amedeo Izzo IU2NUO, *
* Niccolò Izzo IU2KIN *
* Silvano Seva IU2KWO *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, see <http://www.gnu.org/licenses/> *
***************************************************************************/
#include <interfaces/platform.h>
#include <hwconfig.h>
static const hwInfo_t hwInfo =
{
.uhf_maxFreq = 430,
.uhf_minFreq = 440,
.uhf_band = 1,
.name = "ttwrplus"
};
void platform_init()
{
}
void platform_terminate()
{
}
uint16_t platform_getVbat()
{
return 0;
}
uint8_t platform_getMicLevel()
{
return 0;
}
uint8_t platform_getVolumeLevel()
{
return 0;
}
int8_t platform_getChSelector()
{
return 0;
}
bool platform_getPttStatus()
{
return false;
}
bool platform_pwrButtonStatus()
{
return true;
}
void platform_ledOn(led_t led)
{
(void) led;
}
void platform_ledOff(led_t led)
{
(void) led;
}
void platform_beepStart(uint16_t freq)
{
(void) freq;
}
void platform_beepStop()
{
}
const hwInfo_t *platform_getHwInfo()
{
return &hwInfo;
}

Wyświetl plik

@ -0,0 +1,7 @@
set ESP_RTOS none
set ESP32_ONLYCPU 1
# Source the JTAG interface configuration file
source [find interface/esp_usb_jtag.cfg]
# Source the ESP32-S3 configuration file
source [find target/esp32s3.cfg]

Wyświetl plik

@ -0,0 +1,175 @@
/*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <espressif/esp32s3.dtsi>
#include <zephyr/dt-bindings/pinctrl/esp-pinctrl-common.h>
#include <dt-bindings/pinctrl/esp32s3-pinctrl.h>
#include <zephyr/dt-bindings/pinctrl/esp32s3-gpio-sigmap.h>
#include <zephyr/dt-bindings/led/led.h>
/ {
model = "ttwrplus";
compatible = "espressif,esp32s3";
aliases {
i2c-0 = &i2c0;
watchdog0 = &wdt0;
};
chosen {
zephyr,sram = &sram0;
zephyr,console = &usb_serial;
zephyr,shell-uart = &usb_serial;
zephyr,flash = &flash0;
zephyr,display = &ssd1306;
};
aliases {
radio = &uart0;
};
buttons {
compatible = "gpio-keys";
sw_boot: button_0 {
gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;
label = "BOOT Button";
};
sw_user: button_1 {
gpios = <&gpio0 3 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
label = "USER Button";
};
};
};
&cpu0 {
clock-frequency = <ESP32_CLK_CPU_240M>;
};
&cpu1 {
clock-frequency = <ESP32_CLK_CPU_240M>;
};
&usb_serial {
status = "okay";
};
&uart0 {
status = "okay";
current-speed = <9600>;
pinctrl-0 = <&uart0_default>;
pinctrl-names = "default";
};
&i2c0 {
status = "okay";
clock-frequency = <I2C_BITRATE_FAST>;
pinctrl-0 = <&i2c0_default>;
pinctrl-names = "default";
ssd1306: ssd1306@3c {
compatible = "solomon,ssd1306fb";
reg = <0x3c>;
width = <128>;
height = <64>;
segment-offset = <2>;
page-offset = <0>;
display-offset = <0>;
multiplex-ratio = <63>;
prechargep = <0x22>;
segment-remap;
com-invdir;
};
};
&timer0 {
status = "disabled";
};
&timer1 {
status = "disabled";
};
&timer2 {
status = "disabled";
};
&timer3 {
status = "disabled";
};
&wdt0 {
status = "okay";
};
&trng0 {
status = "okay";
};
&pinctrl {
uart0_default: uart0_default {
group1 {
pinmux = <UART0_TX_GPIO39>;
output-high;
};
group2 {
pinmux = <UART0_RX_GPIO48>;
bias-pull-up;
};
};
i2c0_default: i2c0_default {
group1 {
pinmux = <I2C0_SDA_GPIO8>,
<I2C0_SCL_GPIO9>;
bias-pull-up;
drive-open-drain;
output-high;
};
};
};
&flash0 {
status = "okay";
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
/* Reserve 64kB for the bootloader */
boot_partition: partition@0 {
label = "mcuboot";
reg = <0x00000000 0x00010000>;
read-only;
};
/* Reserve 1024kB for the application in slot 0 */
slot0_partition: partition@10000 {
label = "image-0";
reg = <0x00010000 0x00100000>;
};
/* Reserve 1024kB for the application in slot 1 */
slot1_partition: partition@110000 {
label = "image-1";
reg = <0x00110000 0x00100000>;
};
/* Reserve 256kB for the scratch partition */
scratch_partition: partition@210000 {
label = "image-scratch";
reg = <0x00210000 0x00040000>;
};
storage_partition: partition@250000 {
label = "storage";
reg = <0x00250000 0x00006000>;
};
};
};

Wyświetl plik

@ -0,0 +1,20 @@
identifier: ttwrplus
name: LilyGO T-TWR Plus
type: mcu
arch: xtensa
toolchain:
- zephyr
supported:
- gpio
- uart
- i2c
- spi
- counter
- watchdog
- entropy
- pwm
- dma
testing:
ignore_tags:
- net
- bluetooth

Wyświetl plik

@ -0,0 +1,3 @@
CONFIG_DISPLAY=y
CONFIG_SSD1306=y
CONFIG_SSD1306_SH1106_COMPATIBLE=y