Files
ESPC3-wireless/app/config/board_config.h
LokLiang e9b5e42ef2 重构项目配置并添加对 SBDEMO 的支持
更新多个 ESP32 芯片(C2、C3、S3)
的版本配置为 SBDEMO
产品添加新的配置文件实现板卡和应用程序配置模块添加 CRC 实用函数修改系统日志以支持动态日志控制更新 Kconfig 和 sdkconfig 的默认设置以适应新产品
2025-02-21 10:38:22 +08:00

113 lines
4.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file board_config.h
* @author LokLiang
* @brief 统一板载硬件描述数据结构
* @version 0.1
* @date 2023-11-24
*
* @copyright Copyright (c) 2023
*
* 目的与作用场景:
* 使同类型的固件适应不同的硬件版本。
* 例如同一类型产品,即使某些功能引脚改动,依然可以根据配置文件正确引导程序,而不需要新增特定的固件版本,旧的产品依然得到长期的支持。
*
* 数据设置:
* 只能在工厂中配置,除此之外不允许任何手段尝试修改。
* 数据地址固定为分区配置中
*
*/
#pragma once
#define CONFIG_LICENSE_CODE_LENGTH 16 /* 在烧录器设置的保存滚码的字段长度(g_license_code 指向的数据的实际长度) */
#define CONFIG_CFG_BOARD_PARTITION_NAME "bcfg" /* 对应自定义分区表 partitions.csv 中的 Name 字段 */
#define CONFIG_CFG_BOARD_PARTITION_TYPE 0x40 /* 对应自定义分区表 partitions.csv 中的 Type 字段 */
#define CONFIG_CFG_BOARD_PARTITION_SUBTYPE 0x00 /* 对应自定义分区表 partitions.csv 中的 SubType 字段 */
#include "drivers/chip/_hal.h"
#include "sdkconfig.h"
#define GPIO_USED(pin) ((pin) < 255)
#if (CONFIG_IDF_TARGET_ESP32S3) /* 带 OTG 的平台 */
#define CAP_USBOTG 1
#else
#define CAP_USBOTG 0
#endif
typedef struct // 对应 GPIO 单个引脚的输入/输出配置的基础定义
{
uint8_t pin; // 引脚号 (0~254, 255 表示不使用)
uint8_t en_lev; // 触发电平
} cfg_board_pin_io_t;
typedef struct // LED: WS2812
{
hal_id_t spi_id; // 模拟 PWM 用的 SPI
uint8_t strip_pin[4]; // 用于驱动灯带的输出引脚。[0] 为默认脚,[1..3] 为附加的另外几路,非 255 表示有效,程序根据这些脚判断接多少根灯带
uint8_t bat_led_pin; // 用于指示电池电量的 LED 灯,非 255 表示有效
uint8_t rf_status_pin; // 板上用于指示状态的 RGB 灯珠,非 255 表示有效
} cfg_board_led_spi_t;
typedef enum __packed // 用于与飞控通讯的数据接口
{
CFG_BOARD_FC_PORT_UART = 0, // 使用串口与飞控通讯
CFG_BOARD_FC_PORT_USBH, // 使用 USB Host 与飞控通讯
} cfg_board_fc_port_t;
typedef struct // 数据结构一旦定下不可随意变更
{
char firmware_str[7];
char platform_str[13];
char board_name[32];
/* 硬件描述类 */
hal_uart_hdl_t uart_console; // 控制台
hal_uart_hdl_t uart_fc; // 与飞控连接的串口
cfg_board_led_spi_t led_spi; // LED
cfg_board_fc_port_t fc_port_type; // 用于与飞控通讯的数据接口
struct // ISP 控制脚
{
uint8_t nrst; // 复位控制引脚
uint8_t boot0; // boot0 控制引脚
} io_isp;
struct // USB OTG 引脚
{
uint8_t usb_dm;
uint8_t usb_dp;
} io_usb;
cfg_board_pin_io_t detect_usb; // 输入检测:检测飞控 USB 插入,有效电平为插入电平
cfg_board_pin_io_t key_reset; // 按键检测:开机时长安 10 秒恢复出厂设置的按键,有效电平为按下电平
cfg_board_pin_io_t key_led_strip_switch; // 按键检测:切换灯带效果,适用于灯带固件,有效电平为按下电平
cfg_board_pin_io_t key_rf_switch; // 按键检测:切换射频数据接口,适用于固定翼无线 USB 板,有效电平为按下电平
cfg_board_pin_io_t key_9v_switch; // 按键检测9伏电源开关控制适用 F7V4, 有效电平为按下电平
cfg_board_pin_io_t sw_led_strip; // 灯带控制主机的切换控制引脚,有效电平为切换为本模块控制的电平
cfg_board_pin_io_t sw_pwr_9v; // 9V 电源输出控制引脚,有效电平为打开 9V 电源的电平
cfg_board_pin_io_t sw_usb; // USB 切换的模拟开关,有效电平为切换为本模块控制的电平
cfg_board_pin_io_t led_rf_status; // 射频指示灯,单色 LED. 引脚号值为 0 时,射频连接状态通过灯带展示,值为非 0 时,射频连接状态通过这个引脚控制的 LED 展示,有效电平为点亮电平
cfg_board_pin_io_t led_strip_on; // 灯带控制主机切换的指示灯,有效电平为点亮电平
cfg_board_pin_io_t led_bat[4]; // 电池电量指示灯,有效电平为点亮电平
/* 产品功能描述类 */
} cfg_board_t;
extern const uint8_t *g_license_code; // 在烧录器设置的保存滚码的字段,其对应的长度为 CONFIG_LICENSE_CODE_LENGTH
extern const cfg_board_t *g_cfg_board; // 配置数据
int board_cfg_init(void); // 初始化,使 g_cfg_board 指向正确的
int board_license_fresh(const uint8_t license_code[CONFIG_LICENSE_CODE_LENGTH]); // 更新激活码
int board_cfg_fresh(const cfg_board_t *cfg); // 更新设置
int board_cfg_dump(const cfg_board_t *cfg);