Kconfig 67 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530
  1. menu "ESP32-specific"
  2. # Hidden option to support checking for this specific target in C code and Kconfig files
  3. config IDF_TARGET_ESP32
  4. bool
  5. default "y" if IDF_TARGET="esp32"
  6. default "n"
  7. config ESP32_ECO3_CACHE_LOCK_FIX
  8. bool
  9. default y
  10. depends on !FREERTOS_UNICORE && SPIRAM_SUPPORT
  11. choice ESP32_REV_MIN
  12. prompt "Minimum Supported ESP32 Revision"
  13. default ESP32_REV_MIN_0
  14. help
  15. Minimum revision that ESP-IDF would support.
  16. ESP-IDF performs different strategy on different esp32 revision.
  17. config ESP32_REV_MIN_0
  18. bool "Rev 0"
  19. config ESP32_REV_MIN_1
  20. bool "Rev 1"
  21. config ESP32_REV_MIN_2
  22. bool "Rev 2"
  23. config ESP32_REV_MIN_3
  24. bool "Rev 3"
  25. select INT_WDT if ESP32_ECO3_CACHE_LOCK_FIX
  26. endchoice
  27. config ESP32_REV_MIN
  28. int
  29. default 0 if ESP32_REV_MIN_0
  30. default 1 if ESP32_REV_MIN_1
  31. default 2 if ESP32_REV_MIN_2
  32. default 3 if ESP32_REV_MIN_3
  33. config ESP32_DPORT_WORKAROUND
  34. bool
  35. default "y" if !FREERTOS_UNICORE && ESP32_REV_MIN < 2
  36. choice ESP32_DEFAULT_CPU_FREQ_MHZ
  37. prompt "CPU frequency"
  38. default ESP32_DEFAULT_CPU_FREQ_160
  39. help
  40. CPU frequency to be set on application startup.
  41. config ESP32_DEFAULT_CPU_FREQ_80
  42. bool "80 MHz"
  43. config ESP32_DEFAULT_CPU_FREQ_160
  44. bool "160 MHz"
  45. config ESP32_DEFAULT_CPU_FREQ_240
  46. bool "240 MHz"
  47. endchoice
  48. config ESP32_DEFAULT_CPU_FREQ_MHZ
  49. int
  50. default 80 if ESP32_DEFAULT_CPU_FREQ_80
  51. default 160 if ESP32_DEFAULT_CPU_FREQ_160
  52. default 240 if ESP32_DEFAULT_CPU_FREQ_240
  53. config SPIRAM_SUPPORT
  54. bool "Support for external, SPI-connected RAM"
  55. default "n"
  56. help
  57. This enables support for an external SPI RAM chip, connected in parallel with the
  58. main SPI flash chip.
  59. menu "SPI RAM config"
  60. depends on SPIRAM_SUPPORT
  61. config SPIRAM_BOOT_INIT
  62. bool "Initialize SPI RAM when booting the ESP32"
  63. default "y"
  64. help
  65. If this is enabled, the SPI RAM will be enabled during initial boot. Unless you
  66. have specific requirements, you'll want to leave this enabled so memory allocated
  67. during boot-up can also be placed in SPI RAM.
  68. config SPIRAM_IGNORE_NOTFOUND
  69. bool "Ignore PSRAM when not found"
  70. default "n"
  71. depends on SPIRAM_BOOT_INIT && !SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY
  72. help
  73. Normally, if psram initialization is enabled during compile time but not found at runtime, it
  74. is seen as an error making the ESP32 panic. If this is enabled, the ESP32 will keep on
  75. running but will not add the (non-existing) RAM to any allocator.
  76. choice SPIRAM_USE
  77. prompt "SPI RAM access method"
  78. default SPIRAM_USE_MALLOC
  79. help
  80. The SPI RAM can be accessed in multiple methods: by just having it available as an unmanaged
  81. memory region in the ESP32 memory map, by integrating it in the ESP32s heap as 'special' memory
  82. needing heap_caps_malloc to allocate, or by fully integrating it making malloc() also able to
  83. return SPI RAM pointers.
  84. config SPIRAM_USE_MEMMAP
  85. bool "Integrate RAM into ESP32 memory map"
  86. config SPIRAM_USE_CAPS_ALLOC
  87. bool "Make RAM allocatable using heap_caps_malloc(..., MALLOC_CAP_SPIRAM)"
  88. config SPIRAM_USE_MALLOC
  89. bool "Make RAM allocatable using malloc() as well"
  90. select SUPPORT_STATIC_ALLOCATION
  91. endchoice
  92. choice SPIRAM_TYPE
  93. prompt "Type of SPI RAM chip in use"
  94. default SPIRAM_TYPE_AUTO
  95. config SPIRAM_TYPE_AUTO
  96. bool "Auto-detect"
  97. config SPIRAM_TYPE_ESPPSRAM16
  98. bool "ESP-PSRAM16 or APS1604"
  99. config SPIRAM_TYPE_ESPPSRAM32
  100. bool "ESP-PSRAM32 or IS25WP032"
  101. config SPIRAM_TYPE_ESPPSRAM64
  102. bool "ESP-PSRAM64 or LY68L6400"
  103. endchoice
  104. config SPIRAM_SIZE
  105. int
  106. default -1 if SPIRAM_TYPE_AUTO
  107. default 2097152 if SPIRAM_TYPE_ESPPSRAM16
  108. default 4194304 if SPIRAM_TYPE_ESPPSRAM32
  109. default 8388608 if SPIRAM_TYPE_ESPPSRAM64
  110. default 0
  111. choice SPIRAM_SPEED
  112. prompt "Set RAM clock speed"
  113. default SPIRAM_CACHE_SPEED_40M
  114. help
  115. Select the speed for the SPI RAM chip.
  116. If SPI RAM is enabled, we only support three combinations of SPI speed mode we supported now:
  117. 1. Flash SPI running at 40Mhz and RAM SPI running at 40Mhz
  118. 2. Flash SPI running at 80Mhz and RAM SPI running at 40Mhz
  119. 3. Flash SPI running at 80Mhz and RAM SPI running at 80Mhz
  120. Note: If the third mode(80Mhz+80Mhz) is enabled for SPI RAM of type 32MBit, one of the HSPI/VSPI host
  121. will be occupied by the system. Which SPI host to use can be selected by the config item
  122. SPIRAM_OCCUPY_SPI_HOST. Application code should never touch HSPI/VSPI hardware in this case. The
  123. option to select 80MHz will only be visible if the flash SPI speed is also 80MHz.
  124. (ESPTOOLPY_FLASHFREQ_80M is true)
  125. config SPIRAM_SPEED_40M
  126. bool "40MHz clock speed"
  127. config SPIRAM_SPEED_80M
  128. depends on ESPTOOLPY_FLASHFREQ_80M
  129. bool "80MHz clock speed"
  130. endchoice
  131. config SPIRAM_MEMTEST
  132. bool "Run memory test on SPI RAM initialization"
  133. default "y"
  134. depends on SPIRAM_BOOT_INIT
  135. help
  136. Runs a rudimentary memory test on initialization. Aborts when memory test fails. Disable this for
  137. slightly faster startop.
  138. config SPIRAM_CACHE_WORKAROUND
  139. bool "Enable workaround for bug in SPI RAM cache for Rev1 ESP32s"
  140. depends on (SPIRAM_USE_MEMMAP || SPIRAM_USE_CAPS_ALLOC || SPIRAM_USE_MALLOC) && (ESP32_REV_MIN < 3)
  141. default "y"
  142. help
  143. Revision 1 of the ESP32 has a bug that can cause a write to PSRAM not to take place in some situations
  144. when the cache line needs to be fetched from external RAM and an interrupt occurs. This enables a
  145. fix in the compiler (-mfix-esp32-psram-cache-issue) that makes sure the specific code that is
  146. vulnerable to this will not be emitted.
  147. This will also not use any bits of newlib that are located in ROM, opting for a version that is
  148. compiled with the workaround and located in flash instead.
  149. The workaround is not required for ESP32 revision 3 and above.
  150. config SPIRAM_BANKSWITCH_ENABLE
  151. bool "Enable bank switching for >4MiB external RAM"
  152. default y
  153. depends on SPIRAM_USE_MEMMAP || SPIRAM_USE_CAPS_ALLOC || SPIRAM_USE_MALLOC
  154. help
  155. The ESP32 only supports 4MiB of external RAM in its address space. The hardware does support larger
  156. memories, but these have to be bank-switched in and out of this address space. Enabling this allows you
  157. to reserve some MMU pages for this, which allows the use of the esp_himem api to manage these banks.
  158. #Note that this is limited to 62 banks, as esp_spiram_writeback_cache needs some kind of mapping of
  159. #some banks below that mark to work. We cannot at this moment guarantee this to exist when himem is
  160. #enabled.
  161. If spiram 2T mode is enabled, the size of 64Mbit psram will be changed as 32Mbit, so himem will be
  162. unusable.
  163. config SPIRAM_BANKSWITCH_RESERVE
  164. int "Amount of 32K pages to reserve for bank switching"
  165. depends on SPIRAM_BANKSWITCH_ENABLE
  166. default 8
  167. range 1 62
  168. help
  169. Select the amount of banks reserved for bank switching. Note that the amount of RAM allocatable with
  170. malloc/esp_heap_alloc_caps will decrease by 32K for each page reserved here.
  171. Note that this reservation is only actually done if your program actually uses the himem API. Without
  172. any himem calls, the reservation is not done and the original amount of memory will be available
  173. to malloc/esp_heap_alloc_caps.
  174. config SPIRAM_MALLOC_ALWAYSINTERNAL
  175. int "Maximum malloc() size, in bytes, to always put in internal memory"
  176. depends on SPIRAM_USE_MALLOC
  177. default 16384
  178. range 0 131072
  179. help
  180. If malloc() is capable of also allocating SPI-connected ram, its allocation strategy will prefer to
  181. allocate chunks less than this size in internal memory, while allocations larger than this will be
  182. done from external RAM. If allocation from the preferred region fails, an attempt is made to allocate
  183. from the non-preferred region instead, so malloc() will not suddenly fail when either internal or
  184. external memory is full.
  185. config WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST
  186. bool "Try to allocate memories of WiFi and LWIP in SPIRAM firstly. If failed, allocate internal memory"
  187. depends on SPIRAM_USE_CAPS_ALLOC || SPIRAM_USE_MALLOC
  188. default "n"
  189. help
  190. Try to allocate memories of WiFi and LWIP in SPIRAM firstly. If failed, try to allocate internal
  191. memory then.
  192. config SPIRAM_MALLOC_RESERVE_INTERNAL
  193. int "Reserve this amount of bytes for data that specifically needs to be in DMA or internal memory"
  194. depends on SPIRAM_USE_MALLOC
  195. default 32768
  196. range 0 262144
  197. help
  198. Because the external/internal RAM allocation strategy is not always perfect, it sometimes may happen
  199. that the internal memory is entirely filled up. This causes allocations that are specifically done in
  200. internal memory, for example the stack for new tasks or memory to service DMA or have memory that's
  201. also available when SPI cache is down, to fail. This option reserves a pool specifically for requests
  202. like that; the memory in this pool is not given out when a normal malloc() is called.
  203. Set this to 0 to disable this feature.
  204. Note that because FreeRTOS stacks are forced to internal memory, they will also use this memory pool;
  205. be sure to keep this in mind when adjusting this value.
  206. Note also that the DMA reserved pool may not be one single contiguous memory region, depending on the
  207. configured size and the static memory usage of the app.
  208. config SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY
  209. bool "Allow external memory as an argument to xTaskCreateStatic"
  210. default n
  211. depends on SPIRAM_USE_MALLOC
  212. help
  213. Because some bits of the ESP32 code environment cannot be recompiled with the cache workaround,
  214. normally tasks cannot be safely run with their stack residing in external memory; for this reason
  215. xTaskCreate and friends always allocate stack in internal memory and xTaskCreateStatic will check if
  216. the memory passed to it is in internal memory. If you have a task that needs a large amount of stack
  217. and does not call on ROM code in any way (no direct calls, but also no Bluetooth/WiFi), you can try to
  218. disable this and use xTaskCreateStatic to create the tasks stack in external memory.
  219. config SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY
  220. bool "Allow .bss segment placed in external memory"
  221. default n
  222. depends on SPIRAM_SUPPORT
  223. help
  224. If enabled the option,and add EXT_RAM_ATTR defined your variable,then your variable will be placed in
  225. PSRAM instead of internal memory, and placed most of variables of lwip,net802.11,pp,bluedroid library
  226. to external memory defaultly.
  227. choice SPIRAM_OCCUPY_SPI_HOST
  228. prompt "SPI host to use for 32MBit PSRAM"
  229. default SPIRAM_OCCUPY_VSPI_HOST
  230. depends on SPIRAM_SPEED_80M
  231. help
  232. When both flash and PSRAM is working under 80MHz, and the PSRAM is of type 32MBit, one of the HSPI/VSPI
  233. host will be used to output the clock. Select which one to use here.
  234. config SPIRAM_OCCUPY_HSPI_HOST
  235. bool "HSPI host (SPI2)"
  236. config SPIRAM_OCCUPY_VSPI_HOST
  237. bool "VSPI host (SPI3)"
  238. config SPIRAM_OCCUPY_NO_HOST
  239. bool "Will not try to use any host, will abort if not able to use the PSRAM"
  240. endchoice
  241. menu "PSRAM clock and cs IO for ESP32-DOWD"
  242. config D0WD_PSRAM_CLK_IO
  243. int "PSRAM CLK IO number"
  244. depends on SPIRAM_SUPPORT
  245. range 0 33
  246. default 17
  247. help
  248. The PSRAM CLOCK IO can be any unused GPIO, user can config it based on hardware design. If user use
  249. 1.8V flash and 1.8V psram, this value can only be one of 6, 7, 8, 9, 10, 11, 16, 17.
  250. config D0WD_PSRAM_CS_IO
  251. int "PSRAM CS IO number"
  252. depends on SPIRAM_SUPPORT
  253. range 0 33
  254. default 16
  255. help
  256. The PSRAM CS IO can be any unused GPIO, user can config it based on hardware design. If user use
  257. 1.8V flash and 1.8V psram, this value can only be one of 6, 7, 8, 9, 10, 11, 16, 17.
  258. endmenu
  259. menu "PSRAM clock and cs IO for ESP32-D2WD"
  260. config D2WD_PSRAM_CLK_IO
  261. int "PSRAM CLK IO number"
  262. depends on SPIRAM_SUPPORT
  263. range 0 33
  264. default 9
  265. help
  266. User can config it based on hardware design. For ESP32-D2WD chip, the psram can only be 1.8V psram,
  267. so this value can only be one of 6, 7, 8, 9, 10, 11, 16, 17.
  268. config D2WD_PSRAM_CS_IO
  269. int "PSRAM CS IO number"
  270. depends on SPIRAM_SUPPORT
  271. range 0 33
  272. default 10
  273. help
  274. User can config it based on hardware design. For ESP32-D2WD chip, the psram can only be 1.8V psram,
  275. so this value can only be one of 6, 7, 8, 9, 10, 11, 16, 17.
  276. endmenu
  277. menu "PSRAM clock and cs IO for ESP32-PICO"
  278. config PICO_PSRAM_CS_IO
  279. int "PSRAM CS IO number"
  280. depends on SPIRAM_SUPPORT
  281. range 0 33
  282. default 10
  283. help
  284. The PSRAM CS IO can be any unused GPIO, user can config it based on hardware design.
  285. For ESP32-PICO chip, the psram share clock with flash, so user do not need to configure the clock
  286. IO.
  287. For the reference hardware design, please refer to
  288. https://www.espressif.com/sites/default/files/documentation/esp32-pico-d4_datasheet_en.pdf
  289. endmenu
  290. config SPIRAM_CUSTOM_SPIWP_SD3_PIN
  291. bool "Use custom SPI PSRAM WP(SD3) Pin when flash pins set in eFuse (read help)"
  292. depends on FLASHMODE_DIO || FLASHMODE_DOUT
  293. default y if SPIRAM_SPIWP_SD3_PIN != 7 # backwards compatibility, can remove in IDF 5
  294. default n
  295. help
  296. This setting is only used if the SPI flash pins have been overridden by setting the eFuses
  297. SPI_PAD_CONFIG_xxx, and the SPI flash mode is DIO or DOUT.
  298. When this is the case, the eFuse config only defines 3 of the 4 Quad I/O data pins. The WP pin (aka
  299. ESP32 pin "SD_DATA_3" or SPI flash pin "IO2") is not specified in eFuse. The psram only has QPI
  300. mode, so a WP pin setting is necessary.
  301. If this config item is set to N (default), the correct WP pin will be automatically used for any
  302. Espressif chip or module with integrated flash. If a custom setting is needed, set this config item
  303. to Y and specify the GPIO number connected to the WP pin.
  304. When flash mode is set to QIO or QOUT, the PSRAM WP pin will be set the same as the SPI Flash WP pin
  305. configured in the bootloader.
  306. config SPIRAM_SPIWP_SD3_PIN
  307. int "Custom SPI PSRAM WP(SD3) Pin"
  308. depends on FLASHMODE_DIO || FLASHMODE_DOUT
  309. #depends on SPIRAM_CUSTOM_SPIWP_SD3_PIN # backwards compatibility, can uncomment in IDF 5
  310. range 0 33
  311. default 7
  312. help
  313. The option "Use custom SPI PSRAM WP(SD3) pin" must be set or this value is ignored
  314. If burning a customized set of SPI flash pins in eFuse and using DIO or DOUT mode for flash, set this
  315. value to the GPIO number of the SPIRAM WP pin.
  316. config SPIRAM_2T_MODE
  317. bool "Enable SPI PSRAM 2T mode"
  318. depends on SPIRAM_SUPPORT
  319. default "n"
  320. help
  321. Enable this option to fix single bit errors inside 64Mbit PSRAM.
  322. Some 64Mbit PSRAM chips have a hardware issue in the RAM which causes bit errors at multiple
  323. fixed bit positions.
  324. Note: If this option is enabled, the 64Mbit PSRAM chip will appear to be 32Mbit in size.
  325. Applications will not be affected unless the use the esp_himem APIs, which are not supported
  326. in 2T mode.
  327. endmenu # "SPI RAM config"
  328. config MEMMAP_TRACEMEM
  329. bool
  330. default "n"
  331. config MEMMAP_TRACEMEM_TWOBANKS
  332. bool
  333. default "n"
  334. config ESP32_TRAX
  335. bool "Use TRAX tracing feature"
  336. default "n"
  337. select MEMMAP_TRACEMEM
  338. help
  339. The ESP32 contains a feature which allows you to trace the execution path the processor
  340. has taken through the program. This is stored in a chunk of 32K (16K for single-processor)
  341. of memory that can't be used for general purposes anymore. Disable this if you do not know
  342. what this is.
  343. config ESP32_TRAX_TWOBANKS
  344. bool "Reserve memory for tracing both pro as well as app cpu execution"
  345. default "n"
  346. depends on ESP32_TRAX && !FREERTOS_UNICORE
  347. select MEMMAP_TRACEMEM_TWOBANKS
  348. help
  349. The ESP32 contains a feature which allows you to trace the execution path the processor
  350. has taken through the program. This is stored in a chunk of 32K (16K for single-processor)
  351. of memory that can't be used for general purposes anymore. Disable this if you do not know
  352. what this is.
  353. # Memory to reverse for trace, used in linker script
  354. config TRACEMEM_RESERVE_DRAM
  355. hex
  356. default 0x8000 if MEMMAP_TRACEMEM && MEMMAP_TRACEMEM_TWOBANKS
  357. default 0x4000 if MEMMAP_TRACEMEM && !MEMMAP_TRACEMEM_TWOBANKS
  358. default 0x0
  359. choice NUMBER_OF_UNIVERSAL_MAC_ADDRESS
  360. bool "Number of universally administered (by IEEE) MAC address"
  361. default FOUR_UNIVERSAL_MAC_ADDRESS
  362. help
  363. Configure the number of universally administered (by IEEE) MAC addresses.
  364. During initialisation, MAC addresses for each network interface are generated or derived from a
  365. single base MAC address.
  366. If the number of universal MAC addresses is four, all four interfaces (WiFi station, WiFi softap,
  367. Bluetooth and Ethernet) receive a universally administered MAC address. These are generated
  368. sequentially by adding 0, 1, 2 and 3 (respectively) to the final octet of the base MAC address.
  369. If the number of universal MAC addresses is two, only two interfaces (WiFi station and Bluetooth)
  370. receive a universally administered MAC address. These are generated sequentially by adding 0
  371. and 1 (respectively) to the base MAC address. The remaining two interfaces (WiFi softap and Ethernet)
  372. receive local MAC addresses. These are derived from the universal WiFi station and Bluetooth MAC
  373. addresses, respectively.
  374. When using the default (Espressif-assigned) base MAC address, either setting can be used. When using
  375. a custom universal MAC address range, the correct setting will depend on the allocation of MAC
  376. addresses in this range (either 2 or 4 per device.)
  377. config TWO_UNIVERSAL_MAC_ADDRESS
  378. bool "Two"
  379. config FOUR_UNIVERSAL_MAC_ADDRESS
  380. bool "Four"
  381. endchoice
  382. config NUMBER_OF_UNIVERSAL_MAC_ADDRESS
  383. int
  384. default 2 if TWO_UNIVERSAL_MAC_ADDRESS
  385. default 4 if FOUR_UNIVERSAL_MAC_ADDRESS
  386. config SYSTEM_EVENT_QUEUE_SIZE
  387. int "System event queue size"
  388. default 32
  389. help
  390. Config system event queue size in different application.
  391. config SYSTEM_EVENT_TASK_STACK_SIZE
  392. int "Event loop task stack size"
  393. default 2304
  394. help
  395. Config system event task stack size in different application.
  396. config MAIN_TASK_STACK_SIZE
  397. int "Main task stack size"
  398. default 3584
  399. help
  400. Configure the "main task" stack size. This is the stack of the task
  401. which calls app_main(). If app_main() returns then this task is deleted
  402. and its stack memory is freed.
  403. config IPC_TASK_STACK_SIZE
  404. int "Inter-Processor Call (IPC) task stack size"
  405. default 1024
  406. range 512 65536 if !ESP32_APPTRACE_ENABLE
  407. range 2048 65536 if ESP32_APPTRACE_ENABLE
  408. help
  409. Configure the IPC tasks stack size. One IPC task runs on each core
  410. (in dual core mode), and allows for cross-core function calls.
  411. See IPC documentation for more details.
  412. The default stack size should be enough for most common use cases.
  413. It can be shrunk if you are sure that you do not use any custom
  414. IPC functionality.
  415. config TIMER_TASK_STACK_SIZE
  416. int "High-resolution timer task stack size"
  417. default 3584
  418. range 2048 65536
  419. help
  420. Configure the stack size of esp_timer/ets_timer task. This task is used
  421. to dispatch callbacks of timers created using ets_timer and esp_timer
  422. APIs. If you are seing stack overflow errors in timer task, increase
  423. this value.
  424. Note that this is not the same as FreeRTOS timer task. To configure
  425. FreeRTOS timer task size, see "FreeRTOS timer task stack size" option
  426. in "FreeRTOS" menu.
  427. choice NEWLIB_STDOUT_LINE_ENDING
  428. prompt "Line ending for UART output"
  429. default NEWLIB_STDOUT_LINE_ENDING_CRLF
  430. help
  431. This option allows configuring the desired line endings sent to UART
  432. when a newline ('\n', LF) appears on stdout.
  433. Three options are possible:
  434. CRLF: whenever LF is encountered, prepend it with CR
  435. LF: no modification is applied, stdout is sent as is
  436. CR: each occurence of LF is replaced with CR
  437. This option doesn't affect behavior of the UART driver (drivers/uart.h).
  438. config NEWLIB_STDOUT_LINE_ENDING_CRLF
  439. bool "CRLF"
  440. config NEWLIB_STDOUT_LINE_ENDING_LF
  441. bool "LF"
  442. config NEWLIB_STDOUT_LINE_ENDING_CR
  443. bool "CR"
  444. endchoice
  445. choice NEWLIB_STDIN_LINE_ENDING
  446. prompt "Line ending for UART input"
  447. default NEWLIB_STDIN_LINE_ENDING_CR
  448. help
  449. This option allows configuring which input sequence on UART produces
  450. a newline ('\n', LF) on stdin.
  451. Three options are possible:
  452. CRLF: CRLF is converted to LF
  453. LF: no modification is applied, input is sent to stdin as is
  454. CR: each occurence of CR is replaced with LF
  455. This option doesn't affect behavior of the UART driver (drivers/uart.h).
  456. config NEWLIB_STDIN_LINE_ENDING_CRLF
  457. bool "CRLF"
  458. config NEWLIB_STDIN_LINE_ENDING_LF
  459. bool "LF"
  460. config NEWLIB_STDIN_LINE_ENDING_CR
  461. bool "CR"
  462. endchoice
  463. config NEWLIB_NANO_FORMAT
  464. bool "Enable 'nano' formatting options for printf/scanf family"
  465. default n
  466. help
  467. ESP32 ROM contains parts of newlib C library, including printf/scanf family
  468. of functions. These functions have been compiled with so-called "nano"
  469. formatting option. This option doesn't support 64-bit integer formats and C99
  470. features, such as positional arguments.
  471. For more details about "nano" formatting option, please see newlib readme file,
  472. search for '--enable-newlib-nano-formatted-io':
  473. https://sourceware.org/newlib/README
  474. If this option is enabled, build system will use functions available in
  475. ROM, reducing the application binary size. Functions available in ROM run
  476. faster than functions which run from flash. Functions available in ROM can
  477. also run when flash instruction cache is disabled.
  478. If you need 64-bit integer formatting support or C99 features, keep this
  479. option disabled.
  480. choice CONSOLE_UART
  481. prompt "UART for console output"
  482. default CONSOLE_UART_DEFAULT
  483. help
  484. Select whether to use UART for console output (through stdout and stderr).
  485. - Default is to use UART0 on pins GPIO1(TX) and GPIO3(RX).
  486. - If "Custom" is selected, UART0 or UART1 can be chosen,
  487. and any pins can be selected.
  488. - If "None" is selected, there will be no console output on any UART, except
  489. for initial output from ROM bootloader. This output can be further suppressed by
  490. bootstrapping GPIO13 pin to low logic level.
  491. config CONSOLE_UART_DEFAULT
  492. bool "Default: UART0, TX=GPIO1, RX=GPIO3"
  493. config CONSOLE_UART_CUSTOM
  494. bool "Custom"
  495. config CONSOLE_UART_NONE
  496. bool "None"
  497. endchoice
  498. choice CONSOLE_UART_NUM
  499. prompt "UART peripheral to use for console output (0-1)"
  500. depends on CONSOLE_UART_CUSTOM
  501. default CONSOLE_UART_CUSTOM_NUM_0
  502. help
  503. Due of a ROM bug, UART2 is not supported for console output
  504. via ets_printf.
  505. config CONSOLE_UART_CUSTOM_NUM_0
  506. bool "UART0"
  507. config CONSOLE_UART_CUSTOM_NUM_1
  508. bool "UART1"
  509. endchoice
  510. config CONSOLE_UART_NUM
  511. int
  512. default 0 if CONSOLE_UART_DEFAULT || CONSOLE_UART_NONE
  513. default 0 if CONSOLE_UART_CUSTOM_NUM_0
  514. default 1 if CONSOLE_UART_CUSTOM_NUM_1
  515. config CONSOLE_UART_TX_GPIO
  516. int "UART TX on GPIO#"
  517. depends on CONSOLE_UART_CUSTOM
  518. range 0 33
  519. default 19
  520. config CONSOLE_UART_RX_GPIO
  521. int "UART RX on GPIO#"
  522. depends on CONSOLE_UART_CUSTOM
  523. range 0 39
  524. default 21
  525. config CONSOLE_UART_BAUDRATE
  526. int "UART console baud rate"
  527. depends on !CONSOLE_UART_NONE
  528. default 115200
  529. range 1200 4000000
  530. config ULP_COPROC_ENABLED
  531. bool "Enable Ultra Low Power (ULP) Coprocessor"
  532. default "n"
  533. help
  534. Set to 'y' if you plan to load a firmware for the coprocessor.
  535. If this option is enabled, further coprocessor configuration will appear in the Components menu.
  536. config ULP_COPROC_RESERVE_MEM
  537. int
  538. prompt "RTC slow memory reserved for coprocessor" if ULP_COPROC_ENABLED
  539. default 512 if ULP_COPROC_ENABLED
  540. range 32 8192 if ULP_COPROC_ENABLED
  541. default 0 if !ULP_COPROC_ENABLED
  542. range 0 0 if !ULP_COPROC_ENABLED
  543. help
  544. Bytes of memory to reserve for ULP coprocessor firmware & data.
  545. Data is reserved at the beginning of RTC slow memory.
  546. choice ESP32_PANIC
  547. prompt "Panic handler behaviour"
  548. default ESP32_PANIC_PRINT_REBOOT
  549. help
  550. If FreeRTOS detects unexpected behaviour or an unhandled exception, the panic handler is
  551. invoked. Configure the panic handlers action here.
  552. config ESP32_PANIC_PRINT_HALT
  553. bool "Print registers and halt"
  554. help
  555. Outputs the relevant registers over the serial port and halt the
  556. processor. Needs a manual reset to restart.
  557. config ESP32_PANIC_PRINT_REBOOT
  558. bool "Print registers and reboot"
  559. help
  560. Outputs the relevant registers over the serial port and immediately
  561. reset the processor.
  562. config ESP32_PANIC_SILENT_REBOOT
  563. bool "Silent reboot"
  564. help
  565. Just resets the processor without outputting anything
  566. config ESP32_PANIC_GDBSTUB
  567. bool "Invoke GDBStub"
  568. help
  569. Invoke gdbstub on the serial port, allowing for gdb to attach to it to do a postmortem
  570. of the crash.
  571. endchoice
  572. config GDBSTUB_SUPPORT_TASKS
  573. bool "GDBStub: enable listing FreeRTOS tasks"
  574. default y
  575. depends on ESP32_PANIC_GDBSTUB
  576. help
  577. If enabled, GDBStub can supply the list of FreeRTOS tasks to GDB.
  578. Thread list can be queried from GDB using 'info threads' command.
  579. Note that if GDB task lists were corrupted, this feature may not work.
  580. If GDBStub fails, try disabling this feature.
  581. config GDBSTUB_MAX_TASKS
  582. int "GDBStub: maximum number of tasks supported"
  583. default 32
  584. depends on GDBSTUB_SUPPORT_TASKS
  585. help
  586. Set the number of tasks which GDB Stub will support.
  587. config ESP32_DEBUG_OCDAWARE
  588. bool "Make exception and panic handlers JTAG/OCD aware"
  589. default y
  590. help
  591. The FreeRTOS panic and unhandled exception handers can detect a JTAG OCD debugger and
  592. instead of panicking, have the debugger stop on the offending instruction.
  593. config ESP32_DEBUG_STUBS_ENABLE
  594. bool "OpenOCD debug stubs"
  595. default OPTIMIZATION_LEVEL_DEBUG
  596. depends on !ESP32_TRAX
  597. help
  598. Debug stubs are used by OpenOCD to execute pre-compiled onboard code which does some useful debugging,
  599. e.g. GCOV data dump.
  600. config INT_WDT
  601. bool "Interrupt watchdog"
  602. default y
  603. help
  604. This watchdog timer can detect if the FreeRTOS tick interrupt has not been called for a certain time,
  605. either because a task turned off interrupts and did not turn them on for a long time, or because an
  606. interrupt handler did not return. It will try to invoke the panic handler first and failing that
  607. reset the SoC.
  608. config INT_WDT_TIMEOUT_MS
  609. int "Interrupt watchdog timeout (ms)"
  610. depends on INT_WDT
  611. default 300 if !SPIRAM_SUPPORT
  612. default 800 if SPIRAM_SUPPORT
  613. range 10 10000
  614. help
  615. The timeout of the watchdog, in miliseconds. Make this higher than the FreeRTOS tick rate.
  616. config INT_WDT_CHECK_CPU1
  617. bool "Also watch CPU1 tick interrupt"
  618. depends on INT_WDT && !FREERTOS_UNICORE
  619. default y
  620. help
  621. Also detect if interrupts on CPU 1 are disabled for too long.
  622. config TASK_WDT
  623. bool "Initialize Task Watchdog Timer on startup"
  624. default y
  625. help
  626. The Task Watchdog Timer can be used to make sure individual tasks are still
  627. running. Enabling this option will cause the Task Watchdog Timer to be
  628. initialized automatically at startup. The Task Watchdog timer can be
  629. initialized after startup as well (see Task Watchdog Timer API Reference)
  630. config TASK_WDT_PANIC
  631. bool "Invoke panic handler on Task Watchdog timeout"
  632. depends on TASK_WDT
  633. default n
  634. help
  635. If this option is enabled, the Task Watchdog Timer will be configured to
  636. trigger the panic handler when it times out. This can also be configured
  637. at run time (see Task Watchdog Timer API Reference)
  638. config TASK_WDT_TIMEOUT_S
  639. int "Task Watchdog timeout period (seconds)"
  640. depends on TASK_WDT
  641. range 1 60
  642. default 5
  643. help
  644. Timeout period configuration for the Task Watchdog Timer in seconds.
  645. This is also configurable at run time (see Task Watchdog Timer API Reference)
  646. config TASK_WDT_CHECK_IDLE_TASK_CPU0
  647. bool "Watch CPU0 Idle Task"
  648. depends on TASK_WDT
  649. default y
  650. help
  651. If this option is enabled, the Task Watchdog Timer will watch the CPU0
  652. Idle Task. Having the Task Watchdog watch the Idle Task allows for detection
  653. of CPU starvation as the Idle Task not being called is usually a symptom of
  654. CPU starvation. Starvation of the Idle Task is detrimental as FreeRTOS household
  655. tasks depend on the Idle Task getting some runtime every now and then.
  656. config TASK_WDT_CHECK_IDLE_TASK_CPU1
  657. bool "Watch CPU1 Idle Task"
  658. depends on TASK_WDT && !FREERTOS_UNICORE
  659. default y
  660. help
  661. If this option is enabled, the Task Wtachdog Timer will wach the CPU1
  662. Idle Task.
  663. config BROWNOUT_DET
  664. #The brownout detector code is disabled (by making it depend on a nonexisting symbol) because the current
  665. #revision of ESP32 silicon has a bug in the brown-out detector, rendering it unusable for resetting the CPU.
  666. bool "Hardware brownout detect & reset"
  667. default y
  668. help
  669. The ESP32 has a built-in brownout detector which can detect if the voltage is lower than
  670. a specific value. If this happens, it will reset the chip in order to prevent unintended
  671. behaviour.
  672. choice BROWNOUT_DET_LVL_SEL
  673. prompt "Brownout voltage level"
  674. depends on BROWNOUT_DET
  675. default BROWNOUT_DET_LVL_SEL_25
  676. help
  677. The brownout detector will reset the chip when the supply voltage is approximately
  678. below this level. Note that there may be some variation of brownout voltage level
  679. between each ESP32 chip.
  680. #The voltage levels here are estimates, more work needs to be done to figure out the exact voltages
  681. #of the brownout threshold levels.
  682. config BROWNOUT_DET_LVL_SEL_0
  683. bool "2.43V +/- 0.05"
  684. config BROWNOUT_DET_LVL_SEL_1
  685. bool "2.48V +/- 0.05"
  686. config BROWNOUT_DET_LVL_SEL_2
  687. bool "2.58V +/- 0.05"
  688. config BROWNOUT_DET_LVL_SEL_3
  689. bool "2.62V +/- 0.05"
  690. config BROWNOUT_DET_LVL_SEL_4
  691. bool "2.67V +/- 0.05"
  692. config BROWNOUT_DET_LVL_SEL_5
  693. bool "2.70V +/- 0.05"
  694. config BROWNOUT_DET_LVL_SEL_6
  695. bool "2.77V +/- 0.05"
  696. config BROWNOUT_DET_LVL_SEL_7
  697. bool "2.80V +/- 0.05"
  698. endchoice
  699. config BROWNOUT_DET_LVL
  700. int
  701. default 0 if BROWNOUT_DET_LVL_SEL_0
  702. default 1 if BROWNOUT_DET_LVL_SEL_1
  703. default 2 if BROWNOUT_DET_LVL_SEL_2
  704. default 3 if BROWNOUT_DET_LVL_SEL_3
  705. default 4 if BROWNOUT_DET_LVL_SEL_4
  706. default 5 if BROWNOUT_DET_LVL_SEL_5
  707. default 6 if BROWNOUT_DET_LVL_SEL_6
  708. default 7 if BROWNOUT_DET_LVL_SEL_7
  709. #Reduce PHY TX power when brownout reset
  710. config REDUCE_PHY_TX_POWER
  711. bool "Reduce PHY TX power when brownout reset"
  712. depends on BROWNOUT_DET
  713. default y
  714. help
  715. When brownout reset occurs, reduce PHY TX power to keep the code running
  716. # Note about the use of "FRC1" name: currently FRC1 timer is not used for
  717. # high resolution timekeeping anymore. Instead the esp_timer API, implemented
  718. # using FRC2 timer, is used.
  719. # FRC1 name in the option name is kept for compatibility.
  720. choice ESP32_TIME_SYSCALL
  721. prompt "Timers used for gettimeofday function"
  722. default ESP32_TIME_SYSCALL_USE_RTC_FRC1
  723. help
  724. This setting defines which hardware timers are used to
  725. implement 'gettimeofday' and 'time' functions in C library.
  726. - If both high-resolution and RTC timers are used, timekeeping will
  727. continue in deep sleep. Time will be reported at 1 microsecond
  728. resolution. This is the default, and the recommended option.
  729. - If only high-resolution timer is used, gettimeofday will
  730. provide time at microsecond resolution.
  731. Time will not be preserved when going into deep sleep mode.
  732. - If only RTC timer is used, timekeeping will continue in
  733. deep sleep, but time will be measured at 6.(6) microsecond
  734. resolution. Also the gettimeofday function itself may take
  735. longer to run.
  736. - If no timers are used, gettimeofday and time functions
  737. return -1 and set errno to ENOSYS.
  738. - When RTC is used for timekeeping, two RTC_STORE registers are
  739. used to keep time in deep sleep mode.
  740. config ESP32_TIME_SYSCALL_USE_RTC_FRC1
  741. bool "RTC and high-resolution timer"
  742. config ESP32_TIME_SYSCALL_USE_RTC
  743. bool "RTC"
  744. config ESP32_TIME_SYSCALL_USE_FRC1
  745. bool "High-resolution timer"
  746. config ESP32_TIME_SYSCALL_USE_NONE
  747. bool "None"
  748. endchoice
  749. choice ESP32_RTC_CLOCK_SOURCE
  750. prompt "RTC clock source"
  751. default ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC
  752. help
  753. Choose which clock is used as RTC clock source.
  754. - "Internal 150kHz oscillator" option provides lowest deep sleep current
  755. consumption, and does not require extra external components. However
  756. frequency stability with respect to temperature is poor, so time may
  757. drift in deep/light sleep modes.
  758. - "External 32kHz crystal" provides better frequency stability, at the
  759. expense of slightly higher (1uA) deep sleep current consumption.
  760. - "External 32kHz oscillator" allows using 32kHz clock generated by an
  761. external circuit. In this case, external clock signal must be connected
  762. to 32K_XP pin. Amplitude should be <1.2V in case of sine wave signal,
  763. and <1V in case of square wave signal. Common mode voltage should be
  764. 0.1 < Vcm < 0.5Vamp, where Vamp is the signal amplitude.
  765. Additionally, 1nF capacitor must be connected between 32K_XN pin and
  766. ground. 32K_XN pin can not be used as a GPIO in this case.
  767. - "Internal 8.5MHz oscillator divided by 256" option results in higher
  768. deep sleep current (by 5uA) but has better frequency stability than
  769. the internal 150kHz oscillator. It does not require external components.
  770. config ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC
  771. bool "Internal 150kHz RC oscillator"
  772. config ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL
  773. bool "External 32kHz crystal"
  774. config ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC
  775. bool "External 32kHz oscillator at 32K_XP pin"
  776. config ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256
  777. bool "Internal 8.5MHz oscillator, divided by 256 (~33kHz)"
  778. endchoice
  779. config ESP32_RTC_EXTERNAL_CRYSTAL_ADDITIONAL_CURRENT
  780. bool "Additional current for external 32kHz crystal"
  781. depends on ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL
  782. default "n"
  783. help
  784. Choose which additional current is used for rtc external crystal.
  785. - With some 32kHz crystal configurations, the X32N and X32P pins may not
  786. have enough drive strength to keep the crystal oscillating during deep sleep.
  787. If this option is enabled, additional current from touchpad 9 is provided
  788. internally to drive the 32kHz crystal. If this option is enabled, deep sleep current
  789. is slightly higher (4-5uA) and the touchpad and ULP wakeup sources are not available.
  790. config ESP32_RTC_CLK_CAL_CYCLES
  791. int "Number of cycles for RTC_SLOW_CLK calibration"
  792. default 3000 if ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL || ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC || ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 # NOERROR
  793. default 1024 if ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC
  794. range 0 27000 if ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL || ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC || ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 # NOERROR
  795. range 0 32766 if ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC
  796. help
  797. When the startup code initializes RTC_SLOW_CLK, it can perform
  798. calibration by comparing the RTC_SLOW_CLK frequency with main XTAL
  799. frequency. This option sets the number of RTC_SLOW_CLK cycles measured
  800. by the calibration routine. Higher numbers increase calibration
  801. precision, which may be important for applications which spend a lot of
  802. time in deep sleep. Lower numbers reduce startup time.
  803. When this option is set to 0, clock calibration will not be performed at
  804. startup, and approximate clock frequencies will be assumed:
  805. - 150000 Hz if internal RC oscillator is used as clock source. For this use value 1024.
  806. - 32768 Hz if the 32k crystal oscillator is used. For this use value 3000 or more.
  807. In case more value will help improve the definition of the launch of the crystal.
  808. If the crystal could not start, it will be switched to internal RC.
  809. config ESP32_RTC_XTAL_CAL_RETRY
  810. int "Number of attempts to repeat 32k XTAL calibration"
  811. default 1
  812. depends on ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL
  813. help
  814. Number of attempts to repeat 32k XTAL calibration
  815. before giving up and switching to the internal RC.
  816. Increase this option if the 32k crystal oscillator
  817. does not start and switches to internal RC.
  818. config ESP32_RTC_XTAL_BOOTSTRAP_CYCLES
  819. int "Bootstrap cycles for external 32kHz crystal"
  820. depends on ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL
  821. default 5
  822. range 0 32768
  823. help
  824. To reduce the startup time of an external RTC crystal,
  825. we bootstrap it with a 32kHz square wave for a fixed number of cycles.
  826. Setting 0 will disable bootstrapping (if disabled, the crystal may take
  827. longer to start up or fail to oscillate under some conditions).
  828. If this value is too high, a faulty crystal may initially start and then fail.
  829. If this value is too low, an otherwise good crystal may not start.
  830. To accurately determine if the crystal has started,
  831. set a larger "Number of cycles for RTC_SLOW_CLK calibration" (about 3000).
  832. config ESP32_DEEP_SLEEP_WAKEUP_DELAY
  833. int "Extra delay in deep sleep wake stub (in us)"
  834. default 2000
  835. range 0 5000
  836. help
  837. When ESP32 exits deep sleep, the CPU and the flash chip are powered on
  838. at the same time. CPU will run deep sleep stub first, and then
  839. proceed to load code from flash. Some flash chips need sufficient
  840. time to pass between power on and first read operation. By default,
  841. without any extra delay, this time is approximately 900us, although
  842. some flash chip types need more than that.
  843. By default extra delay is set to 2000us. When optimizing startup time
  844. for applications which require it, this value may be reduced.
  845. If you are seeing "flash read err, 1000" message printed to the
  846. console after deep sleep reset, try increasing this value.
  847. choice ESP32_XTAL_FREQ_SEL
  848. prompt "Main XTAL frequency"
  849. default ESP32_XTAL_FREQ_40
  850. help
  851. ESP32 currently supports the following XTAL frequencies:
  852. - 26 MHz
  853. - 40 MHz
  854. Startup code can automatically estimate XTAL frequency. This feature
  855. uses the internal 8MHz oscillator as a reference. Because the internal
  856. oscillator frequency is temperature dependent, it is not recommended
  857. to use automatic XTAL frequency detection in applications which need
  858. to work at high ambient temperatures and use high-temperature
  859. qualified chips and modules.
  860. config ESP32_XTAL_FREQ_40
  861. bool "40 MHz"
  862. config ESP32_XTAL_FREQ_26
  863. bool "26 MHz"
  864. config ESP32_XTAL_FREQ_AUTO
  865. bool "Autodetect"
  866. endchoice
  867. # Keep these values in sync with rtc_xtal_freq_t enum in soc/rtc.h
  868. config ESP32_XTAL_FREQ
  869. int
  870. default 0 if ESP32_XTAL_FREQ_AUTO
  871. default 40 if ESP32_XTAL_FREQ_40
  872. default 26 if ESP32_XTAL_FREQ_26
  873. config DISABLE_BASIC_ROM_CONSOLE
  874. bool "Permanently disable BASIC ROM Console"
  875. default n
  876. help
  877. If set, the first time the app boots it will disable the BASIC ROM Console
  878. permanently (by burning an eFuse).
  879. Otherwise, the BASIC ROM Console starts on reset if no valid bootloader is
  880. read from the flash.
  881. (Enabling secure boot also disables the BASIC ROM Console by default.)
  882. config NO_BLOBS
  883. bool "No Binary Blobs"
  884. depends on !BT_ENABLED
  885. default n
  886. help
  887. If enabled, this disables the linking of binary libraries in the application build. Note
  888. that after enabling this Wi-Fi/Bluetooth will not work.
  889. config ESP_TIMER_PROFILING
  890. bool "Enable esp_timer profiling features"
  891. default n
  892. help
  893. If enabled, esp_timer_dump will dump information such as number of times
  894. the timer was started, number of times the timer has triggered, and the
  895. total time it took for the callback to run.
  896. This option has some effect on timer performance and the amount of memory
  897. used for timer storage, and should only be used for debugging/testing
  898. purposes.
  899. config COMPATIBLE_PRE_V2_1_BOOTLOADERS
  900. bool "App compatible with bootloaders before ESP-IDF v2.1"
  901. select ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS
  902. default n
  903. help
  904. Bootloaders before ESP-IDF v2.1 did less initialisation of the
  905. system clock. This setting needs to be enabled to build an app
  906. which can be booted by these older bootloaders.
  907. If this setting is enabled, the app can be booted by any bootloader
  908. from IDF v1.0 up to the current version.
  909. If this setting is disabled, the app can only be booted by bootloaders
  910. from IDF v2.1 or newer.
  911. Enabling this setting adds approximately 1KB to the app's IRAM usage.
  912. config ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS
  913. bool "App compatible with bootloader and partition table before ESP-IDF v3.1"
  914. default n
  915. help
  916. Partition tables before ESP-IDF V3.1 do not contain an MD5 checksum
  917. field, and the bootloader before ESP-IDF v3.1 cannot read a partition
  918. table that contains an MD5 checksum field.
  919. Enable this option only if your app needs to boot on a bootloader and/or
  920. partition table that was generated from a version *before* ESP-IDF v3.1.
  921. If this option and Flash Encryption are enabled at the same time, and any
  922. data partitions in the partition table are marked Encrypted, then the
  923. partition encrypted flag should be manually verified in the app before accessing
  924. the partition (see CVE-2021-27926).
  925. config ESP_ERR_TO_NAME_LOOKUP
  926. bool "Enable lookup of error code strings"
  927. default "y"
  928. help
  929. Functions esp_err_to_name() and esp_err_to_name_r() return string
  930. representations of error codes from a pre-generated lookup table.
  931. This option can be used to turn off the use of the look-up table in
  932. order to save memory but this comes at the price of sacrificing
  933. distinguishable (meaningful) output string representations.
  934. config ESP32_RTCDATA_IN_FAST_MEM
  935. bool "Place RTC_DATA_ATTR and RTC_RODATA_ATTR variables into RTC fast memory segment"
  936. default n
  937. depends on FREERTOS_UNICORE
  938. help
  939. This option allows to place .rtc_data and .rtc_rodata sections into
  940. RTC fast memory segment to free the slow memory region for ULP programs.
  941. This option depends on the CONFIG_FREERTOS_UNICORE option because RTC fast memory
  942. can be accessed only by PRO_CPU core.
  943. config ESP32_DPORT_DIS_INTERRUPT_LVL
  944. int "Disable the interrupt level for the DPORT workarounds"
  945. default 5
  946. help
  947. To prevent interrupting DPORT workarounds,
  948. need to disable interrupt with a maximum used level in the system.
  949. endmenu # ESP32-Specific
  950. menu Wi-Fi
  951. config SW_COEXIST_ENABLE
  952. bool "Software controls WiFi/Bluetooth coexistence"
  953. depends on BT_ENABLED
  954. default y
  955. help
  956. If enabled, WiFi & Bluetooth coexistence is controlled by software rather than hardware.
  957. Recommended for heavy traffic scenarios. Both coexistence configuration options are
  958. automatically managed, no user intervention is required.
  959. If only Bluetooth is used, it is recommended to disable this option to reduce binary file
  960. size.
  961. config ESP32_WIFI_STATIC_RX_BUFFER_NUM
  962. int "Max number of WiFi static RX buffers"
  963. range 2 25
  964. default 10 if !WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST
  965. default 16 if WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST
  966. help
  967. Set the number of WiFi static RX buffers. Each buffer takes approximately 1.6KB of RAM.
  968. The static rx buffers are allocated when esp_wifi_init is called, they are not freed
  969. until esp_wifi_deinit is called.
  970. WiFi hardware use these buffers to receive all 802.11 frames.
  971. A higher number may allow higher throughput but increases memory use. If ESP32_WIFI_AMPDU_RX_ENABLED
  972. is enabled, this value is recommended to set equal or bigger than ESP32_WIFI_RX_BA_WIN in order to
  973. achieve better throughput and compatibility with both stations and APs.
  974. config ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM
  975. int "Max number of WiFi dynamic RX buffers"
  976. range 0 128 if !LWIP_WND_SCALE
  977. range 0 1024 if LWIP_WND_SCALE
  978. default 32
  979. help
  980. Set the number of WiFi dynamic RX buffers, 0 means unlimited RX buffers will be allocated
  981. (provided sufficient free RAM). The size of each dynamic RX buffer depends on the size of
  982. the received data frame.
  983. For each received data frame, the WiFi driver makes a copy to an RX buffer and then delivers
  984. it to the high layer TCP/IP stack. The dynamic RX buffer is freed after the higher layer has
  985. successfully received the data frame.
  986. For some applications, WiFi data frames may be received faster than the application can
  987. process them. In these cases we may run out of memory if RX buffer number is unlimited (0).
  988. If a dynamic RX buffer limit is set, it should be at least the number of static RX buffers.
  989. choice ESP32_WIFI_TX_BUFFER
  990. prompt "Type of WiFi TX buffers"
  991. default ESP32_WIFI_DYNAMIC_TX_BUFFER
  992. help
  993. Select type of WiFi TX buffers:
  994. If "Static" is selected, WiFi TX buffers are allocated when WiFi is initialized and released
  995. when WiFi is de-initialized. The size of each static TX buffer is fixed to about 1.6KB.
  996. If "Dynamic" is selected, each WiFi TX buffer is allocated as needed when a data frame is
  997. delivered to the Wifi driver from the TCP/IP stack. The buffer is freed after the data frame
  998. has been sent by the WiFi driver. The size of each dynamic TX buffer depends on the length
  999. of each data frame sent by the TCP/IP layer.
  1000. If PSRAM is enabled, "Static" should be selected to guarantee enough WiFi TX buffers.
  1001. If PSRAM is disabled, "Dynamic" should be selected to improve the utilization of RAM.
  1002. config ESP32_WIFI_STATIC_TX_BUFFER
  1003. bool "Static"
  1004. config ESP32_WIFI_DYNAMIC_TX_BUFFER
  1005. bool "Dynamic"
  1006. depends on !SPIRAM_USE_MALLOC
  1007. endchoice
  1008. config ESP32_WIFI_TX_BUFFER_TYPE
  1009. int
  1010. default 0 if ESP32_WIFI_STATIC_TX_BUFFER
  1011. default 1 if ESP32_WIFI_DYNAMIC_TX_BUFFER
  1012. config ESP32_WIFI_STATIC_TX_BUFFER_NUM
  1013. int "Max number of WiFi static TX buffers"
  1014. depends on ESP32_WIFI_STATIC_TX_BUFFER
  1015. range 1 64
  1016. default 16
  1017. help
  1018. Set the number of WiFi static TX buffers. Each buffer takes approximately 1.6KB of RAM.
  1019. The static RX buffers are allocated when esp_wifi_init() is called, they are not released
  1020. until esp_wifi_deinit() is called.
  1021. For each transmitted data frame from the higher layer TCP/IP stack, the WiFi driver makes a
  1022. copy of it in a TX buffer. For some applications especially UDP applications, the upper
  1023. layer can deliver frames faster than WiFi layer can transmit. In these cases, we may run out
  1024. of TX buffers.
  1025. config ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM
  1026. int "Max number of WiFi dynamic TX buffers"
  1027. depends on ESP32_WIFI_DYNAMIC_TX_BUFFER
  1028. range 1 128
  1029. default 32
  1030. help
  1031. Set the number of WiFi dynamic TX buffers. The size of each dynamic TX buffer is not fixed,
  1032. it depends on the size of each transmitted data frame.
  1033. For each transmitted frame from the higher layer TCP/IP stack, the WiFi driver makes a copy
  1034. of it in a TX buffer. For some applications, especially UDP applications, the upper layer
  1035. can deliver frames faster than WiFi layer can transmit. In these cases, we may run out of TX
  1036. buffers.
  1037. config ESP32_WIFI_CSI_ENABLED
  1038. bool "WiFi CSI(Channel State Information)"
  1039. default n
  1040. help
  1041. Select this option to enable CSI(Channel State Information) feature. CSI takes about
  1042. CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM KB of RAM. If CSI is not used, it is better to disable
  1043. this feature in order to save memory.
  1044. config ESP32_WIFI_AMPDU_TX_ENABLED
  1045. bool "WiFi AMPDU TX"
  1046. default y
  1047. help
  1048. Select this option to enable AMPDU TX feature
  1049. config ESP32_WIFI_TX_BA_WIN
  1050. int "WiFi AMPDU TX BA window size"
  1051. depends on ESP32_WIFI_AMPDU_TX_ENABLED
  1052. range 2 32
  1053. default 6
  1054. help
  1055. Set the size of WiFi Block Ack TX window. Generally a bigger value means higher throughput but
  1056. more memory. Most of time we should NOT change the default value unless special reason, e.g.
  1057. test the maximum UDP TX throughput with iperf etc. For iperf test in shieldbox, the recommended
  1058. value is 9~12.
  1059. config ESP32_WIFI_AMPDU_RX_ENABLED
  1060. bool "WiFi AMPDU RX"
  1061. default y
  1062. help
  1063. Select this option to enable AMPDU RX feature
  1064. config ESP32_WIFI_RX_BA_WIN
  1065. int "WiFi AMPDU RX BA window size"
  1066. depends on ESP32_WIFI_AMPDU_RX_ENABLED
  1067. range 2 32 if !WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST
  1068. range 16 32 if WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST
  1069. default 6 if !WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST
  1070. default 16 if WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST
  1071. help
  1072. Set the size of WiFi Block Ack RX window. Generally a bigger value means higher throughput and better
  1073. compatibility but more memory. Most of time we should NOT change the default value unless special
  1074. reason, e.g. test the maximum UDP RX throughput with iperf etc. For iperf test in shieldbox, the
  1075. recommended value is 9~12. If PSRAM is used and WiFi memory is prefered to allocat in PSRAM first,
  1076. the default and minimum value should be 16 to achieve better throughput and compatibility with both
  1077. stations and APs.
  1078. config ESP32_WIFI_NVS_ENABLED
  1079. bool "WiFi NVS flash"
  1080. default y
  1081. help
  1082. Select this option to enable WiFi NVS flash
  1083. choice ESP32_WIFI_TASK_CORE_ID
  1084. depends on !FREERTOS_UNICORE
  1085. prompt "WiFi Task Core ID"
  1086. default ESP32_WIFI_TASK_PINNED_TO_CORE_0
  1087. help
  1088. Pinned WiFi task to core 0 or core 1.
  1089. config ESP32_WIFI_TASK_PINNED_TO_CORE_0
  1090. bool "Core 0"
  1091. config ESP32_WIFI_TASK_PINNED_TO_CORE_1
  1092. bool "Core 1"
  1093. endchoice
  1094. config ESP32_WIFI_SOFTAP_BEACON_MAX_LEN
  1095. int "Max length of WiFi SoftAP Beacon"
  1096. range 752 1256
  1097. default 752
  1098. help
  1099. ESP-MESH utilizes beacon frames to detect and resolve root node conflicts (see documentation). However the
  1100. default length of a beacon frame can simultaneously hold only five root node identifier structures,
  1101. meaning that a root node conflict of up to five nodes can be detected at one time. In the occurence of
  1102. more root nodes conflict involving more than five root nodes, the conflict resolution process will detect
  1103. five of the root nodes, resolve the conflict, and re-detect more root nodes. This process will repeat
  1104. until all root node conflicts are resolved. However this process can generally take a very long time.
  1105. To counter this situation, the beacon frame length can be increased such that more root nodes can be
  1106. detected simultaneously. Each additional root node will require 36 bytes and should be added ontop of the
  1107. default beacon frame length of
  1108. 752 bytes. For example, if you want to detect 10 root nodes simultaneously, you need to set the beacon
  1109. frame length as
  1110. 932 (752+36*5).
  1111. Setting a longer beacon length also assists with debugging as the conflicting root nodes can be identified
  1112. more quickly.
  1113. config ESP32_WIFI_MGMT_SBUF_NUM
  1114. int "WiFi mgmt short buffer number"
  1115. range 6 32
  1116. default 32
  1117. help
  1118. Set the number of WiFi management short buffer.
  1119. config ESP32_WIFI_DEBUG_LOG_ENABLE
  1120. bool "Enable WiFi debug log"
  1121. default n
  1122. help
  1123. Select this option to enable WiFi debug log
  1124. choice ESP32_WIFI_DEBUG_LOG_LEVEL
  1125. depends on ESP32_WIFI_DEBUG_LOG_ENABLE
  1126. prompt "WiFi debug log level"
  1127. default ESP32_WIFI_LOG_DEBUG
  1128. help
  1129. The WiFi log is divided into the following levels: ERROR,WARNING,INFO,DEBUG,VERBOSE.
  1130. The ERROR,WARNING,INFO levels are enabled by default, and the DEBUG,VERBOSE levels can be enabled here.
  1131. config ESP32_WIFI_DEBUG_LOG_DEBUG
  1132. bool "WiFi Debug Log Debug"
  1133. config ESP32_WIFI_DEBUG_LOG_VERBOSE
  1134. bool "WiFi Debug Log Verbose"
  1135. endchoice
  1136. choice ESP32_WIFI_DEBUG_LOG_MODULE
  1137. depends on ESP32_WIFI_DEBUG_LOG_ENABLE
  1138. prompt "WiFi debug log module"
  1139. default ESP32_WIFI_DEBUG_LOG_MODULE_WIFI
  1140. help
  1141. The WiFi log module contains three parts: WIFI,COEX,MESH. The WIFI module indicates the logs related to
  1142. WiFi, the COEX module indicates the logs related to WiFi and BT(or BLE) coexist, the MESH module indicates
  1143. the logs related to Mesh. When ESP32_WIFI_LOG_MODULE_ALL is enabled, all modules are selected.
  1144. config ESP32_WIFI_DEBUG_LOG_MODULE_ALL
  1145. bool "WiFi Debug Log Module All"
  1146. config ESP32_WIFI_DEBUG_LOG_MODULE_WIFI
  1147. bool "WiFi Debug Log Module WiFi"
  1148. config ESP32_WIFI_DEBUG_LOG_MODULE_COEX
  1149. bool "WiFi Debug Log Module Coex"
  1150. config ESP32_WIFI_DEBUG_LOG_MODULE_MESH
  1151. bool "WiFi Debug Log Module Mesh"
  1152. endchoice
  1153. config ESP32_WIFI_DEBUG_LOG_SUBMODULE
  1154. depends on ESP32_WIFI_DEBUG_LOG_ENABLE
  1155. bool "WiFi debug log submodule"
  1156. default n
  1157. help
  1158. Enable this option to set the WiFi debug log submodule.
  1159. Currently the log submodule contains the following parts: INIT,IOCTL,CONN,SCAN.
  1160. The INIT submodule indicates the initialization process.The IOCTL submodule indicates the API calling
  1161. process.
  1162. The CONN submodule indicates the connecting process.The SCAN submodule indicates the scaning process.
  1163. config ESP32_WIFI_DEBUG_LOG_SUBMODULE_ALL
  1164. depends on ESP32_WIFI_DEBUG_LOG_SUBMODULE
  1165. bool "WiFi Debug Log Submodule All"
  1166. default n
  1167. help
  1168. When this option is enabled, all debug submodules are selected.
  1169. config ESP32_WIFI_DEBUG_LOG_SUBMODULE_INIT
  1170. depends on ESP32_WIFI_DEBUG_LOG_SUBMODULE && (!ESP32_WIFI_DEBUG_LOG_SUBMODULE_ALL)
  1171. bool "WiFi Debug Log Submodule Init"
  1172. default n
  1173. config ESP32_WIFI_DEBUG_LOG_SUBMODULE_IOCTL
  1174. depends on ESP32_WIFI_DEBUG_LOG_SUBMODULE && (!ESP32_WIFI_DEBUG_LOG_SUBMODULE_ALL)
  1175. bool "WiFi Debug Log Submodule Ioctl"
  1176. default n
  1177. config ESP32_WIFI_DEBUG_LOG_SUBMODULE_CONN
  1178. depends on ESP32_WIFI_DEBUG_LOG_SUBMODULE && (!ESP32_WIFI_DEBUG_LOG_SUBMODULE_ALL)
  1179. bool "WiFi Debug Log Submodule Conn"
  1180. default n
  1181. config ESP32_WIFI_DEBUG_LOG_SUBMODULE_SCAN
  1182. depends on ESP32_WIFI_DEBUG_LOG_SUBMODULE && (!ESP32_WIFI_DEBUG_LOG_SUBMODULE_ALL)
  1183. bool "WiFi Debug Log Submodule Scan"
  1184. default n
  1185. config ESP32_WIFI_IRAM_OPT
  1186. bool "WiFi IRAM speed optimization"
  1187. default n if (BT_ENABLED && SPIRAM_SUPPORT)
  1188. default y
  1189. help
  1190. Select this option to place frequently called Wi-Fi library functions in IRAM.
  1191. When this option is disabled, more than 10Kbytes of IRAM memory will be saved
  1192. but Wi-Fi throughput will be reduced.
  1193. config ESP32_WIFI_RX_IRAM_OPT
  1194. bool "WiFi RX IRAM speed optimization"
  1195. default n if (BT_ENABLED && SPIRAM_SUPPORT)
  1196. default y
  1197. help
  1198. Select this option to place frequently called Wi-Fi library RX functions in IRAM.
  1199. When this option is disabled, more than 17Kbytes of IRAM memory will be saved
  1200. but Wi-Fi performance will be reduced.
  1201. endmenu # Wi-Fi
  1202. menu PHY
  1203. config ESP32_PHY_CALIBRATION_AND_DATA_STORAGE
  1204. bool "Store phy calibration data in NVS"
  1205. default y
  1206. help
  1207. If this option is enabled, NVS will be initialized and calibration data will be loaded from there.
  1208. PHY calibration will be skipped on deep sleep wakeup. If calibration data is not found, full calibration
  1209. will be performed and stored in NVS. Normally, only partial calibration will be performed.
  1210. If this option is disabled, full calibration will be performed.
  1211. If it's easy that your board calibrate bad data, choose 'n'.
  1212. Two cases for example, you should choose 'n':
  1213. 1.If your board is easy to be booted up with antenna disconnected.
  1214. 2.Because of your board design, each time when you do calibration, the result are too unstable.
  1215. If unsure, choose 'y'.
  1216. config ESP32_PHY_INIT_DATA_IN_PARTITION
  1217. bool "Use a partition to store PHY init data"
  1218. default n
  1219. help
  1220. If enabled, PHY init data will be loaded from a partition.
  1221. When using a custom partition table, make sure that PHY data
  1222. partition is included (type: 'data', subtype: 'phy').
  1223. With default partition tables, this is done automatically.
  1224. If PHY init data is stored in a partition, it has to be flashed there,
  1225. otherwise runtime error will occur.
  1226. If this option is not enabled, PHY init data will be embedded
  1227. into the application binary.
  1228. If unsure, choose 'n'.
  1229. config ESP32_PHY_MAX_WIFI_TX_POWER
  1230. int "Max WiFi TX power (dBm)"
  1231. range 10 20
  1232. default 20
  1233. help
  1234. Set maximum transmit power for WiFi radio. Actual transmit power for high
  1235. data rates may be lower than this setting.
  1236. config ESP32_PHY_MAX_TX_POWER
  1237. int
  1238. default ESP32_PHY_MAX_WIFI_TX_POWER
  1239. endmenu # PHY
  1240. menu "Power Management"
  1241. config PM_ENABLE
  1242. bool "Support for power management"
  1243. default n
  1244. help
  1245. If enabled, application is compiled with support for power management.
  1246. This option has run-time overhead (increased interrupt latency,
  1247. longer time to enter idle state), and it also reduces accuracy of
  1248. RTOS ticks and timers used for timekeeping.
  1249. Enable this option if application uses power management APIs.
  1250. config PM_DFS_INIT_AUTO
  1251. bool "Enable dynamic frequency scaling (DFS) at startup"
  1252. depends on PM_ENABLE
  1253. default n
  1254. help
  1255. If enabled, startup code configures dynamic frequency scaling.
  1256. Max CPU frequency is set to CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ setting,
  1257. min frequency is set to XTAL frequency.
  1258. If disabled, DFS will not be active until the application
  1259. configures it using esp_pm_configure function.
  1260. config PM_USE_RTC_TIMER_REF
  1261. bool "Use RTC timer to prevent time drift (EXPERIMENTAL)"
  1262. depends on PM_ENABLE && (ESP32_TIME_SYSCALL_USE_RTC || ESP32_TIME_SYSCALL_USE_RTC_FRC1)
  1263. default n
  1264. help
  1265. When APB clock frequency changes, high-resolution timer (esp_timer)
  1266. scale and base value need to be adjusted. Each adjustment may cause
  1267. small error, and over time such small errors may cause time drift.
  1268. If this option is enabled, RTC timer will be used as a reference to
  1269. compensate for the drift.
  1270. It is recommended that this option is only used if 32k XTAL is selected
  1271. as RTC clock source.
  1272. config PM_PROFILING
  1273. bool "Enable profiling counters for PM locks"
  1274. depends on PM_ENABLE
  1275. default n
  1276. help
  1277. If enabled, esp_pm_* functions will keep track of the amount of time
  1278. each of the power management locks has been held, and esp_pm_dump_locks
  1279. function will print this information.
  1280. This feature can be used to analyze which locks are preventing the chip
  1281. from going into a lower power state, and see what time the chip spends
  1282. in each power saving mode. This feature does incur some run-time
  1283. overhead, so should typically be disabled in production builds.
  1284. config PM_TRACE
  1285. bool "Enable debug tracing of PM using GPIOs"
  1286. depends on PM_ENABLE
  1287. default n
  1288. help
  1289. If enabled, some GPIOs will be used to signal events such as RTOS ticks,
  1290. frequency switching, entry/exit from idle state. Refer to pm_trace.c
  1291. file for the list of GPIOs.
  1292. This feature is intended to be used when analyzing/debugging behavior
  1293. of power management implementation, and should be kept disabled in
  1294. applications.
  1295. endmenu # "Power Management"