risc-v/esp32c3: Add hardware brownout check and reset
This commit is contained in:
parent
8d799f2148
commit
f5c5d77744
@ -357,6 +357,14 @@ config ESP32C3_BLE
|
|||||||
---help---
|
---help---
|
||||||
Enable BLE support
|
Enable BLE support
|
||||||
|
|
||||||
|
config ESP32C3_BROWNOUT_DET
|
||||||
|
bool "Brownout Detect"
|
||||||
|
default y
|
||||||
|
---help---
|
||||||
|
The ESP32-C3 has a built-in brownout detector which can detect if the voltage is lower than
|
||||||
|
a specific value. If this happens, it will reset the chip in order to prevent unintended
|
||||||
|
behaviour.
|
||||||
|
|
||||||
endmenu # ESP32-C3 Peripheral Support
|
endmenu # ESP32-C3 Peripheral Support
|
||||||
|
|
||||||
menuconfig ESP32C3_WIFI_BT_COEXIST
|
menuconfig ESP32C3_WIFI_BT_COEXIST
|
||||||
@ -1065,4 +1073,48 @@ config ESP32C3_PARTITION_TABLE_OFFSET
|
|||||||
|
|
||||||
endmenu # Application Image Configuration
|
endmenu # Application Image Configuration
|
||||||
|
|
||||||
|
menu "Brownout Detect Configuration"
|
||||||
|
depends on ESP32C3_BROWNOUT_DET
|
||||||
|
|
||||||
|
choice ESP32C3_BROWNOUT_DET_LVL_SEL
|
||||||
|
prompt "Brownout voltage level"
|
||||||
|
default ESP32C3_BROWNOUT_DET_LVL_SEL_7
|
||||||
|
---help---
|
||||||
|
The brownout detector will reset the chip when the supply voltage is approximately
|
||||||
|
below this level. Note that there may be some variation of brownout voltage level
|
||||||
|
between each chip.
|
||||||
|
|
||||||
|
#The voltage levels here are estimates, more work needs to be done to figure out the exact voltages
|
||||||
|
#of the brownout threshold levels.
|
||||||
|
|
||||||
|
config ESP32C3_BROWNOUT_DET_LVL_SEL_7
|
||||||
|
bool "2.51V"
|
||||||
|
|
||||||
|
config ESP32C3_BROWNOUT_DET_LVL_SEL_6
|
||||||
|
bool "2.64V"
|
||||||
|
|
||||||
|
config ESP32C3_BROWNOUT_DET_LVL_SEL_5
|
||||||
|
bool "2.76V"
|
||||||
|
|
||||||
|
config ESP32C3_BROWNOUT_DET_LVL_SEL_4
|
||||||
|
bool "2.92V"
|
||||||
|
|
||||||
|
config ESP32C3_BROWNOUT_DET_LVL_SEL_3
|
||||||
|
bool "3.10V"
|
||||||
|
|
||||||
|
config ESP32C3_BROWNOUT_DET_LVL_SEL_2
|
||||||
|
bool "3.27V"
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config ESP32C3_BROWNOUT_DET_LVL
|
||||||
|
int
|
||||||
|
default 2 if ESP32C3_BROWNOUT_DET_LVL_SEL_2
|
||||||
|
default 3 if ESP32C3_BROWNOUT_DET_LVL_SEL_3
|
||||||
|
default 4 if ESP32C3_BROWNOUT_DET_LVL_SEL_4
|
||||||
|
default 5 if ESP32C3_BROWNOUT_DET_LVL_SEL_5
|
||||||
|
default 6 if ESP32C3_BROWNOUT_DET_LVL_SEL_6
|
||||||
|
default 7 if ESP32C3_BROWNOUT_DET_LVL_SEL_7
|
||||||
|
|
||||||
|
endmenu # ESP32C3_BROWNOUT_DET
|
||||||
|
|
||||||
endif # ARCH_CHIP_ESP32C3
|
endif # ARCH_CHIP_ESP32C3
|
||||||
|
@ -172,6 +172,10 @@ ifeq ($(CONFIG_ESP32C3_RTC_HEAP),y)
|
|||||||
CHIP_CSRCS += esp32c3_rtcheap.c
|
CHIP_CSRCS += esp32c3_rtcheap.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ESP32C3_BROWNOUT_DET),y)
|
||||||
|
CHIP_CSRCS += esp32c3_brownout.c
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_ESP32C3_WIRELESS),y)
|
ifeq ($(CONFIG_ESP32C3_WIRELESS),y)
|
||||||
WIRELESS_DRV_UNPACK = esp-wireless-drivers-3rdparty
|
WIRELESS_DRV_UNPACK = esp-wireless-drivers-3rdparty
|
||||||
WIRELESS_DRV_ID = 055f1ef
|
WIRELESS_DRV_ID = 055f1ef
|
||||||
|
66
arch/risc-v/src/esp32c3/esp32c3_brownout.c
Normal file
66
arch/risc-v/src/esp32c3/esp32c3_brownout.c
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* arch/risc-v/src/esp32c3/esp32c3_brownout.c
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership. The
|
||||||
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
#include "esp32c3.h"
|
||||||
|
#include "hardware/esp32c3_rtccntl.h"
|
||||||
|
#include "hardware/regi2c_ctrl.h"
|
||||||
|
#include "hardware/regi2c_brownout.h"
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#define ESP32C3_BROWNOUT_VAL CONFIG_ESP32C3_BROWNOUT_DET_LVL
|
||||||
|
#define ESP32C3_BROWNOUT_RST_SEL 1
|
||||||
|
#define ESP32C3_BROWNOUT_RST_WAIT 0x3ff
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: esp32c3_brownout_init
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initialize hardware brownout check and reset.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
void esp32c3_brownout_init(void)
|
||||||
|
{
|
||||||
|
uint32_t regval;
|
||||||
|
|
||||||
|
REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD, ESP32C3_BROWNOUT_VAL);
|
||||||
|
|
||||||
|
regval = RTC_CNTL_BROWN_OUT_ENA |
|
||||||
|
(ESP32C3_BROWNOUT_RST_SEL << RTC_CNTL_BROWN_OUT_RST_SEL_S) |
|
||||||
|
RTC_CNTL_BROWN_OUT_RST_ENA |
|
||||||
|
(ESP32C3_BROWNOUT_RST_WAIT << RTC_CNTL_BROWN_OUT_RST_WAIT_S) |
|
||||||
|
RTC_CNTL_BROWN_OUT_PD_RF_ENA |
|
||||||
|
RTC_CNTL_BROWN_OUT_CLOSE_FLASH_ENA;
|
||||||
|
|
||||||
|
putreg32(regval, RTC_CNTL_BROWN_OUT_REG);
|
||||||
|
}
|
65
arch/risc-v/src/esp32c3/esp32c3_brownout.h
Normal file
65
arch/risc-v/src/esp32c3/esp32c3_brownout.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* arch/risc-v/src/esp32c3/esp32c3_brownout.h
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership. The
|
||||||
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __ARCH_RISCV_SRC_ESP32C3_ESP32C3_BROWNOUT_H
|
||||||
|
#define __ARCH_RISCV_SRC_ESP32C3_ESP32C3_BROWNOUT_H
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Data
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#define EXTERN extern "C"
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Function Prototypes
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: esp32c3_brownout_init
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initialize hardware brownout check and reset.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
void esp32c3_brownout_init(void);
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#undef EXTERN
|
||||||
|
|
||||||
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
|
#endif /* __ARCH_RISCV_SRC_ESP32C3_ESP32C3_BROWNOUT_H */
|
@ -38,6 +38,10 @@
|
|||||||
#include "hardware/esp32c3_cache_memory.h"
|
#include "hardware/esp32c3_cache_memory.h"
|
||||||
#include "hardware/extmem_reg.h"
|
#include "hardware/extmem_reg.h"
|
||||||
|
|
||||||
|
#ifdef CONFIG_ESP32C3_BROWNOUT_DET
|
||||||
|
# include "esp32c3_brownout.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -240,6 +244,12 @@ void __esp32c3_start(void)
|
|||||||
|
|
||||||
esp32c3_clockconfig();
|
esp32c3_clockconfig();
|
||||||
|
|
||||||
|
#ifdef CONFIG_ESP32C3_BROWNOUT_DET
|
||||||
|
/* Initialize hardware brownout check and reset */
|
||||||
|
|
||||||
|
esp32c3_brownout_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Configure the UART so we can get debug output */
|
/* Configure the UART so we can get debug output */
|
||||||
|
|
||||||
esp32c3_lowsetup();
|
esp32c3_lowsetup();
|
||||||
|
31
arch/risc-v/src/esp32c3/hardware/regi2c_brownout.h
Normal file
31
arch/risc-v/src/esp32c3/hardware/regi2c_brownout.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* arch/risc-v/src/esp32c3/hardware/regi2c_brownout.h
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership. The
|
||||||
|
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance with the
|
||||||
|
* License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __ARCH_RISCV_SRC_ESP32C3_HARDWARE_REGI2C_BROWNOUT_H_
|
||||||
|
#define __ARCH_RISCV_SRC_ESP32C3_HARDWARE_REGI2C_BROWNOUT_H_
|
||||||
|
|
||||||
|
#define I2C_BOD 0x61
|
||||||
|
#define I2C_BOD_HOSTID 0
|
||||||
|
|
||||||
|
#define I2C_BOD_THRESHOLD 0x5
|
||||||
|
#define I2C_BOD_THRESHOLD_MSB 2
|
||||||
|
#define I2C_BOD_THRESHOLD_LSB 0
|
||||||
|
|
||||||
|
#endif /* __ARCH_RISCV_SRC_ESP32C3_HARDWARE_REGI2C_BROWNOUT_H_ */
|
Loading…
Reference in New Issue
Block a user