支持的芯片
Ameba SoC |
RTL8721Dx |
RTL8726E |
RTL8720E |
RTL8730E |
---|---|---|---|---|
支持状态 |
Y |
Y |
Y |
Y |
概述
本章主要介绍在开发过程中需要重点关注和按需修改的各种配置文件。
ameba_bootcfg
本节介绍与启动相关的配置,包括 SoC 时钟切换和启动日志。
GitHub
KM4 在 BootRom 阶段以 200MHz 运行,并在 bootloader 阶段切换至更高频率。
修改 SoC 时钟时存在以下限制:
项目 |
Cut |
频率 |
核心电压 |
---|---|---|---|
PLL |
300MHz ~ 600MHz |
||
KM0 |
A-Cut |
≤115MHz |
|
KM4 |
A-Cut |
≤260MHz |
0.9V |
KM4 |
A-Cut |
≤345MHz |
1.0V |
备注
宽压(1.65V~3.6V) IC 中,Flash的工作频率上限,应遵循 1.65V~2.3V 供电区间的速率限制。
SoC & PSRAM 时钟设置流程
确认
ameba_bootcfg.c
文件中Boot_SocClk_Info_Idx
和SocClk_Info[]
的值。// For KM4, max. 345MHz under 1.0V, max. 260MHz under 0.9V // For KM0, max. 115MHz under 1.0V, max. 104MHz under 0.9V // PLL can be 300MHz~688.128MHz // KM4_CKD range is [1, 8], KM0_CKD range is [1, 16] or USEXTAL const SocClk_Info_TypeDef SocClk_Info[] = { // PLL_CLK, Vol_Type, KM4_CKD, KM0_CKD, PSRAMC_CKD {PLL_520M, CORE_VOL_0P9, CLKDIV(2), CLKDIV(5), CLKDIV(2)}, {PLL_331M, CORE_VOL_1P0, CLKDIV(1), CLKDIV(3), CLKDIV(1)}, {PLL_400M, CORE_VOL_0P9, CLKDIV(2), CLKDIV(4), CLKDIV(1)}, {PLL_480M, CORE_VOL_0P9, CLKDIV(2), CLKDIV(5), CLKDIV(2)}, // 48M for USB {PLL_677P376M, CORE_VOL_1P0, CLKDIV(2), CLKDIV(6), CLKDIV(2)}, {PLL_688P128M, CORE_VOL_1P0, CLKDIV(2), CLKDIV(6), CLKDIV(2)}, }; /** * @brief SocClk_Info selection * Boot_SocClk_Info_Idx is [0, sizeof(SocClk_Info)), Soc will set the SoC clock by SocClk_Info[Boot_SocClk_Info_Idx] * / #ifdef CONFIG_USB_DEVICE_EN u8 Boot_SocClk_Info_Idx = 3; // Make sure the PLL_CLK for USB is an integer multiple of 48MHz #else u8 Boot_SocClk_Info_Idx = 0; #endif
确认
\bootloader\bootloader_km4.c
文件中的BOOT_ChipInfo_ClkInfoIdx()
函数。u32 BOOT_ChipInfo_ClkInfoIdx(void) { /* PSRAM die is wb955 which can run up to 200MHz */ /* Boot_SocClk_Info_Idx is valid, use user config socclk */ return Boot_SocClk_Info_Idx; }
Bootloader 将根据
SocClk_Info[Boot_SocClk_Info_Idx]
的定义来配置 SoC 时钟,PSRAM 速率也将随 SoC 时钟同步调整。PSRAM 类型
PSRAM 速度
SocClk_Info[x]
时钟信息
无 PSRAM
SocClk_Info[0]
PLL:520MHz
KM4:260MHz
KM0:86.6MHz
WB955
≤200MHz
SocClk_Info[1]
PLL:330MHz
KM4:PLL/1
KM0:PLL/4
PSRAM:PLL/2
必要时,参考以下方法来修改 SoC 时钟:
修改
ameba_bootcfg.c
文件中的SocClk_Info[0]
将
Boot_SocClk_Info_Idx
修改为[0, sizeof(SocClk_Info)]
范围内的值,然后在SocClk_Info[Boot_SocClk_Info_Idx]
中自定义时钟配置信息。
备注
请充分考虑硬件的限制,避免设置非法的时钟配置参数。
示例
如果希望 KM4 的运行频率为 520MHz/3,需要将
SocClk_Info[0]
中的KM4_CKD
设置为CLKDIV(3)
。// For KM4, max. 345MHz under 1.0V, max. 260MHz under 0.9V // For KM0, max. 115MHz under 1.0V, max. 104MHz under 0.9V // PLL can be 300MHz~688.128MHz // KM4_CKD range is [1, 8], KM0_CKD range is [1, 16] or USEXTAL const SocClk_Info_TypeDef SocClk_Info[] = { // PLL_CLK, Vol_Type, KM4_CKD, KM0_CKD, PSRAMC_CKD {PLL_520M, CORE_VOL_0P9, CLKDIV(2), CLKDIV(5), CLKDIV(2)}, {PLL_331M, CORE_VOL_1P0, CLKDIV(1), CLKDIV(3), CLKDIV(1)}, {PLL_400M, CORE_VOL_0P9, CLKDIV(2), CLKDIV(4), CLKDIV(1)}, {PLL_480M, CORE_VOL_0P9, CLKDIV(2), CLKDIV(5), CLKDIV(2)}, // 48M for USB {PLL_677P376M, CORE_VOL_1P0, CLKDIV(2), CLKDIV(6), CLKDIV(2)}, {PLL_688P128M, CORE_VOL_1P0, CLKDIV(2), CLKDIV(6), CLKDIV(2)}, };
配置结果
KM4 时钟频率:173.3MHz
KM0 时钟频率:86.6MHz
PSRAM 控制器时钟:260MHz(PSRAM 时钟的两倍)
核心电压:0.9V
其余模块时钟将由软件根据其最大运行速度自动设置为合理值。
重新编译工程,并下载新的固件
GitHub
KM4 在 BootRom 阶段以 150MHz 运行,并在 bootloader 阶段切换至更高频率。
修改 SoC 时钟时存在以下限制:
时钟 |
Cut |
频率 |
核心电压 |
说明 |
---|---|---|---|---|
PLLM |
330MHz ~ 660MHz |
|||
PLLD |
330MHz ~ 660MHz |
不能超过 DSP 的最大时钟频率 |
||
KM4/KR4 |
A-Cut |
≤200MHz |
0.9V |
|
KM4/KR4 |
A-Cut |
≤240MHz |
1.0V |
|
KM4/KR4 |
B-Cut |
≤300MHz |
0.9V |
|
KM4/KR4 |
B-Cut |
≤400MHz |
1.0V |
|
DSP |
≤400MHz |
0.9V |
同 PLLD |
|
DSP |
≤500MHz |
1.0V |
同 PLLD |
SoC & PSRAM 时钟设置流程
(可选)确认内置 PSRAM 器件的速率限制(若不明确具体参数)
打印
ChipInfo_BDNum()
函数的值,可以从 OTP 中读取芯片的信息参考
\component\soc\amebalite\lib\ram_common\ameba_chipinfo_lib.c
文件中的 Chip_Info[] 查询 PSRAM 类型
例如:如果 bdnumer 的值为
0x1010
,表示该 PSRAM 可支持的最高运行频率为 200MHz。const CHIPINFO_TypeDef Chip_Info[] = { //subnum pkgnum bdnumer psram type {0, 2, 1010, PSRAM_DEVICE_CLK_200 | PSRAM_VENDOR_WB | PSRAM_SIZE_32Mb | PSRAM_PAGE128 }, //QFN48 {0, 3, 1011, PSRAM_DEVICE_CLK_250 | PSRAM_VENDOR_WB | PSRAM_SIZE_256Mb | PSRAM_PAGE1024 }, //QFN68 {0, 1, 1012, PSRAM_VENDOR_NONE }, //QFN48 {0, 0, 1014, PSRAM_DEVICE_CLK_NotClear | PSRAM_VENDOR_NotClear }, //QFN144 debug package {1, 2, 1015, PSRAM_DEVICE_CLK_200 | PSRAM_VENDOR_WB | PSRAM_SIZE_32Mb | PSRAM_PAGE128 }, //QFN48 {1, 1, 1016, PSRAM_VENDOR_NONE }, //QFN48 {0, 4, 1019, PSRAM_DEVICE_CLK_250 | PSRAM_VENDOR_WB | PSRAM_SIZE_128Mb | PSRAM_PAGE2048 }, //QFN68 {0, 5, 1022, PSRAM_VENDOR_NONE }, //QFN48 {1, 2, 1023, PSRAM_DEVICE_CLK_200 | PSRAM_VENDOR_WB | PSRAM_SIZE_32Mb | PSRAM_PAGE128 }, //QFN48 {1, 1, 1024, PSRAM_VENDOR_NONE }, //QFN48 {1, 5, 1025, PSRAM_VENDOR_NONE }, //QFN48 {0, 6, 1026, PSRAM_VENDOR_NONE }, //QFN68 {0, 7, 1027, PSRAM_VENDOR_NONE }, //QFN68 {0xFF, 0xFF, 0xFFFF, PSRAM_DEVICE_CLK_NotClear | PSRAM_VENDOR_NotClear }, //debug package };
确认 Boot_SocClk_Info_Idx 的值,以及
ameba_bootcfg.c
文件中的时钟信息。// for kr4/km4, max 400MHz under 1.0v, max 200MHz under 0.9v // for dsp, max 500MHz under 1.0v, max 400MHz under 0.9v // CPUPLL(PLLM)/DSPPLL(PLLD) can be 330MHz~660MHz // All CLKDIV range is [1, 16] SocClk_Info_TypeDef SocClk_Info[] = { /* PLLM_CLK, PLLD_CLK, Vol_Type, CPU_CKD, PSRAMC_CKD*/ {PLL_600M, PLL_500M, CORE_VOL_0P9, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /*0.9V, PSRAM-166M 8720E QFN48*/ {PLL_600M, PLL_500M, CORE_VOL_1P0, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /*1.0V, PSRAM-166M 8720E QFN48*/ {PLL_400M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLM}, /*1.0V, PSRAM-200M*/ {PLL_480M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLD}, /*1.0V, PSRAM-250M 8726E QFN68*/ }; /** * @brief SocClk_Info select * Boot_SocClk_Info_Idx valid value is [0, 3] and 0xFF * when Boot_SocClk_Info_Idx is 0xFF, set socclk by chipinfo Automatically * when Boot_SocClk_Info_Idx is [0, 3], set socclk by SocClk_Info[Boot_SocClk_Info_Idx] */ u8 Boot_SocClk_Info_Idx = 0xFF;
如果 Boot_SocClk_Info_Idx 不是 0xFF,bootloader 将根据
SocClk_Info[Boot_SocClk_Info_Idx]
的定义来配置 SoC 时钟。如果 Boot_SocClk_Info_Idx 为 0xFF(默认),bootloader 将根据内置 PSRAM 类型自动设置 SoC 时钟。
例如,如果 bdnumer 为
0x1010
,PSRAM 的最高运行频率为 166MHz,bootloader 将采用SocClk_Info[1].CLKDIV(3) | ISPLLM
配置,即 KM4/KR4 的时钟频率等于 PLLM 频率的1/3。PSRAM 类型
PSRAM 速度
SocClk_Info[x]
时钟信息
无 PSRAM
SocClk_Info[0]
PLLM:600MHz
PLLD:500MHz
KM4/KR4:200MHz
有 PSRAM
≤166MHz
SocClk_Info[1]
PLLM:600MHz
PLLD:500MHz
KM4/KR4:200MHz
≤200MHz
SocClk_Info[2]
PLLM:400MHz
PLLD:500MHz
KM4/KR4:200MHz
≤250MHz
SocClk_Info[3]
PLLM:480MHz
PLLD:500MHz
KM4/KR4:240MHz
必要时,参考以下方法来修改 SoC 时钟:
保持
Boot_SocClk_Info_Idx
为0xFF
,仅修改SocClk_Info[x]
中的时钟参数,即可设置 PLLM/PLLD 和 CPU 的时钟。将
Boot_SocClk_Info_Idx
修改为[0, 3]
范围内的值,然后在SocClk_Info[Boot_SocClk_Info_Idx]
中自定义时钟配置信息。
备注
请充分考虑硬件的限制,避免设置非法的时钟配置参数。
示例
如果希望 CPU 以更高速度运行,需要将
SocClk_Info[2]
中的CPU_CKD
设置为CLKDIV(1)
。SocClk_Info_TypeDef SocClk_Info[] = { /* PLLM_CLK, PLLD_CLK, Vol_Type, CPU_CKD, PSRAMC_CKD*/ {PLL_600M, PLL_500M, CORE_VOL_0P9, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /*0.9V, PSRAM-166M 8720E QFN48*/ {PLL_600M, PLL_500M, CORE_VOL_1P0, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /*1.0V, PSRAM-166M 8720E QFN48*/ {PLL_400M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLM}, /*1.0V, PSRAM-200M*/ {PLL_480M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLD}, /*1.0V, PSRAM-250M 8726E QFN68*/ }; /** * @brief SocClk_Info select * Boot_SocClk_Info_Idx valid value is [0, 3] and 0xFF * when Boot_SocClk_Info_Idx is 0xFF, set socclk by chipinfo Automatically * when Boot_SocClk_Info_Idx is [0, 3], set socclk by SocClk_Info[Boot_SocClk_Info_Idx] */ u8 Boot_SocClk_Info_Idx = 0xFF;
配置结果
KM4/KR4 时钟频率:400MHz
PSRAM 控制器时钟:400MHz(PSRAM 时钟的两倍)
核心电压:1.0V
其余模块时钟将由软件根据其最大运行速度自动设置为合理值。
备注
如果不需要 PLLD,可以将其禁用。
重新编译工程,并下载新的固件
Boot_Log_En
默认开启 bootloader 日志功能,可通过设置 Boot_Log_En
来禁用该功能。
/**
* @brief boot log enable or disable.
* FALSE: disable
* TRUE: enable
*/
u8 Boot_Log_En = TRUE;
Boot_Agg_En
Boot_Agg_En
参数需配合 Trace Tool 使用,用于分类输出来自不同核的启动日志。可通过设置 Boot_Agg_EN
来启用该功能。
/**
* @brief Loguart AGG enable or disable
* FALSE: disable
* TRUE: enable
*/
u8 Boot_Agg_En = FALSE;
备注
更多详细信息请参考 Trace Tool。
GitHub
KM4 在 BootRom 阶段以 150MHz 运行,并在 bootloader 阶段切换至更高频率。
修改 SoC 时钟时存在以下限制:
项目 |
Cut |
频率 |
核心电压 |
---|---|---|---|
PLLM |
330MHz ~ 660MHz |
||
PLLD |
330MHz ~ 660MHz |
||
KM4/KR4 |
A-Cut |
≤200MHz |
0.9V |
KM4/KR4 |
A-Cut |
≤240MHz |
1.0V |
KM4/KR4 |
B-Cut |
≤300MHz |
0.9V |
KM4/KR4 |
B-Cut |
≤400MHz |
1.0V |
SoC & PSRAM 时钟设置流程
(可选)确认内置 PSRAM 器件的速率限制(若不明确具体参数)
打印
ChipInfo_BDNum()
函数的值,可以从 OTP 中读取芯片的信息参考
\component\soc\amebalite\lib\ram_common\ameba_chipinfo_lib.c
文件中的 Chip_Info[] 查询 PSRAM 类型
例如:如果 bdnumer 的值为
0x1010
,表示该 PSRAM 可支持的最高运行频率为 200MHz。const CHIPINFO_TypeDef Chip_Info[] = { //subnum pkgnum bdnumer psram type {0, 2, 1010, PSRAM_DEVICE_CLK_200 | PSRAM_VENDOR_WB | PSRAM_SIZE_32Mb | PSRAM_PAGE128 }, //QFN48 {0, 3, 1011, PSRAM_DEVICE_CLK_250 | PSRAM_VENDOR_WB | PSRAM_SIZE_256Mb | PSRAM_PAGE1024 }, //QFN68 {0, 1, 1012, PSRAM_VENDOR_NONE }, //QFN48 {0, 0, 1014, PSRAM_DEVICE_CLK_NotClear | PSRAM_VENDOR_NotClear }, //QFN144 debug package {1, 2, 1015, PSRAM_DEVICE_CLK_200 | PSRAM_VENDOR_WB | PSRAM_SIZE_32Mb | PSRAM_PAGE128 }, //QFN48 {1, 1, 1016, PSRAM_VENDOR_NONE }, //QFN48 {0, 4, 1019, PSRAM_DEVICE_CLK_250 | PSRAM_VENDOR_WB | PSRAM_SIZE_128Mb | PSRAM_PAGE2048 }, //QFN68 {0, 5, 1022, PSRAM_VENDOR_NONE }, //QFN48 {1, 2, 1023, PSRAM_DEVICE_CLK_200 | PSRAM_VENDOR_WB | PSRAM_SIZE_32Mb | PSRAM_PAGE128 }, //QFN48 {1, 1, 1024, PSRAM_VENDOR_NONE }, //QFN48 {1, 5, 1025, PSRAM_VENDOR_NONE }, //QFN48 {0, 6, 1026, PSRAM_VENDOR_NONE }, //QFN68 {0, 7, 1027, PSRAM_VENDOR_NONE }, //QFN68 {0xFF, 0xFF, 0xFFFF, PSRAM_DEVICE_CLK_NotClear | PSRAM_VENDOR_NotClear }, //debug package };
确认 Boot_SocClk_Info_Idx 的值,以及
ameba_bootcfg.c
文件中的时钟信息。// for kr4/km4, max 400MHz under 1.0v, max 200MHz under 0.9v // for dsp, max 500MHz under 1.0v, max 400MHz under 0.9v // CPUPLL(PLLM)/DSPPLL(PLLD) can be 330MHz~660MHz // All CLKDIV range is [1, 16] SocClk_Info_TypeDef SocClk_Info[] = { /* PLLM_CLK, PLLD_CLK, Vol_Type, CPU_CKD, PSRAMC_CKD*/ {PLL_600M, PLL_500M, CORE_VOL_0P9, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /*0.9V, PSRAM-166M 8720E QFN48*/ {PLL_600M, PLL_500M, CORE_VOL_1P0, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /*1.0V, PSRAM-166M 8720E QFN48*/ {PLL_400M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLM}, /*1.0V, PSRAM-200M*/ {PLL_480M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLD}, /*1.0V, PSRAM-250M 8726E QFN68*/ }; /** * @brief SocClk_Info select * Boot_SocClk_Info_Idx valid value is [0, 3] and 0xFF * when Boot_SocClk_Info_Idx is 0xFF, set socclk by chipinfo Automatically * when Boot_SocClk_Info_Idx is [0, 3], set socclk by SocClk_Info[Boot_SocClk_Info_Idx] */ u8 Boot_SocClk_Info_Idx = 0xFF;
如果 Boot_SocClk_Info_Idx 不是 0xFF,bootloader 将根据
SocClk_Info[Boot_SocClk_Info_Idx]
的定义来配置 SoC 时钟。如果 Boot_SocClk_Info_Idx 为 0xFF(默认),bootloader 将根据内置 PSRAM 类型自动设置 SoC 时钟。
例如,如果 bdnumer 为
0x1010
,PSRAM 的最高运行频率为 166MHz,bootloader 将采用SocClk_Info[1].CLKDIV(3) | ISPLLM
配置,即 KM4/KR4 的时钟频率等于 PLLM 频率的1/3。PSRAM 类型
PSRAM 速度
SocClk_Info[x]
时钟信息
无 PSRAM
SocClk_Info[0]
PLLM:600MHz
PLLD:500MHz
KM4/KR4:200MHz
有 PSRAM
≤166MHz
SocClk_Info[1]
PLLM:600MHz
PLLD:500MHz
KM4/KR4:200MHz
≤200MHz
SocClk_Info[2]
PLLM:400MHz
PLLD:500MHz
KM4/KR4:200MHz
≤250MHz
SocClk_Info[3]
PLLM:480MHz
PLLD:500MHz
KM4/KR4:240MHz
必要时,参考以下方法来修改 SoC 时钟:
保持
Boot_SocClk_Info_Idx
为0xFF
,仅修改SocClk_Info[x]
中的时钟参数,即可设置 PLLM/PLLD 和 CPU 的时钟。将
Boot_SocClk_Info_Idx
修改为[0, 3]
范围内的值,然后在SocClk_Info[Boot_SocClk_Info_Idx]
中自定义时钟配置信息。
备注
请充分考虑硬件的限制,避免设置非法的时钟配置参数。
示例
如果希望 CPU 以更高速度运行,需要将
SocClk_Info[2]
中的CPU_CKD
设置为CLKDIV(1)
。SocClk_Info_TypeDef SocClk_Info[] = { /* PLLM_CLK, PLLD_CLK, Vol_Type, CPU_CKD, PSRAMC_CKD*/ {PLL_600M, PLL_500M, CORE_VOL_0P9, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /*0.9V, PSRAM-166M 8720E QFN48*/ {PLL_600M, PLL_500M, CORE_VOL_1P0, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /*1.0V, PSRAM-166M 8720E QFN48*/ {PLL_400M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLM}, /*1.0V, PSRAM-200M*/ {PLL_480M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLD}, /*1.0V, PSRAM-250M 8726E QFN68*/ }; /** * @brief SocClk_Info select * Boot_SocClk_Info_Idx valid value is [0, 3] and 0xFF * when Boot_SocClk_Info_Idx is 0xFF, set socclk by chipinfo Automatically * when Boot_SocClk_Info_Idx is [0, 3], set socclk by SocClk_Info[Boot_SocClk_Info_Idx] */ u8 Boot_SocClk_Info_Idx = 0xFF;
配置结果
KM4/KR4 时钟频率:400MHz
PSRAM 控制器时钟:400MHz(PSRAM 时钟的两倍)
核心电压:1.0V
其余模块时钟将由软件根据其最大运行速度自动设置为合理值。
备注
如果不需要 PLLD,可以将其禁用。
重新编译工程,并下载新的固件
Boot_Log_En
默认开启 bootloader 日志功能,可通过设置 Boot_Log_En
来禁用该功能。
/**
* @brief boot log enable or disable.
* FALSE: disable
* TRUE: enable
*/
u8 Boot_Log_En = TRUE;
Boot_Agg_En
Boot_Agg_En
参数需配合 Trace Tool 使用,用于分类输出来自不同核的启动日志。可通过设置 Boot_Agg_EN
来启用该功能。
/**
* @brief Loguart AGG enable or disable
* FALSE: disable
* TRUE: enable
*/
u8 Boot_Agg_En = FALSE;
备注
更多详细信息请参考 Trace Tool。
GitHub
KM4 在 BootRom 阶段以 200MHz 运行,并在 bootloader 阶段切换至更高频率。
修改 SoC 时钟时存在以下限制:
TBD
ameba_flashcfg
本节介绍与 Flash 相关的配置,包括 Flash 的速度、读取模式、布局和保护模式。
GitHub
Flash_Speed
Flash 运行速率为 SPI Flash 控制器速率的一半。
SPI Flash 控制器的速率默认由 PLL 分频得到,且必须低于 SPIC_CLK_LIMIT
(208MHz)。
如需降低 Flash 的运行速率,请修改 Flash_Speed
(对应 SPIC0)或 Data_Flash_Speed
(对应 SPIC1)的值。
const u16 Flash_Speed = CLKDIV(2);
const u16 Data_Flash_Speed = CLKDIV(2);
Flash_Speed 的值 |
描述 |
Flash 波特率 |
---|---|---|
CLKDIV(10) |
Flash 波特率为 PLL 的 1/10 |
PLL/20 |
CLKDIV(9) |
Flash 波特率为 PLL 的 1/9 |
PLL/18 |
CLKDIV(8) |
Flash 波特率为 PLL 的 1/8 |
PLL/16 |
CLKDIV(7) |
Flash 波特率为 PLL 的 1/7 |
PLL/14 |
CLKDIV(6) |
Flash 波特率为 PLL 的 1/6 |
PLL/12 |
CLKDIV(5) |
Flash 波特率为 PLL 的 1/5 |
PLL/10 |
CLKDIV(4) |
Flash 波特率为 PLL 的 1/4 |
PLL/8 |
CLKDIV(3) |
Flash 波特率为 PLL 的 1/3 |
PLL/6 |
CLKDIV(2) |
Flash 波特率为 PLL 的 1/2 |
PLL/4 |
Flash_ReadMode
Flash_ReadMode 的值 |
描述 |
---|---|
0xFFFF |
地址 & 数据 4-bit 模式 |
0x7FFF |
仅数据 4-bit 模式 |
0x3FFF |
地址 & 数据 2-bit 模式 |
0x1FFF |
仅数据 2-bit 模式 |
0x0FFF |
1-bit 模式 |
备注
若当前配置的读取模式不支持,系统将自动尝试其他模式,直至找到适合的模式。
Flash_Layout
SDK 中的默认 Flash 布局详见章节 Flash 布局。如需修改 Flash 布局,请参考章节 Flash布局修改。
启用 Flash 保护
更多关于此功能的详细信息,请参考章节 Flash写保护机制。
Flash 引脚映射
更多关于引脚映射配置的详细信息,请参考 User Manual(章节:I/O Control)。
GitHub
Flash_Speed
Flash_Speed 的值 |
描述 |
Flash 波特率 |
---|---|---|
0xFFFF |
Flash 波特率为 PLLM 的 1/20 |
PLLM/20 |
0x7FFF |
Flash 波特率为 NP 时钟的 1/18 |
PLLM/18 |
0x3FFF |
Flash 波特率为 NP 时钟的 1/16 |
PLLM/16 |
0x1FFF |
Flash 波特率为 NP 时钟的 1/14 |
PLLM/14 |
0xFFF |
Flash 波特率为 NP 时钟的 1/12 |
PLLM/12 |
0x7FF |
Flash 波特率为 NP 时钟的 1/10 |
PLLM/10 |
0x3FF |
Flash 波特率为 NP 时钟的 1/8 |
PLLM/8 |
0x1FF |
Flash 波特率为 NP 时钟的 1/6 |
PLLM/6 |
0xFF |
Flash 波特率为 NP 时钟的 1/4 |
PLLM/4 |
备注
参阅 ameba_bootcfg 获取更多关于 PLLM 的信息。
Flash 最高时钟频率为 120MHz。初始化流程将自动检测配置频率是否超过此上限。
不支持设置其他数值。
Flash_ReadMode
Flash_ReadMode 的值 |
描述 |
---|---|
0xFFFF |
地址 & 数据 4-bit 模式 |
0x7FFF |
仅数据 4-bit 模式 |
0x3FFF |
地址 & 数据 2-bit 模式 |
0x1FFF |
仅数据 2-bit 模式 |
0x0FFF |
1-bit 模式 |
备注
若当前配置的读取模式不支持,系统将自动尝试其他模式,直至找到适合的模式。
Flash_Layout
SDK 中的默认 Flash 布局详见章节 Flash 布局。如需修改 Flash 布局,请参考章节 Flash布局修改。
启用 Flash 保护
更多关于此功能的详细信息,请参考章节 Flash写保护机制。
Flash 引脚映射
更多关于引脚映射配置的详细信息,请参考 User Manual(章节:I/O Control)。
GitHub
Flash_Speed
Flash_Speed 的值 |
描述 |
Flash 波特率 |
---|---|---|
0xFFFF |
Flash 波特率为 PLLM 的 1/20 |
PLLM/20 |
0x7FFF |
Flash 波特率为 NP 时钟的 1/18 |
PLLM/18 |
0x3FFF |
Flash 波特率为 NP 时钟的 1/16 |
PLLM/16 |
0x1FFF |
Flash 波特率为 NP 时钟的 1/14 |
PLLM/14 |
0xFFF |
Flash 波特率为 NP 时钟的 1/12 |
PLLM/12 |
0x7FF |
Flash 波特率为 NP 时钟的 1/10 |
PLLM/10 |
0x3FF |
Flash 波特率为 NP 时钟的 1/8 |
PLLM/8 |
0x1FF |
Flash 波特率为 NP 时钟的 1/6 |
PLLM/6 |
0xFF |
Flash 波特率为 NP 时钟的 1/4 |
PLLM/4 |
备注
参阅 ameba_bootcfg 获取更多关于 PLLM 的信息。
Flash 最高时钟频率为 120MHz。初始化流程将自动检测配置频率是否超过此上限。
不支持设置其他数值。
Flash_ReadMode
Flash_ReadMode 的值 |
描述 |
---|---|
0xFFFF |
地址 & 数据 4-bit 模式 |
0x7FFF |
仅数据 4-bit 模式 |
0x3FFF |
地址 & 数据 2-bit 模式 |
0x1FFF |
仅数据 2-bit 模式 |
0x0FFF |
1-bit 模式 |
备注
若当前配置的读取模式不支持,系统将自动尝试其他模式,直至找到适合的模式。
Flash_Layout
SDK 中的默认 Flash 布局详见章节 Flash 布局。如需修改 Flash 布局,请参考章节 Flash布局修改。
启用 Flash 保护
更多关于此功能的详细信息,请参考章节 Flash写保护机制。
Flash 引脚映射
更多关于引脚映射配置的详细信息,请参考 User Manual(章节:I/O Control)。
GitHub
Flash_Speed
Flash 运行速率为 SPI Flash 控制器速率的一半。
TBD
Flash_ReadMode
Flash_ReadMode 的值 |
描述 |
---|---|
0xFFFF |
地址 & 数据 4-bit 模式 |
0x7FFF |
仅数据 4-bit 模式 |
0x3FFF |
地址 & 数据 2-bit 模式 |
0x1FFF |
仅数据 2-bit 模式 |
0x0FFF |
1-bit 模式 |
备注
若当前配置的读取模式不支持,系统将自动尝试其他模式,直至找到适合的模式。
Flash_Layout
SDK 中的默认 Flash 布局详见章节 Flash 布局。如需修改 Flash 布局,请参考章节 Flash布局修改。
启用 Flash 保护
更多关于此功能的详细信息,请参考章节 Flash写保护机制。
Flash 引脚映射
更多关于引脚映射配置的详细信息,请参考 User Manual(章节:I/O Control)。
ameba_boot_trustzonecfg
TBD
ameba_pinmapcfg
TBD
ameba_sleepcfg
GitHub
唤醒掩码设置
在睡眠模式下,某些场景仅需唤醒单个 CPU 来执行程序。唤醒掩码模块即用于实现此功能。
通过设置唤醒掩码,可选择仅唤醒某个指定的 CPU。若选择 KM4,需先唤醒 KM0 并由其恢复 KM4 运行。
用户可通过修改 ameba_sleepcfg.c
中的 sleep_wevent_config[] 来选择想要唤醒的目标CPU。
每个唤醒源的属性可设置为以下值之一:
WAKEUP_KM4:仅唤醒 KM4
WAKEUP_KM0:仅唤醒 KM0
WAKEUP_NULL:禁用该唤醒源
/* 唤醒属性可设置为 WAKEUP_NULL/WAKEUP_KM4/WAKEUP_KM0 */
WakeEvent_TypeDef sleep_wevent_config[] = {
// Module Wakeup
{WAKE_SRC_SDIO, WAKEUP_NULL},
{WAKE_SRC_AON_WAKEPIN, WAKEUP_NULL},
{WAKE_SRC_AON_TIM, WAKEUP_NULL},
{WAKE_SRC_Keyscan, WAKEUP_NULL},
{WAKE_SRC_PWR_DOWN, WAKEUP_NULL},
{WAKE_SRC_BOR, WAKEUP_NULL},
{WAKE_SRC_ADC, WAKEUP_NULL},
{WAKE_SRC_RTC, WAKEUP_NULL},
{WAKE_SRC_CTOUCH, WAKEUP_NULL},
{WAKE_SRC_I2C1, WAKEUP_NULL},
{WAKE_SRC_I2C0, WAKEUP_NULL},
{WAKE_SRC_GPIOB, WAKEUP_NULL},
{WAKE_SRC_GPIOA, WAKEUP_NULL},
{WAKE_SRC_UART_LOG, WAKEUP_NULL},
{WAKE_SRC_UART2_BT, WAKEUP_NULL},
{WAKE_SRC_UART1, WAKEUP_NULL},
{WAKE_SRC_UART0, WAKEUP_NULL},
{WAKE_SRC_pmc_timer1, WAKEUP_KM0}, /* Internal use, do not change it*/
{WAKE_SRC_pmc_timer0, WAKEUP_KM4}, /* Internal use, do not change it*/
{WAKE_SRC_Timer7, WAKEUP_NULL},
{WAKE_SRC_Timer6, WAKEUP_NULL},
{WAKE_SRC_Timer5, WAKEUP_NULL},
{WAKE_SRC_Timer4, WAKEUP_NULL},
{WAKE_SRC_IPC_KM4, WAKEUP_KM4}, /* IPC can only wake up KM4, do not change it*/
{WAKE_SRC_BT_WAKE_HOST, WAKEUP_NULL},
{WAKE_SRC_KM4_WAKE_IRQ, WAKEUP_KM0}, /* Internal use, do not change it*/
{WAKE_SRC_WIFI_FTSR_MAILBOX, WAKEUP_KM0}, /* Wi-Fi wakeup, do not change it*/
{WAKE_SRC_WIFI_FISR_FESR_IRQ, WAKEUP_KM0}, /* Wi-Fi wakeup, do not change it*/
{0xFFFFFFFF, WAKEUP_NULL},
};
AON 唤醒引脚配置
AON 唤醒引脚是支持睡眠唤醒的外设之一。
SoC提供两个 AON 唤醒引脚(PB30 和 PB31),需在 ameba_sleepcfg.c
中的 sleep_wakepin_config[] 中配置。
配置属性可选值如下:
DISABLE_WAKEPIN:禁用唤醒
HIGH_LEVEL_WAKEUP:GPIO 高电平触发唤醒
LOW_LEVEL_WAKEUP:GPIO 低电平触发唤醒
/* can be used by sleep mode & deep sleep mode */
/* config can be set to DISABLE_WAKEPIN/HIGH_LEVEL_WAKEUP/LOW_LEVEL_WAKEUP */
WAKEPIN_TypeDef sleep_wakepin_config[] = {
// wakepin config
{WAKEPIN_0, DISABLE_WAKEPIN}, /* WAKEPIN_0 对应 _PB_30 */
{WAKEPIN_1, DISABLE_WAKEPIN}, /* WAKEPIN_1 对应 _PB_31 */
{0xFFFFFFFF, DISABLE_WAKEPIN},
};
备注
默认情况下, sleep_wakepin_config[] 中未启用
AON_WAKEPIN_IRQ
,需用户手动激活。唤醒掩码不会在
sleep_wakepin_config[]
中被设置。如果需要将唤醒引脚用于睡眠模式,设置sleep_wevent_config[]
中的WAKE_SRC_AON_WAKEPIN
即可。
时钟和电压配置
XTAL、OSC4M 的状态及睡眠模式电压可通过 ameba_sleepcfg.c
中的 ps_config[] 配置,适用于需要在睡眠模式下保持外设时钟的场景。
PSCFG_TypeDef ps_config = {
.keep_OSC4M_on = FALSE, /* Keep OSC4M on or off for sleep */
.xtal_mode_in_sleep = XTAL_OFF, /* Set XTAL mode during sleep mode, see enum xtal_mode_sleep for details */
.sleep_to_08V = FALSE, /* Default sleep to 0.7V, setting this option to TRUE will sleep to 0.8V */
};
睡眠模式配置
应用程序可通过调用函数
pmu_set_sleep_type(uint32_t type)()
设置睡眠模式为 CG 或 PG用户可通过调用函数
pmu_get_sleep_type()
获取当前 CPU 睡眠模式
备注
KM0 与 KM4 同属一个电源域,因此两者的睡眠模式相同。调用函数
pmu_set_sleep_type()
设置 KM4 的睡眠模式,KM0 将自动同步 KM4 的睡眠模式。系统默认睡眠模式为 PG。如需修改睡眠模式,必须在进入睡眠状态前调用函数
pmu_set_sleep_type()
。
GitHub
要启用特定唤醒源,需在 ameba_sleepcfg.c
的 sleep_wevent_config[] 数组中设置对应模块的状态。每个模块可设置为 WAKEUP_NULL/WAKEUP_NP/WAKEUP_AP/WAKEUP_DSP
。
例如:如果 WAKE_SRC_AON_WAKEPIN
设置为 WAKEUP_NP
,表示当系统处于睡眠模式时,一旦发生 AON 唤醒引脚中断,NP 核将被唤醒处理事件。
唤醒掩码设置
/* 唤醒属性可设置为 WAKEUP_NULL/WAKEUP_NP/WAKEUP_AP/WAKEUP_DSP */
WakeEvent_TypeDef sleep_wevent_config[] = {
// Module wakeup
{WAKE_SRC_VAD, WAKEUP_NULL},
{WAKE_SRC_AON_WAKEPIN, WAKEUP_NULL},
{WAKE_SRC_AON_TIM, WAKEUP_NULL},
{WAKE_SRC_PWR_DOWN, WAKEUP_NULL},
{WAKE_SRC_BOR, WAKEUP_NULL},
{WAKE_SRC_ADC, WAKEUP_NULL},
{WAKE_SRC_AON_RTC, WAKEUP_NULL},
{WAKE_SRC_SPI1, WAKEUP_NULL},
{WAKE_SRC_SPI0, WAKEUP_NULL},
{WAKE_SRC_CTOUCH, WAKEUP_NULL},
{WAKE_SRC_GPIOB, WAKEUP_NULL},
{WAKE_SRC_GPIOA, WAKEUP_NULL},
{WAKE_SRC_UART_LOG, WAKEUP_AP},
{WAKE_SRC_UART3, WAKEUP_NULL},
{WAKE_SRC_UART2, WAKEUP_NULL},
{WAKE_SRC_UART1, WAKEUP_NULL},
{WAKE_SRC_UART0, WAKEUP_NULL},
{WAKE_SRC_Timer7, WAKEUP_NULL},
{WAKE_SRC_Timer6, WAKEUP_NULL},
{WAKE_SRC_Timer5, WAKEUP_NULL},
{WAKE_SRC_Timer4, WAKEUP_NULL},
{WAKE_SRC_Timer3, WAKEUP_NULL},
{WAKE_SRC_Timer2, WAKEUP_NULL},
{WAKE_SRC_Timer1, WAKEUP_NULL},
{WAKE_SRC_Timer0, WAKEUP_NULL},
{WAKE_SRC_WDG0, WAKEUP_NULL},
{WAKE_SRC_BT_WAKE_HOST, WAKEUP_NULL},
{WAKE_SRC_AP_WAKE, WAKEUP_NULL},
{WAKE_SRC_WIFI_FTSR_MAILBOX, WAKEUP_NP},
{WAKE_SRC_WIFI_FISR_FESR, WAKEUP_NP},
{0xFFFFFFFF, WAKEUP_NULL},
};
AON 唤醒引脚配置
AON 唤醒引脚是支持睡眠唤醒的外设之一。
SoC提供两个 AON 唤醒引脚(PA0 and PA1),需在 ameba_sleepcfg.c
中的 sleep_wakepin_config[] 中配置。
配置属性可选值如下:
DISABLE_WAKEPIN:禁用唤醒
HIGH_LEVEL_WAKEUP:GPIO 高电平触发唤醒
LOW_LEVEL_WAKEUP:GPIO 低电平触发唤醒
/* can be used by sleep mode & deep sleep mode */
/* config can be set to DISABLE_WAKEPIN/HIGH_LEVEL_WAKEUP/LOW_LEVEL_WAKEUP */
WAKEPIN_TypeDef sleep_wakepin_config[] = {
// wakepin config
{WAKEPIN_0, DISABLE_WAKEPIN}, /* WAKEPIN_0 对应 _PA_0 */
{WAKEPIN_1, DISABLE_WAKEPIN}, /* WAKEPIN_1 对应 _PA_1 */
{0xFFFFFFFF, DISABLE_WAKEPIN},
};
备注
默认情况下, sleep_wakepin_config[] 中未启用
AON_WAKEPIN_IRQ
,需用户手动激活。唤醒掩码不会在
sleep_wakepin_config[]
中被设置。如果需要将唤醒引脚用于睡眠模式,设置sleep_wevent_config[]
中的WAKE_SRC_AON_WAKEPIN
即可。
时钟和电压配置
XTAL、OSC4M 的状态及睡眠模式电压可通过 ameba_sleepcfg.c
中的 ps_config[] 配置,适用于需要在睡眠模式下保持外设时钟的场景。
PSCFG_TypeDef ps_config = {
.keep_OSC4M_on = FALSE, /* keep OSC4M on or off for sleep */
.xtal_mode_in_sleep = XTAL_OFF, /* set xtal mode during sleep mode, see enum xtal_mode_sleep for detail */
};
睡眠模式配置
应用程序可通过调用函数
pmu_set_sleep_type(uint32_t type)()
设置睡眠模式为 CG 或 PG用户可通过调用函数
pmu_get_sleep_type()
获取当前 CPU 睡眠模式
备注
KR4 与 KM4 同属一个电源域,因此两者的睡眠模式相同。调用函数
pmu_set_sleep_type()
设置 AP 的睡眠模式,NP 将自动同步 AP 的睡眠模式。系统默认睡眠模式为 PG。如需修改睡眠模式,必须在进入睡眠状态前调用函数
pmu_set_sleep_type()
。
GitHub
要启用特定唤醒源,需在 ameba_sleepcfg.c
的 sleep_wevent_config[] 数组中设置对应模块的状态。每个模块可设置为 WAKEUP_NULL/WAKEUP_NP/WAKEUP_AP
。
例如:如果 WAKE_SRC_AON_WAKEPIN
设置为 WAKEUP_NP
,表示当系统处于睡眠模式时,一旦发生 AON 唤醒引脚中断,NP 核将被唤醒处理事件。
唤醒掩码设置
/* 唤醒属性可设置为 WAKEUP_NULL/WAKEUP_NP/WAKEUP_AP/WAKEUP_DSP */
WakeEvent_TypeDef sleep_wevent_config[] = {
// Module wakeup
{WAKE_SRC_VAD, WAKEUP_NULL},
{WAKE_SRC_AON_WAKEPIN, WAKEUP_NULL},
{WAKE_SRC_AON_TIM, WAKEUP_NULL},
{WAKE_SRC_PWR_DOWN, WAKEUP_NULL},
{WAKE_SRC_BOR, WAKEUP_NULL},
{WAKE_SRC_ADC, WAKEUP_NULL},
{WAKE_SRC_AON_RTC, WAKEUP_NULL},
{WAKE_SRC_SPI1, WAKEUP_NULL},
{WAKE_SRC_SPI0, WAKEUP_NULL},
{WAKE_SRC_CTOUCH, WAKEUP_NULL},
{WAKE_SRC_GPIOB, WAKEUP_NULL},
{WAKE_SRC_GPIOA, WAKEUP_NULL},
{WAKE_SRC_UART_LOG, WAKEUP_AP},
{WAKE_SRC_UART3, WAKEUP_NULL},
{WAKE_SRC_UART2, WAKEUP_NULL},
{WAKE_SRC_UART1, WAKEUP_NULL},
{WAKE_SRC_UART0, WAKEUP_NULL},
{WAKE_SRC_Timer7, WAKEUP_NULL},
{WAKE_SRC_Timer6, WAKEUP_NULL},
{WAKE_SRC_Timer5, WAKEUP_NULL},
{WAKE_SRC_Timer4, WAKEUP_NULL},
{WAKE_SRC_Timer3, WAKEUP_NULL},
{WAKE_SRC_Timer2, WAKEUP_NULL},
{WAKE_SRC_Timer1, WAKEUP_NULL},
{WAKE_SRC_Timer0, WAKEUP_NULL},
{WAKE_SRC_WDG0, WAKEUP_NULL},
{WAKE_SRC_BT_WAKE_HOST, WAKEUP_NULL},
{WAKE_SRC_AP_WAKE, WAKEUP_NULL},
{WAKE_SRC_WIFI_FTSR_MAILBOX, WAKEUP_NP},
{WAKE_SRC_WIFI_FISR_FESR, WAKEUP_NP},
{0xFFFFFFFF, WAKEUP_NULL},
};
AON 唤醒引脚配置
AON 唤醒引脚是支持睡眠唤醒的外设之一。
SoC提供两个 AON 唤醒引脚(PA0 and PA1),需在 ameba_sleepcfg.c
中的 sleep_wakepin_config[] 中配置。
配置属性可选值如下:
DISABLE_WAKEPIN:禁用唤醒
HIGH_LEVEL_WAKEUP:GPIO 高电平触发唤醒
LOW_LEVEL_WAKEUP:GPIO 低电平触发唤醒
/* can be used by sleep mode & deep sleep mode */
/* config can be set to DISABLE_WAKEPIN/HIGH_LEVEL_WAKEUP/LOW_LEVEL_WAKEUP */
WAKEPIN_TypeDef sleep_wakepin_config[] = {
// wakepin config
{WAKEPIN_0, DISABLE_WAKEPIN}, /* WAKEPIN_0 对应 _PA_0 */
{WAKEPIN_1, DISABLE_WAKEPIN}, /* WAKEPIN_1 对应 _PA_1 */
{0xFFFFFFFF, DISABLE_WAKEPIN},
};
备注
默认情况下, sleep_wakepin_config[] 中未启用
AON_WAKEPIN_IRQ
,需用户手动激活。唤醒掩码不会在
sleep_wakepin_config[]
中被设置。如果需要将唤醒引脚用于睡眠模式,设置sleep_wevent_config[]
中的WAKE_SRC_AON_WAKEPIN
即可。
时钟和电压配置
XTAL、OSC4M 的状态及睡眠模式电压可通过 ameba_sleepcfg.c
中的 ps_config[] 配置,适用于需要在睡眠模式下保持外设时钟的场景。
PSCFG_TypeDef ps_config = {
.keep_OSC4M_on = FALSE, /* keep OSC4M on or off for sleep */
.xtal_mode_in_sleep = XTAL_OFF, /* set xtal mode during sleep mode, see enum xtal_mode_sleep for detail */
};
睡眠模式配置
应用程序可通过调用函数
pmu_set_sleep_type(uint32_t type)()
设置睡眠模式为 CG 或 PG用户可通过调用函数
pmu_get_sleep_type()
获取当前 CPU 睡眠模式
备注
KR4 与 KM4 同属一个电源域,因此两者的睡眠模式相同。调用函数
pmu_set_sleep_type()
设置 AP 的睡眠模式,NP 将自动同步 AP 的睡眠模式。系统默认睡眠模式为 PG。如需修改睡眠模式,必须在进入睡眠状态前调用函数
pmu_set_sleep_type()
。
GitHub
唤醒掩码设置
在睡眠模式下,某些场景仅需唤醒单个 CPU 来执行程序。唤醒掩码模块即用于实现此功能。
通过设置唤醒掩码,可选择仅唤醒某个指定的 CPU。若选择 KM4,需先唤醒 KM0 并由其恢复 KM4 运行。
用户可通过修改 ameba_sleepcfg.c
中的 sleep_wevent_config[] 来选择想要唤醒的目标CPU。
每个唤醒源的属性可设置为以下值之一:
WAKEUP_KM4:仅唤醒 KM4
WAKEUP_KM0:仅唤醒 KM0
WAKEUP_NULL:禁用该唤醒源
/* 唤醒属性可设置为 WAKEUP_NULL/WAKEUP_LP/WAKEUP_NP/WAKEUP_AP */
WakeEvent_TypeDef sleep_wevent_config[] = {
// Module wakeup
{WAKE_SRC_nFIQOUT1_OR_nIRQOUT1, WAKEUP_NULL},
{WAKE_SRC_nFIQOUT0_OR_nIRQOUT0, WAKEUP_NULL},
{WAKE_SRC_BT_WAKE_HOST, WAKEUP_NULL},
{WAKE_SRC_AON_WAKEPIN, WAKEUP_NULL},
{WAKE_SRC_UART2, WAKEUP_NULL},
{WAKE_SRC_UART1, WAKEUP_NULL},
{WAKE_SRC_UART0, WAKEUP_NULL},
{WAKE_SRC_SPI1, WAKEUP_NULL},
{WAKE_SRC_SPI0, WAKEUP_NULL},
{WAKE_SRC_IPC_AP, WAKEUP_AP}, /* do not change it */
{WAKE_SRC_IPC_NP, WAKEUP_NP}, /* do not change it*/
{WAKE_SRC_VADBT_OR_VADPC, WAKEUP_NULL},
{WAKE_SRC_PWR_DOWN, WAKEUP_LP},
{WAKE_SRC_BOR, WAKEUP_NULL},
{WAKE_SRC_ADC, WAKEUP_NULL},
{WAKE_SRC_CTOUCH, WAKEUP_NULL},
{WAKE_SRC_RTC, WAKEUP_NULL},
{WAKE_SRC_GPIOC, WAKEUP_NULL},
{WAKE_SRC_GPIOB, WAKEUP_NULL},
{WAKE_SRC_GPIOA, WAKEUP_NULL},
{WAKE_SRC_UART_LOG, WAKEUP_NULL},
{WAKE_SRC_Timer7, WAKEUP_NULL},
{WAKE_SRC_Timer6, WAKEUP_NP},
{WAKE_SRC_Timer5, WAKEUP_NULL},
{WAKE_SRC_Timer4, WAKEUP_NULL},
{WAKE_SRC_Timer3, WAKEUP_NULL},
{WAKE_SRC_Timer2, WAKEUP_NULL},
{WAKE_SRC_Timer1, WAKEUP_NULL},
{WAKE_SRC_Timer0, WAKEUP_NULL},
{WAKE_SRC_WDG0, WAKEUP_NULL},
{WAKE_SRC_AP_WAKE, WAKEUP_NULL},
{WAKE_SRC_NP_WAKE, WAKEUP_NULL},
{WAKE_SRC_AON_TIM, WAKEUP_NULL},
{WAKE_SRC_WIFI_FTSR_MAILBOX, WAKEUP_LP}, /* Wi-Fi wakeup, do not change it*/
{WAKE_SRC_WIFI_FISR_FESR, WAKEUP_LP}, /* Wi-Fi wakeup, do not change it*/
{0xFFFFFFFF, WAKEUP_NULL}, /* Table end */
};
AON 唤醒引脚配置
AON 唤醒引脚是支持睡眠唤醒的外设之一。
SoC提供四个 AON 唤醒引脚(PB21、PB22、PB23 和 PB24),需在 ameba_sleepcfg.c
中的 sleep_wakepin_config[] 中配置。
配置属性可选值如下:
DISABLE_WAKEPIN:禁用唤醒
HIGH_LEVEL_WAKEUP:GPIO 高电平触发唤醒
LOW_LEVEL_WAKEUP:GPIO 低电平触发唤醒
/* can be used by sleep mode & deep sleep mode */
/* config can be set to DISABLE_WAKEPIN/HIGH_LEVEL_WAKEUP/LOW_LEVEL_WAKEUP */
WAKEPIN_TypeDef sleep_wakepin_config[] = {
// wakepin config
{WAKEPIN_0, DISABLE_WAKEPIN}, /* WAKEPIN_0 对应 _PB_21 */
{WAKEPIN_1, DISABLE_WAKEPIN}, /* WAKEPIN_1 对应 _PB_22 */
{WAKEPIN_2, DISABLE_WAKEPIN}, /* WAKEPIN_2 对应 _PB_23 */
{WAKEPIN_3, DISABLE_WAKEPIN}, /* WAKEPIN_3 对应 _PB_24 */
{0xFFFFFFFF, DISABLE_WAKEPIN},
}
备注
PB23
和PB24
默认用于 LOGUART 的收发。如果需要将其用作深度睡眠唤醒源,请联系 Realtek。活动模式和睡眠模式的引脚通过 pinmap 控制,必要时修改ameba_pinmapcfg.c
中的 pmap_func[] 实现模式切换。默认情况下, sleep_wakepin_config[] 中未启用
AON_WAKEPIN_IRQ
,需用户手动激活。唤醒掩码不会在
sleep_wakepin_config[]
中被设置。如果需要将唤醒引脚用于睡眠模式,设置sleep_wevent_config[]
中的WAKE_SRC_AON_WAKEPIN
即可。
时钟和电压配置
XTAL、OSC4M 的状态及睡眠模式电压可通过 ameba_sleepcfg.c
中的 ps_config[] 配置,适用于需要在睡眠模式下保持外设时钟的场景。
PSCFG_TypeDef ps_config = {
.km0_tickles_debug = TRUE,/* if open WIFI FW, should close it, or beacon will lost in WOWLAN */
.km0_pll_off = TRUE,
.km0_audio_vad_on = FALSE,
#if defined(CONFIG_CLINTWOOD ) && CONFIG_CLINTWOOD
.km0_config_psram = FALSE, /* if device enter sleep mode or not, false for keep active */
.km0_sleep_withM4 = FALSE,
#else
.km0_config_psram = TRUE, /* if device enter sleep mode or not, false for keep active */
.km0_sleep_withM4 = TRUE,
#endif
.keep_OSC4M_on = FALSE,
.xtal_mode_in_sleep = XTAL_OFF,
.swr_mode_in_sleep = SWR_PFM,
};
ameba_wifi_country_code_table_usrcfg
TBD
ameba_wifi_power_table_usrcfg
TBD
ameba_wificfg
TBD