参数配置
Luban-Lite 中含有 BootLoader 和 RTOS 两个固件的编译配置,以 D12x 产品线为例,如下所示:
-
d12x_demo68-nor-xip_rt-thread_helloworld_defconfig
-
d12x_demo68-nor-xip_baremetal_bootloader_defconfig
本节以 D12x 编译配置为例演示了 NOR 方案切换 XIP 方案的配置步骤,演示过程中使用了下列环境以供参考:
-
SDK版本:Luban-lite V1.2.1
-
开发板:D12x demo68 nor
- 方案配置:d12x_demo68-nor_rt-thread_helloworld_defconfig
执行如下配置流程:
- 在工程根目录选中d12x_demo68-nor_rt-thread_helloworld_defconfig 方案。
- 执行 scons --menuconfig命令进入 menuconfig 的功能配置界面。
- 在 BootLoader 配置选项中,使能 xip_boot 命令。注:
由于 XIP 启动依赖 NOR Flash,
[*] XIP Boot与[ ] NOR Boot只能二选一。BootLoader options ---> Commands ---> [ ] NOR Boot [*] XIP Boot - 进入 RTOS 配置选项,关闭 SPI NOR
驱动:
Board options ---> [ ] SPI0 Devices: SPINOR ---- Rt-Thread options ---> RT-Thread Components ---> [ ] FAL: flash abstraction layer ---- Device Drivers ---> [ ] Using SFUD(Serial Flash Universal Driver) Drivers options ---> Peripheral ---> [ ] SPINOR Driver SFUD: Serial Flash Universal Driver ---- - 在 RTOS 配置选项中,关闭 Littlefs 文件系统:注: XIP 模式下,Flash 无法写入,可以关闭 Littlefs。
Local packages options ---> Third-party packages options ---> [ ] Littlefs: A high-integrity embedded file system ---- Application options ---> [ ] Using File System Image 1 ---- - 配置 RAMDISK,将 rodata 目录映射到 ramdisk中,使 LVGL
能访问图片素材等资源文件。
Local packages options ---> Third-party packages options ---> [*] ramdisk: A RAM memory block device. ---> RAMDISK type (Create RAMDISK from initial data) ---> (rodata) RAMDISK initial device name Application options ---> (/ram/lvgl_data) LVGL Resource Directory - 配置 XIP 相关参数:
XIP 起始地址的计算公式为:os 分区在 Flash 的偏移地址 + I TB 头部大小 0x800:Board options ---> Mem Options ---> [*] Enable XIP XIP parameter ---> (0x100800) XIP fw start addr警告: XIP 模式下,XIP 地址段为只读属性,不可以写 XIP 地址。关于详细说明,可查看注意事项。
根据分区表得知,os 分区在 Flash 上的偏移地址是 1 MB(512K+128K+128K+256K),则此处 XIP 起始地址应填写0x100800, 可以删除 data 分区。
- 查看测试 LOG,示例如下:

注意事项
在 XIP 模式下, XIP 地址段为只读属性,不可写入,若因为编码问题对 XIP
地址进行写入操作,可能造成不可预知异常,需要严格规范代码。需要检查以下修改是否合入,未合入需要手动修改:
bsp/artinchip/hal/cmu/aic_hal_clk.c | 8 +------- bsp/artinchip/include/hal/aic_hal_clk_cmu.h | 2 -- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/bsp/artinchip/hal/cmu/aic_hal_clk.c b/bsp/artinchip/hal/cmu/aic_hal_clk.c index 1362682cc..a0c912769 100644 --- a/bsp/artinchip/hal/cmu/aic_hal_clk.c +++ b/bsp/artinchip/hal/cmu/aic_hal_clk.c @@ -22,7 +22,6 @@ int hal_clk_enable_deassertrst(uint32_t clk_id) cfg->ops->enable_clk_deassert_rst != NULL, -EINVAL); - cfg->enable = 1; return (cfg->ops->enable_clk_deassert_rst(cfg)); } @@ -37,7 +36,6 @@ int hal_clk_disable_assertrst(uint32_t clk_id) cfg->ops->disable_clk_assert_rst != NULL, -EINVAL); - cfg->enable = 0; cfg->ops->disable_clk_assert_rst(cfg); return 0; } @@ -52,7 +50,6 @@ int hal_clk_enable(uint32_t clk_id) CHECK_PARAM(cfg != NULL && cfg->ops != NULL && cfg->ops->enable != NULL, -EINVAL); - cfg->enable = 1; return (cfg->ops->enable(cfg)); } @@ -66,8 +63,6 @@ int hal_clk_disable(uint32_t clk_id) CHECK_PARAM(cfg != NULL && cfg->ops != NULL && cfg->ops->disable != NULL, -EINVAL); - cfg->enable = 0; - cfg->ops->disable(cfg); return 0; } @@ -84,8 +79,7 @@ int hal_clk_is_enabled(uint32_t clk_id) if (cfg->ops->is_enabled == NULL) { parent_clk_id = hal_clk_get_parent(clk_id); - cfg->enable = hal_clk_is_enabled(parent_clk_id); - return cfg->enable; + return hal_clk_is_enabled(parent_clk_id); } return (cfg->ops->is_enabled(cfg)); } diff --git a/bsp/artinchip/include/hal/aic_hal_clk_cmu.h b/bsp/artinchip/include/hal/aic_hal_clk_cmu.h index 8c99a33fb..34ae8d1fb 100644 --- a/bsp/artinchip/include/hal/aic_hal_clk_cmu.h +++ b/bsp/artinchip/include/hal/aic_hal_clk_cmu.h @@ -14,7 +14,6 @@ extern "C" { struct aic_clk_comm_cfg { struct aic_clk_ops *ops; const char *name; - bool enable; }; struct aic_clk_fixed_rate_cfg { @@ -154,7 +153,6 @@ struct aic_clk_ops { .id = _id, \ .parent_id = 0, \ .rate = _rate, \ - .comm.enable = 1, \ .comm.ops = &aic_clk_fixed_rate_ops, \ .comm.name = _name, \ } -- 2.25.1
支持 XIP 的 Flash 型号
| 器件型号 | 品牌 | 容量 (B) | JEDEC ID |
D13x/D12x XIP启动支持 |
|---|---|---|---|---|
| GD25Q128EWIG | GigaDevice(兆易) | 16M | 0xC84018 | 是 |
| GD25Q128ESIGR | GigaDevice(兆易) | 16M | 0xC84018 | 是 |
| GD25Q64ESIGR | GigaDevice(兆易) | 8M | 0xC84017 | 是 |
| ZB25VQ128ASIG | Zbit(恒烁) | 16M | 0x5e4018 | 是 |
| ZB25VQ64ASIG | Zbit(恒烁) | 8M | 0x5e4017 | 是 |
| ZB25VQ32DSJG | Zbit(恒烁) | 4M | 0x5e4016 | 是 |
| XT25F128BSSIGT | XTX(芯天下) | 16M | 0x0B4018 | 是 |
| XT25F64BSOIGT-S | XTX(芯天下) | 8M | 0x0B4017 | 是 |
| BY25Q128ASSIG | BOYAMICRO(博雅) | 16M | 0x684018 | 是 |
| BY25Q64ASSIG | BOYAMICRO(博雅) | 8M | 0x684017 | 是 |
| W25Q128JVSIQ | WINBOND(华邦) | 16M | 0xef4018 | 是 |
| W25Q64JVSSIQ | WINBOND(华邦) | 8M | 0xef4017 | 是 |
| FM25Q64-DNA-T-G | FM(复旦微) | 8M | 0xA14017 | 是 |
| ZD25Q64BSIGT | Zetta(澜智) | 8M | 0xBA16 | 是 |
