开发者配置
概述
本章主要介绍在开发过程中需要重点关注和按需修改的各种配置文件。
ameba_bootcfg
本节介绍与启动相关的配置,包括 SoC 时钟切换和启动日志。
github source code
KM4 在 BootRom 阶段以 200MHz 运行,并在 bootloader 阶段切换至更高频率。
修改 SoC 时钟时存在以下限制:
项目 |
频率 |
核心电压 |
|---|---|---|
PLL |
300MHz ~ 688.128MHz |
|
KM0 |
≤105MHz |
0.9V |
KM0 |
≤115MHz |
1.0V |
KM4 |
≤262MHz |
0.9V |
KM4 |
≤345MHz |
1.0V |
备注
SDK 中默认 Flash 是 3.3V 供电,初始化时会默认将 Flash 切换到不超过 104MHz 限制的最高速率。
宽压 IC 中,Flash 的工作频率上限,应遵循 1.65V~2.3V 供电区间的速率限制,可以参考 ameba_flashcfg 降速或者找 realtek 寻找帮助。
SoC & PSRAM 时钟设置流程
确认
ameba_bootcfg.c文件中Boot_SocClk_Info_Idx和SocClk_Info[]的值。1// for km4, max 345MHz under 1.0v, max 262MHz under 0.9v 2// for km0, max 115MHz under 1.0v, max 105MHz under 0.9v 3// PLL can be 300MHz~688.128MHz 4// KM4_CKD range is [1, 8], KM0_CKD range is [1, 16] or USEXTAL 5const SocClk_Info_TypeDef SocClk_Info[] = { 6 /* PLL_CLK, Vol_Type, KM4_CKD, KM0_CKD, PSRAMC_CKD*/ 7 /* This group is to reduce the impact of PSRAM on RF, the frequency is specially selected */ 8 {PLL_524M, CORE_VOL_0P9, CLKDIV(2), CLKDIV(5), CLKDIV(2)}, // For SiP Psram 9 {PLL_392M, CORE_VOL_0P9, CLKDIV(2), CLKDIV(4), CLKDIV(1)}, // For SiP Psram 10 {PLL_334M, CORE_VOL_1P0, CLKDIV(1), CLKDIV(3), CLKDIV(1)}, // For SiP Psram 11 /* This group is to reduce the impact of Flash on RF, the frequency is specially selected. 12 Single die use the same settings. */ 13 {PLL_512M, CORE_VOL_0P9, CLKDIV(2), CLKDIV(5), CLKDIV(2)}, // For SiP Flash or single die (No Psram) 14 {PLL_400M, CORE_VOL_0P9, CLKDIV(2), CLKDIV(4), CLKDIV(1)}, // For SiP Flash or single die (No Psram) 15 {PLL_334M, CORE_VOL_1P0, CLKDIV(1), CLKDIV(3), CLKDIV(1)}, // For SiP Flash or single die (No Psram) 16 /* The following frequency settings are not adjustable */ 17 {PLL_480M, CORE_VOL_0P9, CLKDIV(2), CLKDIV(5), CLKDIV(2)}, // 48M for usb, both For SiP Psram / SiP Flash / single die 18 {PLL_677P376M, CORE_VOL_1P0, CLKDIV(2), CLKDIV(6), CLKDIV(2)}, // Audio 19 {PLL_688P128M, CORE_VOL_1P0, CLKDIV(2), CLKDIV(6), CLKDIV(2)}, // Audio 20}; 21 22/** 23* @brif SocClk_Info select. One of Valid_Boot_Idx_for_SiP_Psram or Valid_Boot_Idx_for_No_Psram depend on different chip types 24* Boot_SocClk_Info_Idx is [0, sizeof(SocClk_Info)), Soc will set socclk by SocClk_Info[Boot_SocClk_Info_Idx] 25*/ 26#ifdef CONFIG_USB_DEVICE_EN 27u8 Boot_SocClk_Info_Idx = 6; /* Make sure the PLL_CLK for USB is an integer multiple of 48MHz */ 28#else 29u8 Boot_SocClk_Info_Idx = 6; /* 480M has an acceptable impact on the RF performance of SiP Psram and SiP Flash */ 30#endif
由于 PSRAM 或 Flash 的部分频率会干扰 RF,
bootloaderbootloader_km4.c文件中的BOOT_ChipInfo_ClkInfoIdx()函数只允许Boot_SocClk_Info_Idx表示的索引在SocClk_Info数组内。备注
不建议修改
SocClk_Info,如果需要SocClk_Info之外的频率组合,需要确认该配置是否会影响 RF 性能。u32 BOOT_ChipInfo_ClkInfoIdx(void) { /* PSRAM die is wb955 which can run up to 200MHz */ ... return Boot_SocClk_Info_Idx; }
Bootloader 将根据
SocClk_Info[Boot_SocClk_Info_Idx]的定义来配置 SoC 电压和时钟,PSRAMC (PSRAM 时钟的两倍) 速率也将随 SoC 时钟同步调整,其余模块时钟将由软件根据其最大运行速度自动设置为合理值,以Boot_SocClk_Info_Idx的值是 0 和 4 为例:PSRAM type
PSRAM speed
SocClk_Info[x]
Clock Info
无 PSRAM
SocClk_Info[4]
PLL: 400MHz
KM4: PLL/2
KM0: PLL/4
有 PSRAM
≤200MHz
SocClk_Info[0]
PLL: 524MHz
KM4: PLL/2
KM0: PLL/5
PSRAMC: PLL/2
必要时,参考以下方法来修改 SoC 时钟:
将
Boot_SocClk_Info_Idx修改为[0, sizeof(SocClk_Info)]范围内的值,然后在SocClk_Info[Boot_SocClk_Info_Idx]中自定义时钟配置信息。
备注
请充分考虑硬件的限制,避免设置非法的时钟配置参数。
重新编译工程,并下载新的固件
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 source code
KM4 在 BootRom 阶段以 150MHz 运行,并在 bootloader 阶段切换至更高频率。
修改 SoC 时钟时存在以下限制:
时钟 |
频率 |
核心电压 |
|---|---|---|
PLLM |
330MHz ~ 660MHz |
|
PLLD |
330MHz ~ 660MHz |
|
KM4/KR4 |
≤300MHz |
0.9V |
KM4/KR4 |
≤400MHz |
1.0V |
SoC & PSRAM 时钟设置流程
(可选)确认内置 PSRAM 器件的速率限制(若不明确具体参数)
参考
bootloaderbootloader_km4.c文件中的BOOT_ChipInfo_PSRAMType()函数,打印PSRAM_CLK_LIMIT_GET(ChipInfo_PSRAMType())的值,可以从 OTP 中读取内置 PSRAM 的速率限制参考芯片的规格书,了解内置 PSRAM 的速率限制
确认 Boot_SocClk_Info_Idx 的值,以及
ameba_bootcfg.c文件中的时钟信息。1// for kr4/km4, max 400MHz under 1.0v, max 200MHz under 0.9v 2// for dsp, max 500MHz under 1.0v, max 400MHz under 0.9v 3// CPUPLL(PLLM)/DSPPLL(PLLD) can be 330MHz~660MHz 4// All CLKDIV range is [1, 16] 5SocClk_Info_TypeDef SocClk_Info[] = { 6 /* PLLM_CLK, PLLD_CLK, Vol_Type, CPU_CKD, PSRAMC_CKD */ 7 {PLL_600M, PLL_500M, CORE_VOL_0P9, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /* 0.9V, PSRAM-166M */ 8 {PLL_600M, PLL_500M, CORE_VOL_1P0, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /* 1.0V, PSRAM-166M */ 9 {PLL_400M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLM}, /* 1.0V, PSRAM-200M */ 10 {PLL_480M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLD}, /* 1.0V, PSRAM-250M */ 11}; 12 13/** 14* @brif SocClk_Info select 15* Boot_SocClk_Info_Idx valid value is [0, 3] and 0xFF 16* when Boot_SocClk_Info_Idx is 0xFF, set socclk by chipinfo Automatically 17* when Boot_SocClk_Info_Idx is [0, 3], set socclk by SocClk_Info[Boot_SocClk_Info_Idx] 18*/ 19u8 Boot_SocClk_Info_Idx = 0xFF;
如果 Boot_SocClk_Info_Idx 为 0xFF(默认),bootloader 将根据内置 PSRAM 类型自动设置 SoC 时钟。
如果 Boot_SocClk_Info_Idx 不是 0xFF,bootloader 将根据
SocClk_Info[Boot_SocClk_Info_Idx]的定义来配置 SoC 时钟。
例如,如果 Boot_SocClk_Info_Idx 为
0,PSRAM 的最高运行频率为 166MHz,bootloader 将采用SocClk_Info[0]进行配置, 即 KM4/KR4 的时钟频率等于 PLLM 频率的 1/3,PSRAMC (PSRAM 时钟的两倍) 速率也将设置为 PLLM 频率的 1/2,其余模块时钟将由软件根据其最大运行速度自动设置为合理值。PSRAM 类型
PSRAM 速度
SocClk_Info[x]
时钟信息
无 PSRAM
SocClk_Info[0]
PLLM: 600MHz
PLLD: 500MHz
KM4/KR4: PLLM/3
有 PSRAM
≤166MHz
SocClk_Info[1]
PLLM: 600MHz
PLLD: 500MHz
KM4/KR4: PLLM/3
PSRAMC: PLLM/2
≤200MHz
SocClk_Info[2]
PLLM: 400MHz
PLLD: 500MHz
KM4/KR4: PLLM/2
PSRAMC: PLLM
必要时,参考以下方法来修改 SoC 时钟:
保持
Boot_SocClk_Info_Idx为0xFF,仅修改SocClk_Info[x]中的时钟参数,即可设置 PLLM/PLLD 和 CPU 的时钟。将
Boot_SocClk_Info_Idx修改为[0, sizeof(SocClk_Info)]范围内的值,然后在SocClk_Info[Boot_SocClk_Info_Idx]中自定义时钟配置信息。
备注
请充分考虑硬件的限制,避免设置非法的时钟配置参数。
如果不需要 PLLD,可以将其禁用。
重新编译工程,并下载新的固件
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 source code
KM4 在 BootRom 阶段以 150MHz 运行,并在 bootloader 阶段切换至更高频率。
修改 SoC 时钟时存在以下限制:
时钟 |
频率 |
核心电压 |
说明 |
|---|---|---|---|
PLLM |
330MHz ~ 660MHz |
||
PLLD |
330MHz ~ 660MHz |
不能超过 DSP 的最大时钟频率 |
|
KM4/KR4 |
≤300MHz |
0.9V |
|
KM4/KR4 |
≤400MHz |
1.0V |
|
DSP |
≤400MHz |
0.9V |
同 PLLD |
DSP |
≤500MHz |
1.0V |
同 PLLD |
SoC & PSRAM 时钟设置流程
(可选)确认内置 PSRAM 器件的速率限制(若不明确具体参数)
参考
bootloaderbootloader_km4.c文件中的BOOT_ChipInfo_PSRAMType()函数,打印PSRAM_CLK_LIMIT_GET(ChipInfo_PSRAMType())的值,可以从 OTP 中读取内置 PSRAM 的速率限制参考芯片的规格书,了解内置 PSRAM 的速率限制
确认 Boot_SocClk_Info_Idx 的值,以及
ameba_bootcfg.c文件中的时钟信息。1// for kr4/km4, max 400MHz under 1.0v, max 200MHz under 0.9v 2// for dsp, max 500MHz under 1.0v, max 400MHz under 0.9v 3// CPUPLL(PLLM)/DSPPLL(PLLD) can be 330MHz~660MHz 4// All CLKDIV range is [1, 16] 5SocClk_Info_TypeDef SocClk_Info[] = { 6 /* PLLM_CLK, PLLD_CLK, Vol_Type, CPU_CKD, PSRAMC_CKD */ 7 {PLL_600M, PLL_500M, CORE_VOL_0P9, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /* 0.9V, PSRAM-166M */ 8 {PLL_600M, PLL_500M, CORE_VOL_1P0, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /* 1.0V, PSRAM-166M */ 9 {PLL_400M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLM}, /* 1.0V, PSRAM-200M */ 10 {PLL_480M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLD}, /* 1.0V, PSRAM-250M */ 11}; 12 13/** 14* @brif SocClk_Info select 15* Boot_SocClk_Info_Idx valid value is [0, 3] and 0xFF 16* when Boot_SocClk_Info_Idx is 0xFF, set socclk by chipinfo Automatically 17* when Boot_SocClk_Info_Idx is [0, 3], set socclk by SocClk_Info[Boot_SocClk_Info_Idx] 18*/ 19u8 Boot_SocClk_Info_Idx = 0xFF;
如果 Boot_SocClk_Info_Idx 为 0xFF(默认),bootloader 将根据内置 PSRAM 类型自动设置 SoC 时钟。
如果 Boot_SocClk_Info_Idx 不是 0xFF,bootloader 将根据
SocClk_Info[Boot_SocClk_Info_Idx]的定义来配置 SoC 时钟。
例如,如果 Boot_SocClk_Info_Idx 为
0,PSRAM 的最高运行频率为 166MHz,bootloader 将采用SocClk_Info[0]进行配置,即 KM4/KR4 的时钟频率等于 PLLM 频率的 1/3,PSRAMC (PSRAM 时钟的两倍) 速率也将设置为 PLLM 频率的 1/2,其余模块时钟将由软件根据其最大运行速度自动设置为合理值。PSRAM 类型
PSRAM 速度
SocClk_Info[x]
时钟信息
有 PSRAM
≤250MHz
SocClk_Info[3]
PLLM: 480MHz
PLLD: 500MHz
KM4/KR4: PLLM/2
PSRAMC: PLLD
DSP: PLLD
必要时,参考以下方法来修改 SoC 时钟:
保持
Boot_SocClk_Info_Idx为0xFF,仅修改SocClk_Info[x]中的时钟参数,即可设置 PLLM/PLLD 和 CPU 的时钟。将
Boot_SocClk_Info_Idx修改为[0, sizeof(SocClk_Info)]范围内的值,然后在SocClk_Info[Boot_SocClk_Info_Idx]中自定义时钟配置信息。
备注
请充分考虑硬件的限制,避免设置非法的时钟配置参数。
重新编译工程,并下载新的固件
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 source code
KM4 在 BootRom 阶段以 150MHz 运行,并在 bootloader 阶段切换至更高频率。
修改 SoC 时钟时存在以下限制:
时钟 |
频率 |
核心电压 |
说明 |
|---|---|---|---|
PLLM |
330MHz ~ 660MHz |
||
PLLD |
330MHz ~ 660MHz |
不能超过 DSP 的最大时钟频率 |
|
KM4/KR4 |
≤300MHz |
0.9V |
|
KM4/KR4 |
≤400MHz |
1.0V |
|
DSP |
≤400MHz |
0.9V |
同 PLLD |
DSP |
≤500MHz |
1.0V |
同 PLLD |
SoC & PSRAM 时钟设置流程
(可选)确认内置 PSRAM 器件的速率限制(若不明确具体参数)
参考
bootloaderbootloader_km4.c文件中的BOOT_ChipInfo_PSRAMType()函数,打印PSRAM_CLK_LIMIT_GET(ChipInfo_PSRAMType())的值,可以从 OTP 中读取内置 PSRAM 的速率限制参考芯片的规格书,了解内置 PSRAM 的速率限制
确认 Boot_SocClk_Info_Idx 的值,以及
ameba_bootcfg.c文件中的时钟信息。1// for kr4/km4, max 400MHz under 1.0v, max 200MHz under 0.9v 2// for dsp, max 500MHz under 1.0v, max 400MHz under 0.9v 3// CPUPLL(PLLM)/DSPPLL(PLLD) can be 330MHz~660MHz 4// All CLKDIV range is [1, 16] 5SocClk_Info_TypeDef SocClk_Info[] = { 6 /* PLLM_CLK, PLLD_CLK, Vol_Type, CPU_CKD, PSRAMC_CKD */ 7 {PLL_600M, PLL_500M, CORE_VOL_0P9, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /* 0.9V, PSRAM-166M */ 8 {PLL_600M, PLL_500M, CORE_VOL_1P0, CLKDIV(3) | ISPLLM, CLKDIV(2) | ISPLLM}, /* 1.0V, PSRAM-166M */ 9 {PLL_400M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLM}, /* 1.0V, PSRAM-200M */ 10 {PLL_480M, PLL_500M, CORE_VOL_1P0, CLKDIV(2) | ISPLLM, CLKDIV(1) | ISPLLD}, /* 1.0V, PSRAM-250M */ 11}; 12 13/** 14* @brif SocClk_Info select 15* Boot_SocClk_Info_Idx valid value is [0, 3] and 0xFF 16* when Boot_SocClk_Info_Idx is 0xFF, set socclk by chipinfo Automatically 17* when Boot_SocClk_Info_Idx is [0, 3], set socclk by SocClk_Info[Boot_SocClk_Info_Idx] 18*/ 19u8 Boot_SocClk_Info_Idx = 0xFF;
如果 Boot_SocClk_Info_Idx 为 0xFF(默认),bootloader 将根据内置 PSRAM 类型自动设置 SoC 时钟。
如果 Boot_SocClk_Info_Idx 不是 0xFF,bootloader 将根据
SocClk_Info[Boot_SocClk_Info_Idx]的定义来配置 SoC 时钟。
例如,如果 Boot_SocClk_Info_Idx 为
0,PSRAM 的最高运行频率为 166MHz,bootloader 将采用SocClk_Info[0]进行配置,即 KM4/KR4 的时钟频率等于 PLLM 频率的 1/3,PSRAMC (PSRAM 时钟的两倍) 速率也将设置为 PLLM 频率的 1/2,其余模块时钟将由软件根据其最大运行速度自动设置为合理值。PSRAM 类型
PSRAM 速度
SocClk_Info[x]
时钟信息
有 PSRAM
≤250MHz
SocClk_Info[3]
PLLM: 480MHz
PLLD: 500MHz
KM4/KR4: PLLM/2
PSRAMC: PLLD
DSP: PLLD
必要时,参考以下方法来修改 SoC 时钟:
保持
Boot_SocClk_Info_Idx为0xFF,仅修改SocClk_Info[x]中的时钟参数,即可设置 PLLM/PLLD 和 CPU 的时钟。将
Boot_SocClk_Info_Idx修改为[0, sizeof(SocClk_Info)]范围内的值,然后在SocClk_Info[Boot_SocClk_Info_Idx]中自定义时钟配置信息。
备注
请充分考虑硬件的限制,避免设置非法的时钟配置参数。
重新编译工程,并下载新的固件
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 source code
KM4 在 BootRom 阶段以 200MHz 运行,并在 bootloader 阶段切换至更高频率。
修改 SoC 时钟时存在以下限制:
时钟 |
频率 |
核心电压 |
说明 |
|---|---|---|---|
NPPLL |
800MHz ~ 1.0GHz |
||
APPLL |
1.0GHz ~ 1.6GHz |
不能超过 CA32 的最大时钟频率 |
|
KM4 |
≤250MHz |
0.9V |
|
KM4 |
≤333MHz |
1.0V |
|
CA32 |
≤920MHz |
0.9V |
|
CA32 |
≤1200MHz |
1.0V |
当 Memory Type 是 ddr 时,上限是 1320MHz |
SoC & PSRAM 时钟设置流程
确认
ameba_bootcfg.c文件中SocClk_Info[]的值。1// for km4, max 333MHz under 1.0v, max 250MHz under 0.9v 2// for AP, max 1200MHz under 1.0v, max 920MHz under 0.9v 3// NP PLL can be 800MHz~1000MHz 4SocClk_Info_TypeDef SocClk_Info[1] = { 5 /* NPPLL_CLK, APPLL_Clk, Vol_Type, KM4_CPU_CKD, AP_CPU_CKD */ 6 {NPPLL_1000M, APPLL_1200M, VOL_10, CLKDIV(3), CLKDIV(1) | ISAPPLL}, //best porformance 7 // {NPPLL_920M, APPLL_NULL, VOL_09, CLKDIV(4), CLKDIV(1) | ISNPPLL}, 8};
Bootloader 将根据
SocClk_Info[0]的定义来配置 SoC 电压和时钟,其余模块时钟将由软件根据其最大运行速度自动设置为合理值:KM4 Clock: NPPLL / SocClk_Info[0].KM4_CPU_CKD
CA32 Clock: 如果 SocClk_Info[0].AP_CPU_CKD 为 ISAPPLL,则 CA32 Clock = APPLL / SocClk_Info[0].AP_CPU_CKD,否则 CA32 Clock = NPPLL / SocClk_Info[0].AP_CPU_CKD
必要时,在
SocClk_Info中自定义时钟配置信息。备注
请充分考虑硬件的限制,避免设置非法的时钟配置参数。
重新编译工程,并下载新的固件
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 。
ameba_flashcfg
本节介绍与 Flash 相关的配置,包括 Flash 的速度、读取模式、布局和保护模式。
github source code
Flash_Speed
SPIC 在 BootRom 阶段的频率是 XTAL(40MHz),并在 Bootloader 阶段切换至更高频率。
Flash 运行速率为 SPIC 控制器速率的一半,SPIC 控制器的速率默认由 PLL 分频得到,但是必须低于 SPIC_CLK_LIMIT (208MHz)。
如需降低 Flash 的运行速率,请修改 Flash_Speed (对应 SPIC0)或 Data_Flash_Speed (对应 SPIC1)的值,即 PLL 的分频系数。
const u16 Flash_Speed = CLKDIV(2);
const u16 Data_Flash_Speed = CLKDIV(2);
备注
参阅 ameba_bootcfg 获取更多关于 PLL 的信息。
Flash 最高时钟频率为
SPIC_CLK_LIMIT/2。初始化流程将自动检测配置频率是否超过此上限。初始化时已经将 Flash 设为为最佳性能,所以不建议修改
Flash_Speed和Flash_ReadMode或者Data_Flash_Speed和Data_Flash_ReadMode。
Flash_ReadMode
SPIC 在 BootRom 阶段工作在 1IO 模式,并在 Bootloader 阶段切换至 Flash_ReadMode 的值指定的模式(默认 4IO),若当前配置的读取模式不支持,系统将自动尝试其他模式,直至找到适合的模式。
Flash_Layout
SDK 中的默认 Flash 布局详见章节 Flash 布局 。如需修改 Flash 布局,请参考章节 Flash 布局修改。
启用 Flash 保护
更多关于此功能的详细信息,请参考章节 Flash 写保护机制。
github source code
Flash_Speed
SPIC 在 BootRom 阶段的频率是 XTAL(40MHz),并在 Bootloader 阶段切换至更高频率。
Flash 运行速率为 SPIC 控制器速率的一半,SPIC 控制器的速率默认由 PLLM 分频得到,但是必须低于 SPIC_CLK_LIMIT (208MHz)。
如需降低 Flash 的运行速率,请修改 Flash_Speed 的值,即 PLLM 的分频系数。
const u16 Flash_Speed = 0xFF;
备注
参阅 ameba_bootcfg 获取更多关于 PLLM 的信息。
Flash 最高时钟频率为
SPIC_CLK_LIMIT/2。初始化流程将自动检测配置频率是否超过此上限。
Flash_ReadMode
SPIC 在 BootRom 阶段工作在 1IO 模式,并在 Bootloader 阶段切换至 Flash_ReadMode 的值指定的模式(默认 4IO),若当前配置的读取模式不支持,系统将自动尝试其他模式,直至找到适合的模式。
Flash_Layout
SDK 中的默认 Flash 布局详见章节 Flash 布局 。如需修改 Flash 布局,请参考章节 Flash 布局修改。
启用 Flash 保护
更多关于此功能的详细信息,请参考章节 Flash 写保护机制。
github source code
Flash_Speed
SPIC 在 BootRom 阶段的频率是 XTAL(40MHz),并在 Bootloader 阶段切换至更高频率。
Flash 运行速率为 SPIC 控制器速率的一半,SPIC 控制器的速率默认由 PLLM 分频得到,但是必须低于 SPIC_CLK_LIMIT (208MHz)。
如需降低 Flash 的运行速率,请修改 Flash_Speed 的值,即 PLLM 的分频系数。
const u16 Flash_Speed = 0xFF;
备注
参阅 ameba_bootcfg 获取更多关于 PLLM 的信息。
Flash 最高时钟频率为
SPIC_CLK_LIMIT/2。初始化流程将自动检测配置频率是否超过此上限。
Flash_ReadMode
SPIC 在 BootRom 阶段工作在 1IO 模式,并在 Bootloader 阶段切换至 Flash_ReadMode 的值指定的模式(默认 4IO),若当前配置的读取模式不支持,系统将自动尝试其他模式,直至找到适合的模式。
Flash_Layout
SDK 中的默认 Flash 布局详见章节 Flash 布局 。如需修改 Flash 布局,请参考章节 Flash 布局修改。
启用 Flash 保护
更多关于此功能的详细信息,请参考章节 Flash 写保护机制。
github source code
Flash_Speed
SPIC 在 BootRom 阶段的频率是 XTAL(40MHz),并在 Bootloader 阶段切换至更高频率。
Flash 运行速率为 SPIC 控制器速率的一半,SPIC 控制器的速率默认由 PLLM 分频得到,但是必须低于 SPIC_CLK_LIMIT (208MHz)。
如需降低 Flash 的运行速率,请修改 Flash_Speed 的值,即 PLLM 的分频系数。
const u16 Flash_Speed = 0xFF;
备注
参阅 ameba_bootcfg 获取更多关于 PLLM 的信息。
Flash 最高时钟频率为
SPIC_CLK_LIMIT/2。初始化流程将自动检测配置频率是否超过此上限。
Flash_ReadMode
SPIC 在 BootRom 阶段工作在 1IO 模式,并在 Bootloader 阶段切换至 Flash_ReadMode 的值指定的模式(默认 4IO),若当前配置的读取模式不支持,系统将自动尝试其他模式,直至找到适合的模式。
Flash_Layout
SDK 中的默认 Flash 布局详见章节 Flash 布局 。如需修改 Flash 布局,请参考章节 Flash 布局修改。
启用 Flash 保护
更多关于此功能的详细信息,请参考章节 Flash 写保护机制。
github source code
Flash_Speed
SPIC 在 BootRom 阶段的频率是 XTAL(40MHz),并在 Bootloader 阶段切换至更高频率。
Flash 运行速率为 SPIC 控制器速率的一半,SPIC 控制器的速率默认由 NPPLL 分频得到,但是必须低于 SPIC_CLK_LIMIT (208MHz)。
如需降低 Flash 的运行速率,请修改 Flash_Speed 的值,即 NPPLL 的分频系数。
const u16 Flash_Speed = 0x7FF;
备注
参阅 ameba_bootcfg 获取更多关于 NPPLL 的信息。
Flash 最高时钟频率为
SPIC_CLK_LIMIT/2。初始化流程将自动检测配置频率是否超过此上限。
Flash_ReadMode
SPIC 在 BootRom 阶段工作在 1IO 模式,并在 Bootloader 阶段切换至 Flash_ReadMode 的值指定的模式(默认 4IO),若当前配置的读取模式不支持,系统将自动尝试其他模式,直至找到适合的模式。
Flash_Layout
SDK 中的默认 Flash 布局详见章节 Flash 布局 。如需修改 Flash 布局,请参考章节 Flash 布局修改。
启用 Flash 保护
更多关于此功能的详细信息,请参考章节 Flash 写保护机制。
ameba_boot_trustzonecfg
本节介绍了 TrustZone 相关的配置,主要是支持 Secure 功能的芯片中 MPC 和 SAU 的配置。如果芯片不支持 Secure 功能,则该配置文件将被忽略。
github source code
sau_config
用户可以通过修改 sau_config 的值来配置 KM4 的安全属性,在设定的区间 [Start, End] 之内,用户可以将 NSC 设置为 0 或 1,以指定该区域是否为非安全区域。
如果
NSC设置为 1,则该区域将被视为安全代码,即 Non-secure Callable (NSC);如果
NSC设置为 0,则该区域将被视为非安全代码,Non-secure KM4 将可以访问该区域。没有设置的区域,将被视为安全代码,Secure KM4 可以访问。
mpc1_config
用户可以通过修改 mpc1_config 的值来配置 SRAM 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
mpc2_config
用户可以通过修改 mpc2_config 的值来配置 PSRAM 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
备注
如果芯片支持 TrustZone Secure Image Protection(RDP) 功能,则该文件将被编译并链接到 Bootloader 中;否则,该文件将被忽略。
可以参考 TrustZone Layout 修改
ameba_boot_trustzonecfg.c。
github source code
sau_config
用户可以通过修改 sau_config 的值来配置 KM4 的安全属性,在设定的区间 [Start, End] 之内,用户可以将 NSC 设置为 0 或 1,以指定该区域是否为非安全区域。
如果
NSC设置为 1,则该区域将被视为安全代码,即 Non-secure Callable (NSC);如果
NSC设置为 0,则该区域将被视为非安全代码,Non-secure KM4 将可以访问该区域。没有设置的区域,将被视为安全代码,Secure KM4 可以访问。
mpc1_config
用户可以通过修改 mpc1_config 的值来配置 hs_sram0(0x20000000~0x20040000) 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
mpc2_config
用户可以通过修改 mpc2_config 的值来配置 hs_sram1(0x20040000~0x20080000) 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
mpc3_config
用户可以通过修改 mpc3_config 的值来配置 PSRAM 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
备注
如果芯片支持 TrustZone Secure Image Protection(RDP) 功能,则该文件将被编译并链接到 Bootloader 中;否则,该文件将被忽略。
可以参考 TrustZone Layout 修改
ameba_boot_trustzonecfg.c。
github source code
sau_config
用户可以通过修改 sau_config 的值来配置 KM4 的安全属性,在设定的区间 [Start, End] 之内,用户可以将 NSC 设置为 0 或 1,以指定该区域是否为非安全区域。
如果
NSC设置为 1,则该区域将被视为安全代码,即 Non-secure Callable (NSC);如果
NSC设置为 0,则该区域将被视为非安全代码,Non-secure KM4 将可以访问该区域。没有设置的区域,将被视为安全代码,Secure KM4 可以访问。
mpc1_config
用户可以通过修改 mpc1_config 的值来配置 hs_sram0(0x20000000~0x20040000) 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
mpc2_config
用户可以通过修改 mpc2_config 的值来配置 hs_sram1(0x20040000~0x20080000) 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
mpc3_config
用户可以通过修改 mpc3_config 的值来配置 PSRAM 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
备注
如果芯片支持 TrustZone Secure Image Protection(RDP) 功能,则该文件将被编译并链接到 Bootloader 中;否则,该文件将被忽略。
可以参考 TrustZone Layout 修改
ameba_boot_trustzonecfg.c。
github source code
sau_config
用户可以通过修改 sau_config 的值来配置 KM4 的安全属性,在设定的区间 [Start, End] 之内,用户可以将 NSC 设置为 0 或 1,以指定该区域是否为非安全区域。
如果
NSC设置为 1,则该区域将被视为安全代码,即 Non-secure Callable (NSC);如果
NSC设置为 0,则该区域将被视为非安全代码,Non-secure KM4 将可以访问该区域。没有设置的区域,将被视为安全代码,Secure KM4 可以访问。
mpc1_config
用户可以通过修改 mpc1_config 的值来配置 hs_sram0(0x20000000~0x20040000) 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
mpc2_config
用户可以通过修改 mpc2_config 的值来配置 hs_sram1(0x20040000~0x20080000) 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
mpc3_config
用户可以通过修改 mpc3_config 的值来配置 PSRAM 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
备注
如果芯片支持 TrustZone Secure Image Protection(RDP) 功能,则该文件将被编译并链接到 Bootloader 中;否则,该文件将被忽略。
可以参考 TrustZone Layout 修改
ameba_boot_trustzonecfg.c。
github source code
sau_config
用户可以通过修改 sau_config 的值来配置 KM4 的安全属性,在设定的区间 [Start, End] 之内,用户可以将 NSC 设置为 0 或 1,以指定该区域是否为非安全区域。
如果
NSC设置为 1,则该区域将被视为安全代码,即 Non-secure Callable (NSC);如果
NSC设置为 0,则该区域将被视为非安全代码,Non-secure KM4 将可以访问该区域。没有设置的区域,将被视为安全代码,Secure KM4 可以访问。
mpc1_config
用户可以通过修改 mpc1_config 的值来配置 HS_SRAM 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
mpc2_config
用户可以通过修改 mpc2_config 的值来配置 PSRAM/DRAM 部分区间的安全属性:
在设定的区间 [Start, End] 之内,Non-secure Master 可以访问该区域;
没有设置的区域,只有 Secure Master 才可以访问。
备注
如果芯片支持 TrustZone Secure Image Protection(RDP) 功能,则该文件将被编译并链接到 Bootloader 中;否则,该文件将被忽略。
可以参考 TrustZone Layout 修改
ameba_boot_trustzonecfg.c。
ameba_intfcfg
本节介绍了外设引脚分配,即将芯片的物理引脚与各种外设功能进行对应。
github source code
sdio_config
用户通过修改 SDIO_Pin_Grp 来选择不同的 SDIO Device 的引脚组。
/* sdio pinmux group: 0x0-0x4 */
/* Please refer to SDIO_PAD for more details. */
u8 SDIO_Pin_Grp = 0x2;
其中,SDIO_PAD 数组为 Realtek 提供的多组支持高速通信的引脚组。
/* Please do not modify this table!!! */
const u8 SDIO_PAD[5][6] = {
/* CLK CMD D3 D2 D1 D0 */
{_PA_16, _PA_15, _PA_14, _PA_13, _PA_18, _PA_17}, // Group0: PA13-PA18
{_PA_29, _PA_28, _PA_27, _PA_26, _PA_31, _PA_30}, // Group1: PA26-PA31
{_PB_9, _PB_8, _PB_7, _PB_6, _PB_14, _PB_13}, // Group2: PB6-PB9, PB13-PB14, default
{_PB_19, _PB_18, _PB_17, _PA_12, _PB_21, _PB_20}, // Group3: PA12, PB17-PB21
{_PB_26, _PB_25, _PB_24, _PB_23, _PB_28, _PB_27} // Group4: PB23-PB28
};
备注
为了保证 SDIO 的高速传输性能,请不要修改 SDIO_PAD 数组。
github source code
TBD
github source code
TBD
github source code
TBD
github source code
sdioh_config
用户通过修改结构体 sdioh_config 中各成员的数值,可以配置 SD Host 的不同参数,包括传输速度,总线宽度和功能引脚。
SDIOHCFG_TypeDef sdioh_config = {
.sdioh_bus_speed = SD_SPEED_HS, //SD_SPEED_DS or SD_SPEED_HS
.sdioh_bus_width = SDIOH_BUS_WIDTH_4BIT, //SDIOH_BUS_WIDTH_1BIT or SDIOH_BUS_WIDTH_4BIT
.sdioh_cd_pin = _PC_0, // _PC_0 or _PNC
.sdioh_wp_pin = _PNC, //_PB_31 or _PNC
};
ameba_pinmapcfg
本节介绍了初始化阶段由 pinmap_init() 配置的每个引脚的上下拉状态。
github source code
pmap_func
pmap_func 数组主要用来配置每个 pin 的上下拉状态:
由
Func PU/PD控制 SOC Active 时 pin 默认的上下拉状态,在main()或者后续的任务中,需要根据具体 IP 的需求设置 SOC Active 时 pin 的上下拉状态;由
Slp PU/PD控制 SOC Sleep 时的上下拉状态,如果设置不对,在睡眠时该 pin 会有漏电流产生,请根据硬件状态修改。
const PMAP_TypeDef pmap_func[] = {
//Pin Name Func PU/PD Slp PU/PD
{_PA_0, GPIO_PuPd_UP, GPIO_PuPd_UP},
{_PA_1, GPIO_PuPd_UP, GPIO_PuPd_UP},
{_PA_2, GPIO_PuPd_KEEP, GPIO_PuPd_UP},
...
};
github source code
pmap_func
pmap_func 数组主要用来配置每个 pin 的上下拉状态:
由
Func PU/PD控制 SOC Active 时 pin 默认的上下拉状态,在main()或者后续的任务中,需要根据具体 IP 的需求设置 SOC Active 时 pin 的上下拉状态;由
Slp PU/PD控制 SOC Sleep 时的上下拉状态,如果设置不对,在睡眠时该 pin 会有漏电流产生,请根据硬件状态修改。
const PMAP_TypeDef pmap_func[] = {
//Pin Name Func PU/PD Slp PU/PD
{_PA_0, GPIO_PuPd_UP, GPIO_PuPd_UP},
{_PA_1, GPIO_PuPd_UP, GPIO_PuPd_UP},
{_PA_2, GPIO_PuPd_KEEP, GPIO_PuPd_UP},
...
};
github source code
pmap_func
pmap_func 数组主要用来配置每个 pin 的上下拉状态:
由
Func PU/PD控制 SOC Active 时 pin 默认的上下拉状态,在main()或者后续的任务中,需要根据具体 IP 的需求设置 SOC Active 时 pin 的上下拉状态;由
Slp PU/PD控制 SOC Sleep 时的上下拉状态,如果设置不对,在睡眠时该 pin 会有漏电流产生,请根据硬件状态修改。
const PMAP_TypeDef pmap_func[] = {
//Pin Name Func PU/PD Slp PU/PD
{_PA_0, GPIO_PuPd_UP, GPIO_PuPd_UP},
{_PA_1, GPIO_PuPd_UP, GPIO_PuPd_UP},
{_PA_2, GPIO_PuPd_KEEP, GPIO_PuPd_UP},
...
};
github source code
pmap_func
pmap_func 数组主要用来配置每个 pin 的上下拉状态:
由
Func PU/PD控制 SOC Active 时 pin 默认的上下拉状态,在main()或者后续的任务中,需要根据具体 IP 的需求设置 SOC Active 时 pin 的上下拉状态;由
Slp PU/PD控制 SOC Sleep 时的上下拉状态,如果设置不对,在睡眠时该 pin 会有漏电流产生,请根据硬件状态修改。
const PMAP_TypeDef pmap_func[] = {
//Pin Name Func PU/PD Slp PU/PD
{_PA_0, GPIO_PuPd_UP, GPIO_PuPd_UP},
{_PA_1, GPIO_PuPd_UP, GPIO_PuPd_UP},
{_PA_2, GPIO_PuPd_KEEP, GPIO_PuPd_UP},
...
};
github source code
pmap_func
pmap_func 数组主要用来配置每个 pin 的上下拉状态:
由
Func PU/PD控制 SOC Active 时 pin 默认的上下拉状态,在main()或者后续的任务中,需要根据具体 IP 的需求设置 SOC Active 时 pin 的上下拉状态;由
Slp PU/PD控制 SOC Sleep 时的上下拉状态,如果设置不对,在睡眠时该 pin 会有漏电流产生,请根据硬件状态修改。
const PMAP_TypeDef pmap_func[] = {
//Pin Name Func PU/PD Slp PU/PD
{_PA_0, GPIO_PuPd_UP, GPIO_PuPd_UP},
{_PA_1, GPIO_PuPd_UP, GPIO_PuPd_UP},
{_PA_2, GPIO_PuPd_KEEP, GPIO_PuPd_UP},
...
};
ameba_sleepcfg
参考 低功耗开发者配置 章节获取低功耗配置详细信息。
ameba_wificfg
参考 Wi-Fi 开发者配置 章节获取 Wi-Fi 配置详细信息。