【Milk-V Duo 开发板免费体验】驱动ST7789V屏幕

1,修改dts文件

build/boards/cv180x/cv1800b_milkv_duo_sd/dts_riscv/cv1800b_milkv_duo_sd.dts

添加如下内容:

&spi2 {
	status = "okay";
	/delete-node/ spidev@0; //两个选择,要么写这个,要么改st7789里的reg
	st7789v: st7789v@0{
		compatible = "sitronix,st7789v"; //驱动名
		reg = <0>;
		status = "okay";
		spi-max-frequency = <48000000>;
		spi-cpol;
		spi-cpha;
		rotate = <0>; //旋转,我不转就竖屏
		fps = <60>;
		rgb;
		buswidth = <8>;
		dc = <&porta 24 GPIO_ACTIVE_HIGH>; //配置连接dc线的管脚,对应上一节的pinmux配置
		reset = <&porta 23 GPIO_ACTIVE_HIGH>; //配置连接reset线的管脚
		debug = <0x0>;
	};
};

2,修改

build/boards/default/dts/cv180x/cv180x_base.dtsi

spi2:spi2@041A0000 {
		compatible = "snps,dw-apb-ssi";
		reg = <0x0 0x041A0000 0x0 0x10000>;
		clocks = <&clk CV180X_CLK_SPI>;
		#address-cells = <1>;
		#size-cells = <0>;
		bias-pull-up; //添加这个地方,作用是上拉
	};

3,打开内核驱动

首先我们需要需要知道用到的那些东西,这里我们用到了spi,fb_tft,st7789v等这些,我们需要去内核里面去使能这些驱动。

首先我们先配置好板子和环境变量:

export MILKV_BOARD=milkv-duo
source milkv/boardconfig-milkv-duo.sh
source build/milkvsetup.sh
defconfig cv1800b_milkv_duo_sd

然后在sdk目录直接执行

menuconfig_kernel

我们会进入如下界面

我们直接在这个节目按下/然后直接输入SPI搜索,看开关是否打开,可以直接按数字键盘的数字进入对应的选项进去看一下详细信息,如果没有则打开之

我们一共需要打开以下配置:

CONFIG_SPI=y
CONFIG_SPI_MASTER=y
CONFIG_SPI_DESIGNWARE=y
CONFIG_SPI_DW_MMIO=y
CONFIG_SPI_SPIDEV=y
CONFIG_FB=y
CONFIG_FB_TFT=y
CONFIG_FB_TFT_ST7789V=y

所有项都检查完毕后就可以保存退出了

4,内核这边都配置完毕了,我们还需要配置一下管脚

u-boot-2021.10/board/cvitek/cv180x/board.c

int board_init(void) 函数里面将:

//pinmux_config(PINMUX_SPI2); 
cvi_board_init();

修改为

pinmux_config(PINMUX_SPI2); 
PINMUX_CONFIG(SPINOR_CS_X, XGPIOA_24); //添加,这里的默认管脚功能并不是GPIO,修改之
PINMUX_CONFIG(SPINOR_MISO, XGPIOA_23); //添加,这里也一样
cvi_board_init();

接下来就可以执行以下命令进行编译了:

build_all

编译完成后使用命令:

find ./ -name "fb_st7789v.ko"

就可以看到已经生成了.ko文件了

5,现在我们可以把img烧录到内存卡里启动系统了,这里我们使用一个官方的工具查看一下我们使用的IO是否设置正确了。

一,下载工具包

二,通过通过scp或其他方式传到Duo上

scp cvi_pinmux.tar.gz root@192.168.42.1:/root/

在Duo终端中解压安装(会安装到/usr/bin目录下) :

tar zxf cvi_pinmux.tar.gz -C /

查看当前所有IO信息

cvi_pinmux -l

查询某个引脚当前的配置:

cvi_pinmux -r SD1_D0

设置某个引脚当前的配置:

cvi_pinmux -w SD1_D0/SPI2_SDI

到目前,已经可以在dev下面看到fb0设备了,spi节点也出来了。


但是用cvi_pinmux读取io状态发现还是普通io,并没有设置为spi,屏幕也无法控制,用万用表测量spi的io发现也是没有变化的,到这里就卡住了,不知道是那边出了问题,还请知道的同学告知一下,我会继续完成这个帖子。

本文转载自:https://bbs.elecfans.com/jishu_2368170_1_1.html,作者:陈仕祥