orangepi zero2在linux5.4以上內核使用ili9341

来源:https://www.cnblogs.com/liteng0305/p/18209657
-Advertisement-
Play Games

背景 根據orangepi zero2用戶手冊說明,linux5.13內核不能使用 modprobe fbtft_device 驅動spi lcd 查看linux內核源碼提交記錄,發現在v5.4-rc3中刪除了fbtft_device.c文件 commit如下 staging/fbtft: Remo ...


背景

根據orangepi zero2用戶手冊說明,linux5.13內核不能使用 modprobe fbtft_device 驅動spi lcd

查看linux內核源碼提交記錄,發現在v5.4-rc3中刪除了fbtft_device.c文件

commit如下

staging/fbtft: Remove fbtft_device
Commit c440eee ("Staging: fbtft: Switch to the gpio descriptor
interface") removed the gpio code from fbtft_device rendering it useless.

fbtft_device is a module that was used on the Raspberry Pi to dynamically
add fbtft devices when the Pi didn't have Device Tree support.
Just remove the module since it's the responsibility of Device Tree, ACPI
or platform code to add devices.

Fixes: c440eee ("Staging: fbtft: Switch to the gpio descriptor interface")
Signed-off-by: Noralf Trønnes <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>

“fbtft_device用來在樹莓派沒有設備樹時,自動添加fbtft設備,刪除這個模塊因為添加設備是設備樹、ACPI或者平臺代碼的責任”

所以是因為原來的代碼不符合設備和驅動分離的原則,所以給刪除了,但其實驅動程式依然在,理論上只需要將設備硬體信息註冊到內核,就可以正常運行了,可以通過設備樹或者模塊

dts

下麵看下orangepi官方修改後的內核源碼中的設備樹,分支orange-pi-6.1-sun50iw9

https://github.com/orangepi-xunlong/linux-orangepi

sun50i-h616.dtsi

從晶元級(h616)的dts可以看到spi有spi0和spi1,spi0有一個cs0,spi1有cs0和cs1

			/omit-if-no-ref/
			spi0_pins: spi0-pins {
				pins = "PC0", "PC2", "PC4";
				function = "spi0";
			};

			/omit-if-no-ref/
			spi0_cs0_pin: spi0-cs0-pin {
				pins = "PC3";
				function = "spi0";
			};

			/omit-if-no-ref/
			spi1_pins: spi1-pins {
				pins = "PH6", "PH7", "PH8";
				function = "spi1";
			};

			/omit-if-no-ref/
			spi1_cs0_pin: spi1-cs0-pin {
				pins = "PH5";
				function = "spi1";
			};

			/omit-if-no-ref/
			spi1_cs1_pin: spi1-cs1-pin {
				pins = "PH9";
				function = "spi1";
			};

spi1設備只添加了cs1,cs0引腳沒有用在spi1上,而是復用在了i2c3

		spi0: spi@5010000 {
			compatible = "allwinner,sun50i-h616-spi",
				     "allwinner,sun8i-h3-spi";
			reg = <0x05010000 0x1000>;
			interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
			clock-names = "ahb", "mod";
			resets = <&ccu RST_BUS_SPI0>;
			pinctrl-names = "default";
			pinctrl-0 = <&spi0_pins>;
			dmas = <&dma 22>, <&dma 22>;
			dma-names = "rx", "tx";
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
		};

		spi1: spi@5011000 {
			compatible = "allwinner,sun50i-h616-spi",
				     "allwinner,sun8i-h3-spi";
			reg = <0x05011000 0x1000>;
			interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&ccu CLK_BUS_SPI1>, <&ccu CLK_SPI1>;
			clock-names = "ahb", "mod";
			resets = <&ccu RST_BUS_SPI1>;
			pinctrl-names = "default";
			pinctrl-0 = <&spi1_pins>, <&spi1_cs1_pin>;
			dmas = <&dma 23>, <&dma 23>;
			dma-names = "rx", "tx";
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
		};

sun50i-h616-orangepi-zero2.dts

從板級(orangepi zero2)dts可以看到添加了一個spidev@1設備,但是預設未啟用

&spi1 {
	status = "disabled";
	#address-cells = <1>;
	#size-cells = <0>;
	pinctrl-names = "default";
	pinctrl-0 = <&spi1_pins>, <&spi1_cs1_pin>;

	spidev@1 {
		compatible = "rohm,dh2228fv";
		status = "disabled";
		reg = <1>;
		spi-max-frequency = <1000000>;
	};
};

硬體

可以看到spi0用來連接NOR FLASH,所以肯定不可以再用來連接lcd了

spi1在26PIN引出,並且cs0和cs1都有,不過cs0復用在了i2c3的TWI3-SDA引腳上,所以我們使用spi1驅動lcd,並且使用cs1

硬體接線如下,實際上就是用戶手冊推薦的連接

dts替換

新建ili9341.dts文件

vim ili9341.dts

/dts-v1/;
/plugin/;

/ {
        fragment@0 {
                target = <&spi1>;
                __overlay__ {
                        status = "okay";
                        ili9341: ili9341@0 {
                                compatible = "ilitek,ili9341";
                                reg = <1>;
                                spi-max-frequency = <40000000>;
                                rotate = <0>;
                                bgr;
                                fps = <30>;
                                buswidth = <8>;
                                reset-gpios = <&pio 2 9 1>;
                                dc-gpios = <&pio 2 6 0>;
                                led-gpios = <&pio 2 5 0>;
                                debug = <0>;
                        };
                };
        };
};

替換設備樹,執行後reboot

orangepi-add-overlay ili9341.dts

不出意外的話,console預設會顯示在lcd上,可以使用fbi指令測試

su root
apt update
apt install fbi
fbi -vt 1 -noverbose -d /dev/fb0 /boot/boot.bmp

關於pinctrl-0和cs-gpios

使用cs-gpios定義片選信號使用的引腳,來自ChatGPT3.5

spi@40013000 {
    compatible = "some-vendor,spi-bus";
    reg = <0x40013000>;
    #address-cells = <1>;
    #size-cells = <0>;
    status = "okay";

    cs-gpios = <&gpio1 10 0>, <&gpio1 11 0>;  // 定義兩個片選 GPIO

    spidev0: spidev@0 {
        compatible = "some-vendor,spidev";
        reg = <0>;  // 對應 cs-gpios 的第一個 GPIO (gpio1 10)
        spi-max-frequency = <10000000>;
        status = "okay";
    };

    spidev1: spidev@1 {
        compatible = "some-vendor,spidev";
        reg = <1>;  // 對應 cs-gpios 的第二個 GPIO (gpio1 11)
        spi-max-frequency = <10000000>;
        status = "okay";
    };
};

pinctrl-0已經包含了spi1_cs1_pin,所以spidev的reg直接使用1也可以找到,就不需要cs-gpios了

&spi1 {
	status = "disabled";
	#address-cells = <1>;
	#size-cells = <0>;
	pinctrl-names = "default";
	pinctrl-0 = <&spi1_pins>, <&spi1_cs1_pin>;

	spidev@1 {
		compatible = "rohm,dh2228fv";
		status = "disabled";
		reg = <1>;
		spi-max-frequency = <1000000>;
	};
};

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近有群友咨詢C#如何調用Python?小編嘗試Python.NET過程中遭遇的版本相容性和環境配置難題,小編決定尋找一個更為簡單、穩定且對初學者友好的解決方案。小編搜索一番,除了Python.NET之外,還有其他途徑能夠幫助我們輕鬆地在C#項目調用Python腳本,那就是通過命令行調用,使用 Sy ...
  • C#.Net的BCL提供了豐富的類型,最基礎的是值類型、引用類型,而他們的共同(隱私)祖先是 System.Object(萬物之源),所以任何類型都可以轉換為Object。 ...
  • 添加本地用戶 添加新的本地用戶。 在CUI配置上,按如下方式設置。 使用管理員許可權運行 PowerShell 並按如下方式進行配置。 Windows PowerShell 版權所由 (C) Microsoft Corporation。 保留所有權利。 安裝最新的 PowerShell,瞭解新功能和改 ...
  • 誰來調用 main 函數 在運行 main 函數之前,會有一段引導代碼,最終由這段代碼調用 main 函數,這段引導代碼不需要自己編寫,而是在編譯、鏈接中由鏈接器將這段程式鏈接到應用程式中,構成最終的可執行文件,載入器會將可執行文件載入到記憶體中 進程的終止 正常終止 在 main 函數中通過 ret ...
  • 獲取 Windows Server 2022 https://www.microsoft.com/zh-cn/evalcenter/evaluate-windows-server-2022 查看 Windows Server 2022 發行說明和系統要求。 註冊,然後下載並安裝。(註意:此評估版將在 ...
  • 事情是這樣的,因為系統漏洞問題,需要升級openssh,從OpenSSH_9.3p1升級到OpenSSH_9.3p2 系統版本:CentOS 7 升級OpenSSH_9.3p2之前需要先升級zlib 從官網下載 wget https://www.zlib.net/zlib-1.3.1.tar.gz ...
  • Linux不像windows系統那樣方便的圖形界面,特別是作為伺服器使用的時候,只有命令行可以使用。 我有個雲伺服器平時用來做一些數據分享用的,最近想看看磁碟和其中文件的占用情況,於是搜索並學習了一些查看磁碟空間信息的命令,命令雖然簡單,但對我自己來說還是有些新的東西值得記錄。 1. df 首先,登 ...
  • Centos7安裝weblogic 1、配置java環境weblogic運行依賴java環境,所以第一步先配置java環境上傳、解壓jdk安裝包[root@bogon ~]# rz -be[root@bogon ~]# tar -zxvf jdk1.8.tar.gz 配置java環境變數[root@ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...