开发者配置

概述

本章主要介绍在开发过程中需要重点关注和按需修改的各种配置文件。

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 时钟设置流程

  1. 确认 ameba_bootcfg.c 文件中 Boot_SocClk_Info_IdxSocClk_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
    
  2. 由于 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

  3. 必要时,参考以下方法来修改 SoC 时钟:

    • Boot_SocClk_Info_Idx 修改为 [0, sizeof(SocClk_Info)] 范围内的值,然后在 SocClk_Info[Boot_SocClk_Info_Idx] 中自定义时钟配置信息。

    备注

    请充分考虑硬件的限制,避免设置非法的时钟配置参数。

  4. 重新编译工程,并下载新的固件

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_SpeedFlash_ReadMode 或者 Data_Flash_SpeedData_Flash_ReadMode

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 才可以访问。

备注

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 数组。

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},
   ...
};

ameba_sleepcfg

参考 低功耗开发者配置 章节获取低功耗配置详细信息。

ameba_wificfg

参考 Wi-Fi 开发者配置 章节获取 Wi-Fi 配置详细信息。