Need help for drive the ST7789 170x320 1.9inch SPI display求助屏幕驱动

IMG_9457|375x500
这是一块ST7789驱动的170x320 1.9寸的屏幕,因为大小跟milkv duo很搭配所以一直想用这个屏幕做点东西
我跟着官方文档还有论坛几篇教程,成功点亮屏幕。
dmeg|grep ST7789 也有输出识别信息,/dev下能识别fb0
cat /dev/random >/dev/fb0 cat /dev/zero/random 可以清屏和雪花屏
但是如果each “helloworld” >/dev/fb0 就只能看到窄边部位一些像素在变动
因为默认的ST7789驱动文件分辨率是240X320,如果我改动分辨率为170x320就会出现图中有一块白色屏幕的区域。是不是还需要改动其他地方呢?
我也尝试配置开机console 屏幕输出,但是都不成功。

各位大佬可以指导一下应该怎样正确点亮这个屏幕吗?谢谢

你好,

我们下周看一下,然后把它写到文档里

抱歉,迟了回复,我查看了资料,发现列偏移量不是从0开始的,是从35开始的,你可以修改一下列偏移量。

谢谢回复,请问驱动文件我这样改对吗?

static int init_display(struct fbtft_par *par)
{
par->fbtftops.reset(par);
mdelay(50);
write_reg(par, 0x36, 0x00);
write_reg(par, 0x3A, 0x05);
write_reg(par, 0xB2, 0x0C, 0x0C, 0x00, 0x33, 0x33);
write_reg(par, 0xB7, 0x35);
write_reg(par, 0xBB, 0x19);
write_reg(par, 0xC0, 0x2C);
write_reg(par, 0xC2, 0x01);
write_reg(par, 0xC3, 0x12);
write_reg(par, 0xC4, 0x20);
write_reg(par, 0xC6, 0x0F);
write_reg(par, 0xD0, 0xA4, 0xA1);
write_reg(par, 0xE0, 0xD0, 0x04, 0x0D, 0x11, 0x13, 0x2B, 0x3F, 0x54, 0x4C, 0x18, 0x0D, 0x0B, 0x1F, 0x23);
write_reg(par, 0xE1, 0xD0, 0x04, 0x0C, 0x11, 0x13, 0x2C, 0x3F, 0x44, 0x51, 0x2F, 0x1F, 0x1F, 0x20, 0x23);
write_reg(par, 0x21);
write_reg(par, 0x11);
mdelay(50);
write_reg(par, 0x29);
mdelay(200);

// 设置列地址范围 (x 起始位置, x 结束位置)
write_reg(par, 0x2A, 0x00, 0x23, 0x00, 0xCC);  // 起始位置 35 (0x23), 结束位置 204 (170 + 35 - 1 = 204 = 0xCC)

// 设置行地址范围 (y 起始位置, y 结束位置)
write_reg(par, 0x2B, 0x00, 0x00, 0x01, 0x3F);  // 320 - 1 = 319, 319 = 0x13F

return 0;

}

我按上面改了 屏幕还是不能正常显示

+ 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>; + reset = <&porta 23 GPIO_ACTIVE_HIGH>; + + debug = <0x0>; + row-offset = <35>; }; 改设备树文件,增加row-offset = <35>; 也不行

https://blog.csdn.net/wdalfred/article/details/135296873,你可以参考一下这位博主的修改,如果还是不行的话,你就按照我们的文档走一下,https://github.com/zwyzwm/TFT-ST7789.git 要使用我们的最新的镜像哈。

我们文档里的是duo s ,所以引脚你需要自己修改一下,然后代码中的
if(wiringXSetup("milkv_duos, NULL) == -1) 这个语句,改为if(wiringXSetup("milkv_duo, NULL) == -1).,将#define SPI_PORT 0改为#define SPI_PORT 2

谢谢大佬回复,你给的第一个链接我之前就有参考,但是那个是使用arduino TFT__eSPI库的,我也不知道duo在那个地方可以修改。
第二个链接,我自己尝试了一下,编译没有问题。引脚没有问题,但是运行出错了
Screenshot 2024-09-03 at 13.34.46
Screenshot 2024-09-03 at 13.35.12
Screenshot 2024-09-03 at 13.34.11
Screenshot 2024-09-03 at 13.33.43

不用define SPI_SLC_PIN和SPI_SDA_PIN ,他由SPI_PORT决定的,然后vcc你要接3.3V的引脚,参考这个网站https://milkv.io/zh/docs/duo/application-development/pinmux,看一下引脚的功能是不是对应上,看一下GP6,GP7的功能是不是spi的,还有确定另外几个引脚是不是没有被复用为其他功能,你有没有修改其他地方??

你也可以试着重新烧个系统。你没跑别的程序吧??

我没跑其他程序,我先试试去写 slc 和sda定义。我每改一次编译一边固件。都是重新烧固件。我用的是dou256,接线是按官网的接。反反复复确认没错的

这个定义不用你写阿,这个你不用管的,你是duo 256,那你把if(wiringXSetup("milkv_duo, NULL) == -1)改成if(wiringXSetup("milkv_duo256m, NULL) == -1),我以为你是duo
,你改了之后应该就可以用了