本次主要参考:
https://gitee.com/li-shan-asked/linux-develop-guide(李山文大佬)
https://space.bilibili.com/483300972/?spm_id_from=333.999.0.0(李山文大佬)
https://community.milkv.io/t/milk-v-duo-spi-st7789/131
液晶屏为1.3寸,SPI接口,IC:ST7789V,分辨率:240*240;其中SCK、SDA引脚需要外部上拉。
液晶屏SPI与milk-v duo的SPI2连接,接线如下:
液晶屏——>milk-v duo
SCK——>GPA23 (第9引脚)
SDA——>GPA22 (第10引脚)
RES——>GPA14 (第19引脚)
DC——>GPA15 (第20引脚)
BLK悬空
在milk-v duo的SDK的目录下,预准备开发环境,参考1、milk-v duo(CV1800B,C906内核)搭建开发环境中的单步编译。
然后打开linux_5.10/drivers/staging/fbtft/fb_st7789v.c文件
修改init_display函数,如下:
static int init_display(struct fbtft_par *par)
{
par->fbtftops.reset(par);
mdelay(50);
write_reg(par,0x11);
write_reg(par,0x3A,0x05);
write_reg(par,0xC5,0x1A);
write_reg(par,0x36,0x00);
write_reg(par,0xB2,0x05,0x05,0x00,0x33,0x33);
write_reg(par,0xB7,0x05);
write_reg(par,0xBB,0x3F);
write_reg(par,0xC0,0x2C);
write_reg(par,0xC2,0x01);
write_reg(par,0xC3,0x0F);
write_reg(par,0xC4,0x20);
write_reg(par,0xC6,0x01);
write_reg(par,0xD0,0xA4,0xA1);
write_reg(par,0xE8,0x03);
write_reg(par,0xE9,0x09,0x09,0x08);
write_reg(par,0xE0,0xD0,0x05,0x09,0x09,0x08,0x14,0x28,0x33,0x3F,0x07,0x13,0x14,0x28,0x30);
write_reg(par,0xE1,0xD0,0x05,0x09,0x09,0x08,0x03,0x24,0x32,0x32,0x3B,0x14,0x13,0x28,0x2F);
write_reg(par,0x21);
write_reg(par,0x11);
mdelay(120);
write_reg(par,0x29);
return 0;
}
修改fbtft_display变量,如下:
static struct fbtft_display display = {
.regwidth = 8,
.width = 240,
.height = 240,
.gamma_num = 2,
.gamma_len = 14,
.gamma = DEFAULT_GAMMA,
.fbtftops = {
.init_display = init_display,
.set_var = set_var,
.set_gamma = set_gamma,
.blank = blank,
},
};
保存并退出。
打开build/boards/cv180x/cv1800b_milkv_duo_sd/dts_riscv/cv1800b_milkv_duo_sd.dts文件
修改SPI2节点,如下
&spi2 {
status = "okay";
spidev@0 {
status = "disabled";
};
st7789v: st7789v@0{
status = "okay";
compatible = "sitronix,st7789v";
reg = <0>;
spi-max-frequency = <80000000>;
rotate = <0>;
spi-cpol;
spi-cpha;
rgb;
fps = <30>;
buswidth = <8>;
reset-gpios = <&porta 14 GPIO_ACTIVE_LOW>;//注意信号,此时表示复位是低信号
dc-gpios = <&porta 15 GPIO_ACTIVE_HIGH>;//注意信号,此时表示数据是高信号
debug = <0>;
};
};
然后执行menuconfig_kernel,按照以下操作:
Device Drivers --->
Character devices --->
[*] Virtual terminal
[*] Support for binding and unbinding console drivers
Device Drivers --->
Graphics support --->
Console display driver support --->
[*] Framebuffer Console support
[*] Map the console to the primary display device
Device Drivers --->
[*] Staging drivers --->
<*> Support for small TFT LCD display modules --->
<*> FB driver for the ST7789V LCD Controller
Library routines --->
[*] Select compiled-in fonts
保存并退出。
然后进入buildroot-2021.05目录,执行以下命令:
cp configs/milkv-duo_musl_riscv64_defconfig .config
然后执行make menuconfig,按照以下操作:
Build options --->
libraries (both static and shared) ---> (选择both static and shared)
System configuration --->
/dev management (Dynamic using devtmpfs + eudev) ---> (选择Dynamic using devtmpfs + eudev)
保存并退出。
然后执行以下命令:
cp .config configs/milkv-duo_musl_riscv64_defconfig
然后返回上一级目录(SDK目录),执行以下命令:
build_all
pack_sd_image
最近重新烧录SD卡,让内核文件放到tftp服务器目录下。
系统重新启动之后,执行以下命令会看到屏幕不同的反应:
cat /dev/random > /dev/fb0 (花屏)
cat /dev/zero > /dev/fb0 (清屏)
echo milk-v duo > /dev/tty0 (显示字符)
ls / > /dev/tty0 (显示根目录)
QQ:763314235,会在第一时间处理。