本文來源電子發燒友社區,作者: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
+關注
關注
48文章
2886瀏覽量
53034 -
賽昉科技
+關注
關注
3文章
181瀏覽量
15552
發布評論請先 登錄
相關推薦
熱點推薦
賽昉科技2025:引領RISC-V駛入數據中心深水區
2025年,是RISC-V從技術走向場景的關鍵一年。賽昉科技始終相信:唯有落地,才能創造真實價值。我們以規模化商用為錨點,推動RISC-V深入數據中心核心、走進千行百業。在此,向您呈上
RISC-V實現數據中心應用突破,賽昉科技BMC芯片重磅亮相
電子發燒友原創 章鷹 近期,在珠海舉辦的RISC-V產業大會上,賽昉科技展示了面向數據中心、邊緣計算及智能終端的全棧產品與成熟應用,其中一款產品引起了記者的注意,這款BMC芯片在11月
2025 RISC-V產業發展大會 | 賽昉科技全景展示規模化商用成果
2025年11月24日,RISC-V產業發展大會在珠海開幕。賽昉科技以“推動RISC-V規模化商用”為核心主題,重點展示了面向數據中心、邊緣
賽昉科技重磅發布新產品,RISC-V實現數據中心規模化商用突破
2025年11月14日,中國香港——賽昉科技隆重發布首款基于RISC-V架構的數據中心管理芯片“獅子山芯”。作為一款具有里程碑意義的產品,“獅子山芯”成功實現了RISC-V在數據中心領
【作品合集】賽昉科技VisionFive 2單板計算機開發板測評
賽昉科技VisionFive 2單板計算機開發板測評作品合集
產品介紹:
昉·星光 2是全球首款集成了3D GPU的高性能量產
發表于 09-04 09:08
5?款?RISC-V?單板計算機測試:性能、基準測試、特性及見解
倘若計算的未來并非被專有架構所壟斷,那會怎樣?想象一下這樣一個世界:開發者和業余愛好者都能利用開源硬件的力量自由地構建、創新和實驗。現在,讓我們走進RISC-V單板計算機(SBC)的世界——一個正在
賽昉科技入駐RuyiSDK開發者社區,雙平臺協同推進RISC-V生態
賽昉科技(StarFive)正式入駐RuyiSDK開發者社區,攜手推動RISC-V技術創新。后續,賽昉科技的技術突破與生態進展將同步在RVs
賽昉科技徐滔:以精準場景牽引,RISC-V搶灘數據中心百萬顆市場
7月16-19日,第五屆RISC-V中國峰會在上海張江科學會堂成功舉辦。國內領先的RISC-V廠商賽昉科技攜多款重磅產品亮相,集中展示自研創新技術和成果。峰會期間,
賽昉科技聯合合見工軟實現國產一致性NoC IP與RISC-V核在大規模網絡中的適配
2025年7月24日——中國RISC-V軟硬件生態領導者賽昉科技與中國數字EDA/IP龍頭企業上海合見工業軟件集團有限公司(簡稱“合見工軟”)共同宣布雙方的突破性技術合作成果。賽
“核心技術突破+關鍵應用支撐”,賽昉加速RISC-V生態突圍
2025RISC-V中國峰會的聚光燈下,賽昉科技亮點紛呈:憑借一系列突破性核心技術及多領域場景化解決方案,為RISC-V生態突圍按下加速“快
【VisionFive 2單板計算機試用體驗】VisionFive 2一個霸氣的游戲機
單板計算機,搭載昉·驚鴻-7110(型號:JH-7110)RISC-V應用處理器,擁有極強的計算能力和圖形處理能力。開源的昉·
發表于 07-13 20:41
【VisionFive 2單板計算機試用體驗】RISC-V架構卡片計算機初體驗
2h........無奈)
參考文獻:
全球首款集成3D GPU的高性能量產RISC-V 單板計算機,昉·星光 2 開發實踐![全球首款集成3D GPU的高性能量產
發表于 07-06 23:28
權威評測:Orange Pi RV2等5?款?RISC-V?單板計算機測試-性能、基準測試、功能和見解
的生態系統正在挑戰ARM和x86平臺的主導地位。RISC-V單板計算機采用模塊化設計,軟件支持不斷增加,并承諾提供定制服務,正吸引著各地技術愛好者的目光。但它們在實際
【VisionFive 2單板計算機試用體驗】 + 開箱體驗
在x86與ARM架構主導的單板計算機市場,中國團隊打造的VisionFive 2(防星光2)如同一顆新星,憑借開源開放的RISC-V架構和成熟的桌面體驗,為開發者與極客提供了全新的選擇
發表于 06-27 09:06
【賽昉科技昉·星光RISC-V單板計算機試用體驗】添加tft觸摸屏(ili9488)并顯示開機logo,為qt做準備
評論