本文來源電子發燒友社區,作者:cszzlsw, 帖子地址:https://bbs.elecfans.com/jishu_2287667_1_1.html
1.前言
前面兩篇帖子咱們回顧了從頭制作系統并運行homeassistant,其中不可謂不辛酸,然后我就在想再做個啥,找了一下自己庫存的外設,有一個tft屏帶觸摸芯片的,一想,這不正好的嘛,可以玩玩圖形編程了,老聽說linux開發板的qt編程咱也沒見過啊,說干就干,這就開始了.
2.移植驅動并首先嘗試
首先我的屏主控是lil9488的,分辨率320*480,據說再往上就得上rgb屏了,這咱沒玩過也不懂,把手頭上這個整明白先.
這個在git倉庫:https://github.com/starfive-tech/freelight-u-sdk,給的linux內核里面找了一圈,也沒見,
然后發現有一個芯片是ili9486的,跟我這差一位數,一想差不多,這個開始弄吧,把文件拷過來,然后改吧:
然后把所有涉及9486的地方都改成9488,
然后是設備樹里面改吧改吧(改了好多次,也是第一次寫設備樹):
這款tft屏除了常規的spi線之外,還有BL(背光BackLight),Reset(復位),DC(Data-Control)線需要接,這里我用的gpio1,2,3腳,
另外最后的那個debug如果不需要就置0,需要就置1.
然后在linux內核里面配置一下,把ili9488加進來:
-> Device Drivers │
│ -> Staging drivers (STAGING [=y]) │
│ -> Support for small TFT LCD display modules (FB_TFT [=y])
然后就是編譯內核,再刪除rootfs,然后再生成rootfs,這都老熟人了,
這些都整完之后,就把卡插上準備燒錄,
然后漫長的等待過程之后,終于燒完了,
緊跟著就把屏接上,按照文檔里介紹的40pin引腳對應接好,
上電,然而,并沒有出現期待中的點亮屏幕,
二.各種解決問題
1.spi沒有設備id問題:
出現這個問題的原因是因為sdk的系統是5.15,屬于是很新的系統了,但是linux里面的驅動幾年都不更新,所以過期了,需要在ili9844里這么改:
2.ili支持888顏色而ili9486是565模式
這里需要改好幾個地方,
首先是ili9488文件里初始化序列里面,把這個值由0x55改成0x66,
然后在ser_var里面添加上888色彩的信息,
然后是display的值,增加一個函數和bbp值:
這里面涉及的這個函數:fbtft_write_vmem24_bus8就是寫入像素信息的
這個函數需要放到fbtft-core.c里,放文件最后也行
fbtft-core.c文件還需要修改fbtft_framebuffer_alloc函數的幾個地方:
3.修改fbtft-core.c里面的幾個函數,
首先是:fbtft_request_one_gpio:
復制代碼
然后是fbtft_request_gpios:
復制代碼
最后是fbtft_reset:
復制代碼
這里主要是那個復位腳重啟一下,原來的是把cs腳使能,不知道為什么是這樣
燒錄之后如果不能顯示,可以嘗試把系統原來的顯示去掉(不知道有沒有作用,可以試下,我實驗過程中去掉了):
大概主要碰到的問題就是這些吧,可能有些忘記了,想起來的時候再添加.
三.顯示logo,
這里需要修改linux配置,配置這個參數,這個就是顯示logo的
-> Device Drivers │
│ -> Graphics support │
│ -> Bootup logo (LOGO [=y])
效果看一看(后面有時間換成咱們賽昉的logo試試):
如果還想把終端的打印信息在屏幕上顯示出來,就配置這個
│ -> Device Drivers │
│ -> Graphics support │
│ -> Console display driver support
但是這還不夠,還需要把console額外賦個值,在bootarg那里增加一個參數(這個功能很酷炫,但實際沒什么用,建議不要搞):
這里我們把固件編譯出來試一下是可以將字符顯示在屏幕上的,在linux終端上輸入:
echo hello >/dev/tty0
可以看到hello字符出現在屏幕上了.
四.總結
到這里一款LCD屏幕的移植過程大致就完了,整個步驟其實不是很繁瑣,其實最有意義的是這中間找問題的過程,借此機會大致弄明白了設備數的寫法
也知道了一些驅動方面的知識,后續等tf卡刷方式速度快點再玩了,準備的實驗有觸摸,QT寫界面等等,拭目以待吧.
再次吐槽發燒友的發帖機制,太難受,要趕緊把圖片粘貼功能弄出來
1.前言
前面兩篇帖子咱們回顧了從頭制作系統并運行homeassistant,其中不可謂不辛酸,然后我就在想再做個啥,找了一下自己庫存的外設,有一個tft屏帶觸摸芯片的,一想,這不正好的嘛,可以玩玩圖形編程了,老聽說linux開發板的qt編程咱也沒見過啊,說干就干,這就開始了.
2.移植驅動并首先嘗試
首先我的屏主控是lil9488的,分辨率320*480,據說再往上就得上rgb屏了,這咱沒玩過也不懂,把手頭上這個整明白先.
這個在git倉庫:https://github.com/starfive-tech/freelight-u-sdk,給的linux內核里面找了一圈,也沒見,
然后發現有一個芯片是ili9486的,跟我這差一位數,一想差不多,這個開始弄吧,把文件拷過來,然后改吧:

然后把所有涉及9486的地方都改成9488,
然后是設備樹里面改吧改吧(改了好多次,也是第一次寫設備樹):

這款tft屏除了常規的spi線之外,還有BL(背光BackLight),Reset(復位),DC(Data-Control)線需要接,這里我用的gpio1,2,3腳,
另外最后的那個debug如果不需要就置0,需要就置1.
然后在linux內核里面配置一下,把ili9488加進來:
-> Device Drivers │
│ -> Staging drivers (STAGING [=y]) │
│ -> Support for small TFT LCD display modules (FB_TFT [=y])
然后就是編譯內核,再刪除rootfs,然后再生成rootfs,這都老熟人了,
這些都整完之后,就把卡插上準備燒錄,
然后漫長的等待過程之后,終于燒完了,
緊跟著就把屏接上,按照文檔里介紹的40pin引腳對應接好,
上電,然而,并沒有出現期待中的點亮屏幕,
二.各種解決問題
1.spi沒有設備id問題:
出現這個問題的原因是因為sdk的系統是5.15,屬于是很新的系統了,但是linux里面的驅動幾年都不更新,所以過期了,需要在ili9844里這么改:

2.ili支持888顏色而ili9486是565模式
這里需要改好幾個地方,
首先是ili9488文件里初始化序列里面,把這個值由0x55改成0x66,

然后在ser_var里面添加上888色彩的信息,

然后是display的值,增加一個函數和bbp值:

這里面涉及的這個函數:fbtft_write_vmem24_bus8就是寫入像素信息的
這個函數需要放到fbtft-core.c里,放文件最后也行
fbtft-core.c文件還需要修改fbtft_framebuffer_alloc函數的幾個地方:


3.修改fbtft-core.c里面的幾個函數,
首先是:fbtft_request_one_gpio:
- #include "linux/gpio.h"
- #include "linux/of_gpio.h"
- static int fbtft_request_one_gpio(struct fbtft_par *par,
- const char *name, int index,
- struct gpio_desc **gpiop)
- {
- struct device *dev = par->info->device;
- struct device_node *node = dev->of_node;
- int gpio, flags, ret = 0;
- enum of_gpio_flags of_flags;
- if (of_find_property(node, name, NULL)) {
- gpio = of_get_named_gpio_flags(node, name, index, &of_flags);
- if (gpio == -ENOENT)
- return 0;
- if (gpio == -EPROBE_DEFER)
- return gpio;
- if (gpio < 0) {
- dev_err(dev,
- "failed to get '%s' from DTn", name);
- return gpio;
- }
- //active low translates to initially low
- flags = (of_flags & OF_GPIO_ACTIVE_LOW) ? GPIOF_OUT_INIT_LOW :
- GPIOF_OUT_INIT_HIGH;
- ret = devm_gpio_request_one(dev, gpio, flags,
- dev->driver->name);
- if (ret) {
- dev_err(dev,
- "gpio_request_one('%s'=%d) failed with %dn",
- name, gpio, ret);
- return ret;
- }
- *gpiop = gpio_to_desc(gpio);
- fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' = GPIO%dn",
- __func__, name, gpio);
- }
- return ret;
- }
然后是fbtft_request_gpios:
- static int fbtft_request_gpios(struct fbtft_par *par)
- {
- int i;
- int ret;
- ret = fbtft_request_one_gpio(par, "reset-gpios", 0, &par->gpio.reset);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "dc-gpios", 0, &par->gpio.dc);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "rd-gpios", 0, &par->gpio.rd);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "wr-gpios", 0, &par->gpio.wr);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "cs-gpios", 0, &par->gpio.cs);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "latch-gpios", 0, &par->gpio.latch);
- if (ret)
- return ret;
- for (i = 0; i < 16; i++) {
- ret = fbtft_request_one_gpio(par, "db-gpios", i,
- &par->gpio.db[i]);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "led-gpios", i,
- &par->gpio.led[i]);
- if (ret)
- return ret;
- ret = fbtft_request_one_gpio(par, "aux-gpios", i,
- &par->gpio.aux[i]);
- if (ret)
- return ret;
- }
- return 0;
- }
最后是fbtft_reset:
- static void fbtft_reset(struct fbtft_par *par)
- {
- if (!par->gpio.reset)
- return;
- fbtft_par_dbg(DEBUG_RESET, par, "%s()n", __func__);
- gpiod_set_value_cansleep(par->gpio.reset, 1);
- usleep_range(20, 40);
- gpiod_set_value_cansleep(par->gpio.reset, 0);
- msleep(120);
- gpiod_set_value_cansleep(par->gpio.reset, 1);
- // gpiod_set_value_cansleep(par->gpio.cs, 1);/* Activate chip */
- }
這里主要是那個復位腳重啟一下,原來的是把cs腳使能,不知道為什么是這樣
燒錄之后如果不能顯示,可以嘗試把系統原來的顯示去掉(不知道有沒有作用,可以試下,我實驗過程中去掉了):

大概主要碰到的問題就是這些吧,可能有些忘記了,想起來的時候再添加.
三.顯示logo,
這里需要修改linux配置,配置這個參數,這個就是顯示logo的
-> Device Drivers │
│ -> Graphics support │
│ -> Bootup logo (LOGO [=y])

效果看一看(后面有時間換成咱們賽昉的logo試試):

如果還想把終端的打印信息在屏幕上顯示出來,就配置這個
│ -> Device Drivers │
│ -> Graphics support │
│ -> Console display driver support

但是這還不夠,還需要把console額外賦個值,在bootarg那里增加一個參數(這個功能很酷炫,但實際沒什么用,建議不要搞):
這里我們把固件編譯出來試一下是可以將字符顯示在屏幕上的,在linux終端上輸入:
echo hello >/dev/tty0
可以看到hello字符出現在屏幕上了.
四.總結
到這里一款LCD屏幕的移植過程大致就完了,整個步驟其實不是很繁瑣,其實最有意義的是這中間找問題的過程,借此機會大致弄明白了設備數的寫法
也知道了一些驅動方面的知識,后續等tf卡刷方式速度快點再玩了,準備的實驗有觸摸,QT寫界面等等,拭目以待吧.
再次吐槽發燒友的發帖機制,太難受,要趕緊把圖片粘貼功能弄出來
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
RISC-V
+關注
關注
45文章
2339瀏覽量
46773 -
賽昉科技
+關注
關注
3文章
159瀏覽量
14369
發布評論請先 登錄
相關推薦
賽昉科技RISC-V家庭云解決方案:NAS存儲性能升級,隱私安全雙保障
(VisionFive2)單板計算機,推出全新RISC-V家庭云(NAS)解決方案,為用戶提供高性能、高安全性的私有云存儲服務,滿足家庭及輕量級企業場景需求。方案亮點01高性能硬件支持

預售啟動!昉·星光 2 AI套件正式發布,基于RISC-V構建AI算力
10月24日,昉·星光2(VisionFive2)AI套件正式開啟預售。該套件由中國RISC-V軟硬件生態領導者賽昉科技攜手邊緣人工智能(A

Ubuntu現已適配RISC-V單板計算機Milk-V Mars
近期,Canonical宣布優化的Ubuntu24.04鏡像已可用于RISC-V單板計算機Milk-VMars。Milk-VMars由深圳市群芯閃耀科技有限公司(Milk-V)設計并推

信用卡大小的 RISC-V 單板計算機介紹
信用卡大小的 RISC-V 單板計算機 —— Mars
Mars 由深圳市群芯閃耀科技有限公司(Milk-V)設計并推出,搭載賽
發表于 04-12 16:39
賽昉科技VisionFive 2生態進展雙周報(2.1-2.29)
Image for VisionFive 2)
社區開發者發布4篇【昉·星光 2高性能RISC-V單板計算機體驗】系列文章,內容包括:為U
發表于 02-29 15:45
【昉·星光 2 高性能RISC-V單板計算機體驗】以容器的方式安裝 HomeAssistant
【昉·星光 2 高性能RISC-V單板計算機體驗】以容器的方式安裝 HomeAssistant
下載并啟動容器
HomeAssisatant
發表于 02-21 18:07
【昉·星光 2 高性能RISC-V單板計算機體驗】為 Ubuntu 安裝 Docker 及常用軟件
【昉·星光 2 高性能RISC-V單板計算機體驗】為 Ubuntu 安裝 Docker 及常用軟件
目的
為了更好的利用
發表于 02-21 17:54
【昉·星光 2 高性能RISC-V單板計算機體驗】VisionFive2開箱+安裝Ubuntu
【昉·星光 2 高性能RISC-V單板計算機體驗】VisionFive2開箱+安裝Ubuntu
前言
很感謝賽
發表于 02-21 17:49
昉·星光2 RISC-V單板計算機體驗(三) - SSH連接
昉·星光2 RISC-V單板計算機體驗(三) - SSH連接 一、官方資料 RISC-V官網: [https://rvspace.org]

評論