本文來源電子發(fā)燒友社區(qū),作者:cszzlsw, 帖子地址:https://bbs.elecfans.com/jishu_2287667_1_1.html
1.前言
前面兩篇帖子咱們回顧了從頭制作系統(tǒng)并運(yùn)行homeassistant,其中不可謂不辛酸,然后我就在想再做個啥,找了一下自己庫存的外設(shè),有一個tft屏帶觸摸芯片的,一想,這不正好的嘛,可以玩玩圖形編程了,老聽說linux開發(fā)板的qt編程咱也沒見過啊,說干就干,這就開始了.
2.移植驅(qū)動并首先嘗試
首先我的屏主控是lil9488的,分辨率320*480,據(jù)說再往上就得上rgb屏了,這咱沒玩過也不懂,把手頭上這個整明白先.
這個在git倉庫:https://github.com/starfive-tech/freelight-u-sdk,給的linux內(nèi)核里面找了一圈,也沒見,
然后發(fā)現(xiàn)有一個芯片是ili9486的,跟我這差一位數(shù),一想差不多,這個開始弄吧,把文件拷過來,然后改吧:
然后把所有涉及9486的地方都改成9488,
然后是設(shè)備樹里面改吧改吧(改了好多次,也是第一次寫設(shè)備樹):
這款tft屏除了常規(guī)的spi線之外,還有BL(背光BackLight),Reset(復(fù)位),DC(Data-Control)線需要接,這里我用的gpio1,2,3腳,
另外最后的那個debug如果不需要就置0,需要就置1.
然后在linux內(nèi)核里面配置一下,把ili9488加進(jìn)來:
-> Device Drivers │
│ -> Staging drivers (STAGING [=y]) │
│ -> Support for small TFT LCD display modules (FB_TFT [=y])
然后就是編譯內(nèi)核,再刪除rootfs,然后再生成rootfs,這都老熟人了,
這些都整完之后,就把卡插上準(zhǔn)備燒錄,
然后漫長的等待過程之后,終于燒完了,
緊跟著就把屏接上,按照文檔里介紹的40pin引腳對應(yīng)接好,
上電,然而,并沒有出現(xiàn)期待中的點(diǎn)亮屏幕,
二.各種解決問題
1.spi沒有設(shè)備id問題:
出現(xiàn)這個問題的原因是因?yàn)?a target="_blank">sdk的系統(tǒng)是5.15,屬于是很新的系統(tǒng)了,但是linux里面的驅(qū)動幾年都不更新,所以過期了,需要在ili9844里這么改:
2.ili支持888顏色而ili9486是565模式
這里需要改好幾個地方,
首先是ili9488文件里初始化序列里面,把這個值由0x55改成0x66,
然后在ser_var里面添加上888色彩的信息,
然后是display的值,增加一個函數(shù)和bbp值:
這里面涉及的這個函數(shù):fbtft_write_vmem24_bus8就是寫入像素信息的
這個函數(shù)需要放到fbtft-core.c里,放文件最后也行
fbtft-core.c文件還需要修改fbtft_framebuffer_alloc函數(shù)的幾個地方:
3.修改fbtft-core.c里面的幾個函數(shù),
首先是:fbtft_request_one_gpio:
復(fù)制代碼
然后是fbtft_request_gpios:
復(fù)制代碼
最后是fbtft_reset:
復(fù)制代碼
這里主要是那個復(fù)位腳重啟一下,原來的是把cs腳使能,不知道為什么是這樣
燒錄之后如果不能顯示,可以嘗試把系統(tǒng)原來的顯示去掉(不知道有沒有作用,可以試下,我實(shí)驗(yàn)過程中去掉了):
大概主要碰到的問題就是這些吧,可能有些忘記了,想起來的時候再添加.
三.顯示logo,
這里需要修改linux配置,配置這個參數(shù),這個就是顯示logo的
-> Device Drivers │
│ -> Graphics support │
│ -> Bootup logo (LOGO [=y])
效果看一看(后面有時間換成咱們賽昉的logo試試):
如果還想把終端的打印信息在屏幕上顯示出來,就配置這個
│ -> Device Drivers │
│ -> Graphics support │
│ -> Console display driver support
但是這還不夠,還需要把console額外賦個值,在bootarg那里增加一個參數(shù)(這個功能很酷炫,但實(shí)際沒什么用,建議不要搞):
這里我們把固件編譯出來試一下是可以將字符顯示在屏幕上的,在linux終端上輸入:
echo hello >/dev/tty0
可以看到hello字符出現(xiàn)在屏幕上了.
四.總結(jié)
到這里一款LCD屏幕的移植過程大致就完了,整個步驟其實(shí)不是很繁瑣,其實(shí)最有意義的是這中間找問題的過程,借此機(jī)會大致弄明白了設(shè)備數(shù)的寫法
也知道了一些驅(qū)動方面的知識,后續(xù)等tf卡刷方式速度快點(diǎn)再玩了,準(zhǔn)備的實(shí)驗(yàn)有觸摸,QT寫界面等等,拭目以待吧.
再次吐槽發(fā)燒友的發(fā)帖機(jī)制,太難受,要趕緊把圖片粘貼功能弄出來
1.前言
前面兩篇帖子咱們回顧了從頭制作系統(tǒng)并運(yùn)行homeassistant,其中不可謂不辛酸,然后我就在想再做個啥,找了一下自己庫存的外設(shè),有一個tft屏帶觸摸芯片的,一想,這不正好的嘛,可以玩玩圖形編程了,老聽說linux開發(fā)板的qt編程咱也沒見過啊,說干就干,這就開始了.
2.移植驅(qū)動并首先嘗試
首先我的屏主控是lil9488的,分辨率320*480,據(jù)說再往上就得上rgb屏了,這咱沒玩過也不懂,把手頭上這個整明白先.
這個在git倉庫:https://github.com/starfive-tech/freelight-u-sdk,給的linux內(nèi)核里面找了一圈,也沒見,
然后發(fā)現(xiàn)有一個芯片是ili9486的,跟我這差一位數(shù),一想差不多,這個開始弄吧,把文件拷過來,然后改吧:
然后把所有涉及9486的地方都改成9488,
然后是設(shè)備樹里面改吧改吧(改了好多次,也是第一次寫設(shè)備樹):
這款tft屏除了常規(guī)的spi線之外,還有BL(背光BackLight),Reset(復(fù)位),DC(Data-Control)線需要接,這里我用的gpio1,2,3腳,
另外最后的那個debug如果不需要就置0,需要就置1.
然后在linux內(nèi)核里面配置一下,把ili9488加進(jìn)來:
-> Device Drivers │
│ -> Staging drivers (STAGING [=y]) │
│ -> Support for small TFT LCD display modules (FB_TFT [=y])
然后就是編譯內(nèi)核,再刪除rootfs,然后再生成rootfs,這都老熟人了,
這些都整完之后,就把卡插上準(zhǔn)備燒錄,
然后漫長的等待過程之后,終于燒完了,
緊跟著就把屏接上,按照文檔里介紹的40pin引腳對應(yīng)接好,
上電,然而,并沒有出現(xiàn)期待中的點(diǎn)亮屏幕,
二.各種解決問題
1.spi沒有設(shè)備id問題:
出現(xiàn)這個問題的原因是因?yàn)?a target="_blank">sdk的系統(tǒng)是5.15,屬于是很新的系統(tǒng)了,但是linux里面的驅(qū)動幾年都不更新,所以過期了,需要在ili9844里這么改:
2.ili支持888顏色而ili9486是565模式
這里需要改好幾個地方,
首先是ili9488文件里初始化序列里面,把這個值由0x55改成0x66,
然后在ser_var里面添加上888色彩的信息,
然后是display的值,增加一個函數(shù)和bbp值:
這里面涉及的這個函數(shù):fbtft_write_vmem24_bus8就是寫入像素信息的
這個函數(shù)需要放到fbtft-core.c里,放文件最后也行
fbtft-core.c文件還需要修改fbtft_framebuffer_alloc函數(shù)的幾個地方:
3.修改fbtft-core.c里面的幾個函數(shù),
首先是: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 */
- }
這里主要是那個復(fù)位腳重啟一下,原來的是把cs腳使能,不知道為什么是這樣
燒錄之后如果不能顯示,可以嘗試把系統(tǒng)原來的顯示去掉(不知道有沒有作用,可以試下,我實(shí)驗(yàn)過程中去掉了):
大概主要碰到的問題就是這些吧,可能有些忘記了,想起來的時候再添加.
三.顯示logo,
這里需要修改linux配置,配置這個參數(shù),這個就是顯示logo的
-> Device Drivers │
│ -> Graphics support │
│ -> Bootup logo (LOGO [=y])
效果看一看(后面有時間換成咱們賽昉的logo試試):
如果還想把終端的打印信息在屏幕上顯示出來,就配置這個
│ -> Device Drivers │
│ -> Graphics support │
│ -> Console display driver support
但是這還不夠,還需要把console額外賦個值,在bootarg那里增加一個參數(shù)(這個功能很酷炫,但實(shí)際沒什么用,建議不要搞):
這里我們把固件編譯出來試一下是可以將字符顯示在屏幕上的,在linux終端上輸入:
echo hello >/dev/tty0
可以看到hello字符出現(xiàn)在屏幕上了.
四.總結(jié)
到這里一款LCD屏幕的移植過程大致就完了,整個步驟其實(shí)不是很繁瑣,其實(shí)最有意義的是這中間找問題的過程,借此機(jī)會大致弄明白了設(shè)備數(shù)的寫法
也知道了一些驅(qū)動方面的知識,后續(xù)等tf卡刷方式速度快點(diǎn)再玩了,準(zhǔn)備的實(shí)驗(yàn)有觸摸,QT寫界面等等,拭目以待吧.
再次吐槽發(fā)燒友的發(fā)帖機(jī)制,太難受,要趕緊把圖片粘貼功能弄出來
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
RISC-V
+關(guān)注
關(guān)注
45文章
2292瀏覽量
46211 -
賽昉科技
+關(guān)注
關(guān)注
3文章
154瀏覽量
14305
發(fā)布評論請先 登錄
相關(guān)推薦
賽昉科技亮相世界互聯(lián)網(wǎng)大會,精彩呈現(xiàn)RISC-V創(chuàng)新成果
豐富的RISC-V創(chuàng)新成果,包括昉·驚鴻-7110(JH-7110)RISC-V應(yīng)用處理器,昉·星光2(VisionFive2)
預(yù)售啟動!昉·星光 2 AI套件正式發(fā)布,基于RISC-V構(gòu)建AI算力
10月24日,昉·星光2(VisionFive2)AI套件正式開啟預(yù)售。該套件由中國RISC-V軟硬件生態(tài)領(lǐng)導(dǎo)者賽昉科技攜手邊緣人工智能(A
Ubuntu現(xiàn)已適配RISC-V單板計算機(jī)Milk-V Mars
近期,Canonical宣布優(yōu)化的Ubuntu24.04鏡像已可用于RISC-V單板計算機(jī)Milk-VMars。Milk-VMars由深圳市群芯閃耀科技有限公司(Milk-V)設(shè)計并推
信用卡大小的 RISC-V 單板計算機(jī)介紹
信用卡大小的 RISC-V 單板計算機(jī) —— Mars
Mars 由深圳市群芯閃耀科技有限公司(Milk-V)設(shè)計并推出,搭載賽
發(fā)表于 04-12 16:39
賽昉科技為RISC-V人才培育賦能
中國RISC-V軟硬件生態(tài)領(lǐng)導(dǎo)者,賽昉科技受邀在峰會發(fā)表主題演講,并正式加入RISC-V國際人才培養(yǎng)認(rèn)證中心。
賽昉科技VisionFive 2生態(tài)進(jìn)展雙周報(2.1-2.29)
Image for VisionFive 2)
社區(qū)開發(fā)者發(fā)布4篇【昉·星光 2高性能RISC-V單板計算機(jī)體驗(yàn)】系列文章,內(nèi)容包括:為U
發(fā)表于 02-29 15:45
RISC-V智能化網(wǎng)絡(luò)解決方案|賽昉科技昉·星光 2成功運(yùn)行OpenWrt
。近期,賽昉科技在昉·星光2(VisionFive2)RISC-V單板計算機(jī)上成功運(yùn)行OpenW
【昉·星光 2 高性能RISC-V單板計算機(jī)體驗(yàn)】以容器的方式安裝 HomeAssistant
【昉·星光 2 高性能RISC-V單板計算機(jī)體驗(yàn)】以容器的方式安裝 HomeAssistant
下載并啟動容器
HomeAssisatant
發(fā)表于 02-21 18:07
【昉·星光 2 高性能RISC-V單板計算機(jī)體驗(yàn)】為 Ubuntu 安裝 Docker 及常用軟件
【昉·星光 2 高性能RISC-V單板計算機(jī)體驗(yàn)】為 Ubuntu 安裝 Docker 及常用軟件
目的
為了更好的利用
發(fā)表于 02-21 17:54
【昉·星光 2 高性能RISC-V單板計算機(jī)體驗(yàn)】VisionFive2開箱+安裝Ubuntu
【昉·星光 2 高性能RISC-V單板計算機(jī)體驗(yàn)】VisionFive2開箱+安裝Ubuntu
前言
很感謝賽
發(fā)表于 02-21 17:49
昉·星光2 RISC-V單板計算機(jī)體驗(yàn)(三) - SSH連接
昉·星光2 RISC-V單板計算機(jī)體驗(yàn)(三) - SSH連接 一、官方資料 RISC-V官網(wǎng): [https://rvspace.org]
昉·星光2 RISC-V單板計算機(jī)體驗(yàn)(二) - 系統(tǒng)環(huán)境
昉·星光2 RISC-V單板計算機(jī)體驗(yàn)(二) - 系統(tǒng)環(huán)境 一、官方資料 RISC-V官網(wǎng): [https://rvspace.org]
【昉·星光 2 高性能RISC-V單板計算機(jī)試用體驗(yàn)】開箱及裝載Debian系統(tǒng)
上周收到了昉·星光 2高性能RISC-V單板計算機(jī)開發(fā)板,在此非常感謝賽昉科技提供的
發(fā)表于 01-24 00:32
評論