注意

这是最新开发分支配套的文档,可能包含已发布版本中尚未提供的功能。如果您要查看特定版本的文档,请使用左侧的下拉菜单并选择所需要的版本。

K230 Linux SDK 新板子适配指南#

文档目的#

本文介绍如何为 K230 Linux SDK 适配非官方支持的设备。


基于已有配置适配(推荐)#

选一个与目标板子硬件配置相近的配置,直接修改相关文件即可。本章节以 k230_canmv_01studio_defconfig 为例。

01studio 主配置文件#

项目

说明

文件路径

buildroot-overlay/configs/k230_canmv_01studio_defconfig

功能

SDK 配置文件,可使能软件包、配置 rootfs 大小、配置 U-Boot 和内核使用的配置文件等

修改方法

直接修改,或执行 make menuconfig; make savedefconfig 进行修改

生效方法

make CONF=k230_canmv_01studio_defconfig ; make

关键配置项说明

BR2_LINUX_KERNEL_DEFCONFIG="k230"  # 内核默认配置文件 k230_defconfig
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/canaan/k230-soc/fragment/linux.fragment"  # 内核配置追加文件
BR2_LINUX_KERNEL_INTREE_DTS_NAME="canaan/k230-canmv-01studio-lcd canaan/k230-canmv-01studio"  # 内核设备树
BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="board/canaan/k230-soc/fragment/busybox.fragment"  # BusyBox 配置文件
BR2_TARGET_UBOOT_BOARDNAME="k230_canmv_01studio"  # U-Boot 使用的配置文件
BR2_TARGET_ROOTFS_EXT2_SIZE="400M"  # rootfs 大小

U-Boot 下关键文件#

U-Boot 配置文件#

项目

说明

文件路径

buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/configs/k230_canmv_01studio_defconfig

修改方法

手动修改,或执行 cd output/k230_canmv_01studio_defconfig/build/uboot-2022.10; make menuconfig; cp .config ../../../../buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/configs/k230_canmv_01studio_defconfig; cd -

生效方法

make

关键配置项说明:

CONFIG_DEFAULT_DEVICE_TREE="k230_canmv_01studio"  # 配置使用的设备树文件
CONFIG_CANMV_01STUDIO_LPDDR4_2667=y  # DDR 类型和频率
CONFIG_TARGET_K230_CANMV_01STUDIO=y  # 01studio 开发板

U-Boot 设备树#

项目

说明

文件路径

buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/arch/riscv/dts/k230_canmv_01studio.dts

备注

CONFIG_DEFAULT_DEVICE_TREE 决定使用那个设备树

生效方法

make

关键代码说明:

// BANK 电压设置必须与板子硬件匹配,否则可能永久损坏设备
#define BANK_VOLTAGE_IO0_IO1  K230_MSC_1V8  // FIXED
#define BANK_VOLTAGE_IO2_IO13  K230_MSC_3V3
#define BANK_VOLTAGE_IO14_IO25  K230_MSC_3V3
#define BANK_VOLTAGE_IO26_IO37  K230_MSC_3V3
#define BANK_VOLTAGE_IO38_IO49  K230_MSC_3V3
#define BANK_VOLTAGE_IO50_IO61  K230_MSC_3V3
#define BANK_VOLTAGE_IO62_IO63  K230_MSC_1V8

// IOMUX 功能配置,根据板子实际情况调整
// SEL 域选择 IOMUX 功能,参考:附录 A
(IO2) (1<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 1<<OE | 0<<PU | 0<<PD | 4<<DS | 0<<ST)
(IO3) (3<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 1<<OE | 0<<PU | 0<<PD | 4<<DS | 0<<ST)
(IO4) (3<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 1<<OE | 0<<PU | 0<<PD | 4<<DS | 0<<ST)
(IO5) (1<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 1<<OE | 0<<PU | 0<<PD | 4<<DS | 0<<ST)
(IO6) (1<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 1<<OE | 0<<PU | 0<<PD | 4<<DS | 0<<ST)

注意:IOMUX 配置请参考 附录 A:IOMUX 引脚配置说明

U-Boot Board 目录#

项目

说明

目录路径

buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/board/canaan/k230_canmv_01studio/

修改方法

直接修改

生效方法

make

关键文件说明:

  • board.c:板级初始化文件

    sysctl_boot_mode_e sysctl_boot_get_boot_mode(void)
    {
        return SYSCTL_BOOT_SDIO0;  // 强制从 MMC0 启动
    }
    
  • lpddr4_init_32_swap_2667.c:DDR4 初始化代码


Linux 关键文件#

Linux 设备树#

项目

说明

文件路径

output/k230_canmv_01studio_defconfig/build/linux-*/arch/riscv/boot/dts/canaan/k230-canmv-01studio*.dts

修改方法

直接修改

生效方法

make linux-rebuild && make

其他说明

编译一遍后才会生成;文件名带 lcd 表示使用 LCD 显示,不带 lcd 表示使用 HDMI 显示

关键配置片段:

aliases {
    serial3 = &uart3;  // 定义设备号
    i2c0 = &i2c4;      // 定义设备号
    i2c1 = &i2c3;
    mmc0 = &mmc_sd0;   // 定义设备号
    mmc1 = &mmc_sd1;
};

&usb1 {
    dr_mode = "host";  // 强制为 host 模式
    status = "okay";   // 使能 USB1
};

内核配置文件修改#

方法一:直接在 board/canaan/k230-soc/fragment/linux.fragment 中添加需要的内核配置。

方法二:执行以下命令修改内核配置:

make linux-menuconfig;
make linux-savedefconfig;
cp output/k230_test_defconfig/build/linux-*/defconfig buildroot-overlay/board/canaan/k230-soc/fragment/linux.fragment;

修改完后生效办法:make linux-reconfigure;make


全新适配(不推荐)#

提示:不建议本方法,推荐直接使用已有的配置并进行修改。

添加主配置文件#

buildroot-overlay/configs/ 目录下创建配置文件(以 k230_test_defconfig 为例):

cd buildroot-overlay/configs/
cp k230_canmv_01studio_defconfig k230_test_defconfig
cd ../../
make CONF=k230_test_defconfig

U-Boot 适配#

Step 1:添加板级目录#

cd buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/board/canaan/
cp k230_canmv_01studio k230_test -r
cd -

Step 2:修改 Kconfig#

  • buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/arch/riscv/Kconfig 中添加:

#buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/arch/riscv/Kconfig文件
#大概50行附近
config TARGET_K230_TEST
    bool "Support TEST BOARD"
    select SYS_CACHE_SHIFT_6

#大概112行附近
source "board/canaan/k230_test/Kconfig"
  • 修改 board/canaan/k230_test/Kconfig 文件, 将 TARGET_K230_CANMV_01STUDIO 替换为 TARGET_K230_TEST,类似如下:

if TARGET_K230_TEST
#......
config SYS_BOARD
    default "k230_test"
#......
endif

Step 3:新增并修改uboot设备树#

  • 新增设备树:

cd buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/arch/riscv/dts/
cp k230_canmv_01studio.dts k230_test.dts
cd -
  • 修改设备树,关键修改点如下

// BANK 电压设置必须与板子设计一致,错误配置可能导致芯片损坏
#define BANK_VOLTAGE_IO0_IO1           K230_MSC_1V8  // FIXED
#define BANK_VOLTAGE_IO2_IO13          K230_MSC_3V3
#define BANK_VOLTAGE_IO14_IO25         K230_MSC_3V3
#define BANK_VOLTAGE_IO26_IO37         K230_MSC_3V3
#define BANK_VOLTAGE_IO38_IO49         K230_MSC_3V3
#define BANK_VOLTAGE_IO50_IO61         K230_MSC_3V3
#define BANK_VOLTAGE_IO62_IO63         K230_MSC_3V3
#include "k230.dtsi"

&mmc0 {
    1-8-v;          // 配置 MMC0 为 1.8V IO
    status = "okay";
};

&mmc1 {
    status = "okay";
};

&iomux {
    pinctrl-names = "default";
    pinctrl-0 = <&pins>;

    pins: iomux_pins {
        u-boot,dm-pre-reloc;
        pinctrl-single,pins = <
            (IO2)  (1<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 0<<OE | 0<<PU | 1<<PD | 4<<DS | 1<<ST)
            (IO63) (0<<SEL | 0<<SL | BANK_VOLTAGE_IO62_IO63<<MSC | 1<<IE | 1<<OE | 0<<PU | 0<<PD | 7<<DS | 1<<ST)
        >;
    };
};

注意:IOMUX 配置请参考 附录 A:IOMUX 引脚配置说明

Step 4:添加修改uboot配置文件#

  • 添加配置文件

cd buildroot-overlay/boot/uboot/u-boot-2022.10-overlay/configs/
cp k230_canmv_01studio_defconfig k230_test_defconfig
cd -
  • 修改配置项,关键修改点:

CONFIG_DEFAULT_DEVICE_TREE="k230_test"
CONFIG_TARGET_K230_TEST=y
CONFIG_CANMV_01STUDIO_LPDDR4_2667=y

Step 5:修改 SDK 配置#

修改 buildroot-overlay/configs/k230_test_defconfig 文件: 把BR2_TARGET_UBOOT_BOARDNAME修改为”k230_test”

BR2_TARGET_UBOOT_BOARDNAME="k230_test"

Step 6:编译验证#

# 进入 SDK 主目录执行以下命令
make k230_test_defconfig
make uboot-dirclean
make uboot

Linux 适配#

Step 1:新增设备树#

cd output/k230_test_defconfig/build/linux-*/arch/riscv/boot/dts/canaan/
cp k230-canmv-01studio.dts k230-test.dts
cd -

关键配置示例:

aliases {
    serial3 = &uart3;
    i2c0 = &i2c4;
    i2c1 = &i2c3;
    mmc0 = &mmc_sd0;
    mmc1 = &mmc_sd1;
};

&usb1 {
    dr_mode = "host";
    status = "okay";
};

&mmc_sd0 {
    status = "okay";
    io_fixed_1v8;           // 配置 MMC0 为 1.8V IO
    rx_delay_line = <0x0d>;
    tx_delay_line = <0x40>;
};

Step 2:切换设备树#

修改 buildroot-overlay/configs/k230_test_defconfig: 把BR2_LINUX_KERNEL_INTREE_DTS_NAME修改为”canaan/k230-test”

BR2_LINUX_KERNEL_INTREE_DTS_NAME="canaan/k230-test"

Step 3:内核配置文件修改#

参考上述 内核配置文件修改 章节。


开发板 OTP烧写#

OTP说明#

K230/K230D内部集成了一次性可编程器件OTP(One Time Programmable)。此器件可存储MAC、启动参数等永久绑定信息,通常我们把启动配置存储其中。

!!!如果烧录了错误的 OTP 或者固件的电压配置不匹配硬件配置有可能导致烧坏芯片!!!

根据硬件设置自动生成OTP配置bin文件#

嘉楠提供了便捷的图形化WEB界面,自动生成OTP配置bin文件。在此过程中,务必与硬件工程师充分沟通,明确硬件设置以及电压设置等关键信息。

配置工具连接:OTP配置工具

otp_tool

生成 bin 文件时,需依据硬件电路图仔细挑选相应配置:

  • BOOT ROM打印使用的UART IOMUX:此选项用于选定 BOOT log 输出的串口(建议优先选择 UART0)

  • BOOT ROM打印使用的UART电压:BOOT输出串口所采用的电压

  • OSPI IO电压:OSPI域的电压

  • SDIO0 IO电压:MMC0域的电压

  • SDIO1 IOMUX:MMC1选择的引脚

  • SDIO1 IO电压:MMC1域的电压

以01Studio开发板原理图为例,可以根据这些部分确定选项:

1740391481653

1740391571191

1740391632742

1740391686205 根据上述信息01studio的otp配置应该如下 01studio

特别提醒:务必与硬件工程师反复核对配置的准确性。一旦配置错误并进行烧写操作,极有可能导致芯片永久性损坏,无法修复!

完成上述配置后,点击 “生成配置文件” 按钮,即可生成一个 bin 文件,示例如下:

1740392534136

如果界面提示”设置和默认配置一致,无需生成配置文件”,说明默认otp就可以工作,不需要重新烧录otp,请跳过OTP烧写章节。

烧写OTP bin文件#

烧写工具下载链接:勘智开发者社区-资料下载

请根据您所使用的操作系统,选择对应的版本进行下载。同时,务必注意:在未完成OTP烧录之前,切勿给开发板长时间供电,以免出现芯片烧坏情况。

1740392907598

给芯片接通电源,连接好 UART0 接口,打开 BurningTool 软件,选择先前生成的 bin 文件:

1740396173639

点击 “开始” 按钮,耐心等待烧录过程结束:

1740469056238

烧录完成后,点击 “确认” 即可。


附录 A:IOMUX 引脚配置说明#

本章节描述uboot下iomux配置 linux下iomux请参考K230 linux IOMUX 指南

配置原则#

  • IOMUX 配置需参考板子原理图和 iomux 表

  • 未使用的引脚建议配置为 GPIO,避免功能冲突

配置参数说明#

以下以 IO7 配置为 I2C4_SCL 为例:

(IO7) (2<<SEL | 0<<SL | BANK_VOLTAGE_IO2_IO13<<MSC | 1<<IE | 1<<OE | 1<<PU | 0<<PD | 7<<DS | 1<<ST)

参数

说明

示例

SEL

功能号选择,从 0 开始(iomux 表中 Function Number - 1)

I2C4_SCL 对应 2<<SEL

SL

输出翻转率控制,仅 IO0/IO1 单电压 PAD 可配置

0<<SL

MSC

工作电压配置,必须与板子 BANK 供电一致

BANK_VOLTAGE_IO2_IO13<<MSC

IE

输入使能,0 表示输入方向无效

1<<IE

OE

输出使能,0 表示输出方向无效

1<<OE

PU

上拉配置,I2C 等总线建议开启

1<<PU

PD

下拉配置,与功能需求相关

0<<PD

DS

驱动强度配置,IO2~IO63 均为双电压 PAD(16 驱)

7<<DS

ST

施密特触发器配置,一般配置为 1

1<<ST

Pull Resistor

Drive Strength

Voltage Levels

驱动强度说明#

  • 单电压 PAD:8 驱,3bit 有效,取值范围 0x0~0x7

  • 双电压 PAD (IO2~IO63):16 驱,4bit 有效,取值范围 0x0~0xF

评论列表
条评论
登录