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 = <&porta24GPIO_ACTIVE_HIGH>;//配置连接dc线的管脚,对应上一节的pinmux配置reset= <&porta23GPIO_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>;bias-pull-up;//添加这个地方,作用是上拉};
3,打开内核驱动
首先我们需要需要知道用到的那些东西,这里我们用到了spi,fb_tft,st7789v等这些,我们需要去内核里面去使能这些驱动。
首先我们先配置好板子和环境变量:
exportMILKV_BOARD=milkv-duosourcemilkv/boardconfig-milkv-duo.shsourcebuild/milkvsetup.sh defconfig cv1800b_milkv_duo_sd
然后在sdk目录直接执行
menuconfig_kernel
我们会进入如下界面
我们直接在这个节目按下/然后直接输入SPI搜索,看开关是否打开,可以直接按数字键盘的数字进入对应的选项进去看一下详细信息,如果没有则打开之
我们一共需要打开以下配置:
CONFIG_SPI=yCONFIG_SPI_MASTER=yCONFIG_SPI_DESIGNWARE=yCONFIG_SPI_DW_MMIO=yCONFIG_SPI_SPIDEV=yCONFIG_FB=yCONFIG_FB_TFT=yCONFIG_FB_TFT_ST7789V=y
所有项都检查完毕后就可以保存退出了
4,内核这边都配置完毕了,我们还需要配置一下管脚
u-boot-2021.10/board/cvitek/cv180x/board.c
在int board_init(void)
函数里面将:
cvi_board_init();
修改为
pinmux_config(PINMUX_SPI2);PINMUX_CONFIG(SPINOR_CS_X, XGPIOA_24);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目录下) :
tarzxf 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发现也是没有变化的,这是因为cvi_board_init
会对io进行初始化,我们需要将里面的初始化屏蔽掉,并且将SPI的初始化放到下面去,如下图所示: