1. 程式人生 > >23 H5的spi控制器驅動

23 H5的spi控制器驅動

在核心裡的配置選項:

make menuconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
 Device Drivers  --->
    [*] SPI support  --->
        <*>   Allwinner A31 SPI controller  //H5所用的spi控制器驅動

        <*>   User mode SPI device driver support //是一個spi裝置驅動, 用於提供使用者呼叫控制器的介面

spi控制器所用的驅動原始碼在:drivers/spi/spi-sun6i.c


495 static struct platform_driver sun6i_spi_driver = {
496     .probe  = sun6i_spi_probe,
497     .remove = sun6i_spi_remove,
498     .driver = {
499         .name       = "sun6i-spi",
500         .of_match_table = sun6i_spi_match,
501         .pm     = &sun6i_spi_pm_ops,
502     },
503 };

483 static const struct of_device_id sun6i_spi_match[] = {
484
{ .compatible = "allwinner,sun6i-a31-spi", .data = (void *)SUN6I_FIFO_DEPTH }, 485 { .compatible = "allwinner,sun8i-h3-spi", .data = (void *)SUN8I_FIFO_DEPTH }, 486 {} 487 };

由以上程式碼可見,在裝置樹裡描述spi控制器相關的裝置節點的compatible屬性值應為”allwinner,sun6i-a31-spi”或”allwinner,sun8i-h3-spi”.

H5裡共有兩個spi控制器:
這裡寫圖片描述

在裝置樹的檔案arch/arm64/boot/dts/allwinner/sunxi-h3-h5.dtsi裡,廠家已寫好兩個spi控制器相關的裝置節點:

445             spi0_pins: spi0 {
446                 pins = "PC0", "PC1", "PC2", "PC3";
447                 function = "spi0";
448             };
449 
450             spi1_pins: spi1 {
451                 pins = "PA15", "PA16", "PA14", "PA13";
452                 function = "spi1";
453             };
    ...

510         spi0: [email protected] {
511             compatible = "allwinner,sun8i-h3-spi";
512             reg = <0x01c68000 0x1000>;
513             interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
514             clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
515             clock-names = "ahb", "mod";
516             dmas = <&dma 23>, <&dma 23>;
517             dma-names = "rx", "tx";
518             pinctrl-names = "default";
519             pinctrl-0 = <&spi0_pins>;
520             resets = <&ccu RST_BUS_SPI0>;
521             status = "disabled";
522             #address-cells = <1>;
523             #size-cells = <0>;
524         };
525 
526         spi1: [email protected] {
527             compatible = "allwinner,sun8i-h3-spi";
528             reg = <0x01c69000 0x1000>;
529             interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
530             clocks = <&ccu CLK_BUS_SPI1>, <&ccu CLK_SPI1>;
531             clock-names = "ahb", "mod";
532             dmas = <&dma 24>, <&dma 24>;
533             dma-names = "rx", "tx";
534             pinctrl-names = "default";
535             pinctrl-0 = <&spi1_pins>;
536             resets = <&ccu RST_BUS_SPI1>;
537             status = "disabled";
538             #address-cells = <1>;
539             #size-cells = <0>;
540         };

在板級主要的裝置樹檔案arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts:

324 &pio {
    ...
337     spi0_cs_pins: spi0_cs_pins {
338         pins = "PC3", "PA6";
339         function = "gpio_out";
340     };
341 };

414 &spi0 {
415     /* needed to avoid dtc warning */
416     #address-cells = <1>;
417     #size-cells = <0>;
418 
419     status = "okay";
420     pinctrl-names = "default";
421     pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
422     cs-gpios = <&pio 2 3 GPIO_ACTIVE_HIGH>, <&pio 0 6 GPIO_ACTIVE_HIGH>;
    ...

在裝置樹裡廠家已經描述了兩個spi控制器的裝置節點,但在系統裡發生只有spi0控制器是驅動好的:

^_^ / # ls /sys/bus/platform/drivers/sun6i-spi/
1c68000.spi/  bind          uevent        unbind

為了使用擴充套件口上的spi1介面,需要把spi1控制器驅動好:
這裡寫圖片描述

參考spi0控制器在裝置樹裡的描述, 在sun50i-h5-nanopi-neo2.dts裡增加:
spi1_cs –> PA13

324 &pio {
        ...
341     spi1_cs_pins: spi1_cs_pins {  /* spi1控制器所用的片選線 */
342         pins = "PA13";
343         function = "gpio_out";
344     };
345 };

再增加:
418 &spi1 {
419     #address-cells = <1>;
420     #size-cells = <0>;
421 
422     status = "okay";  /* 此屬性值為"okay"才會裝置使能 */
423     pinctrl-names = "default"; 
424     pinctrl-0 = <&spi1_pins &spi1_cs_pins>; /* spi1控制器所用到的gpio功能配置 */
425     cs-gpios = <&pio 0 13 GPIO_ACTIVE_HIGH>;
426 };

重編裝置樹檔案,更新並啟動系統後:

^_^ / # ls /sys/bus/platform/drivers/sun6i-spi/
1c68000.spi/  1c69000.spi/  bind          uevent        unbind

相關推薦

23 H5的spi控制器驅動

在核心裡的配置選項: make menuconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Device Drivers ---> [*] SPI support --->

ehci及其伴隨ohci主機控制器驅動分析

1. 正常插入 插上U盤產生中斷呼叫usb_hcd_irq: usb_hcd_irq ehci_irq usb_hcd_resume_root_hub queue_work(pm_wq, &hcd->wakeup_work); //hcd.

23 mdev與驅動原始碼實現裝置檔案建立

mdev與驅動原始碼實現裝置檔案建立 前面裝置驅動備載入後,都需要用命令”mknod”來創建出裝置檔案。 其實核心裡有介面在驅動原始碼裡實現創建出裝置檔案。 busybox做的嵌入式檔案系統裡有提供”mdev”命令。 “mdev –help”命令可以檢視相關資訊

sas控制器驅動結構粗探--基於3.10.0-693.25.4

部門測試環境最近出了個核心core,是宕機在了mpt3sas這個模組,以前沒見過這個模組,怎麼查這個core呢?以前沒見過,現在見見就好了;)。這個模組是sas控制器的驅動,在之前的IO棧研究中,只瞭解到過通用塊層,scsi往下的就沒接觸了,也正好趁此解這個bug的機會了解下IO棧scs

USB主機控制器驅動——OHCI分析

    本文以 2440-ohci 驅動為例,簡單分析 USB 主機控制器驅動 根 Hub 的註冊過程,以及 USB裝置的列舉過程,並不涉及USB協議,單純分析驅動框架流程。無論是hub還是普通的usb裝置,它們註冊到 usb_bus_type 都會經歷兩次 Match ,

二、Linux spi 控制器驅動

1、概覽 對於ARM平臺來說,大多數CPU都是SoC。spi控制器被整合在CPU內部。spi總線上的資料傳輸過程通常就是這個spi控制器來控制的。為了使spi控制器能工作在linux spi子系統中,我們就需要針對CPU內部的spi控制器編寫一個驅動。前面

spi控制器驅動模型

#include <linux/clk.h> #include <linux/dmaengine.h> #include <linux/module.h> #include <linux/of.h> #include <

linux系統匯流排SPI匯流排三之SPI主控制器驅動程式分析

嵌入式微處理器訪問SPI裝置有兩種方式:使用GPIO模擬SPI介面的工作時序或者使用SPI控制器。使用GPIO模擬SPI介面的工作時序是非常容易實現的,但是會導致大量的時間耗費在模擬SPI介面的時序上,訪問效率比較低,容易成為系統瓶頸。這裡主要分析使用SPI控制器的情況。

linux裝置驅動之USB主機控制器驅動分析 (一)

一:前言 Usb是一個很複雜的系統.在usb2.0規範中,將其定義成了一個分層模型.linux中的程式碼也是按照這個分層模型來設計的.具體的分為 usb裝置,hub和主機控制器三部份.在閱讀程式碼的時候,必須要參考相應的規範.最基本的就是USB2.0的spec.

SPI驅動之主控制器驅動程式

 嵌入式微處理器訪問SPI裝置有兩種方式:使用GPIO模擬SPI介面的工作時序或者使用SPI控制器。使用GPIO模擬SPI介面的工作時序是非常容易實現的,但是會導致大量的時間耗費在模擬SPI介面的時序上,訪問效率比較低,容易成為系統瓶頸。這裡主要分析使用SPI控制器的情

spi 主機控制器驅動(spi_master)

spi_master/* linux/drivers/spi/spi_s3c24xx.c * * Copyright (c) 2006 Ben Dooks * Copyright (c) 2006 Simtec Electronics * Ben Dooks <

基於MT7688 原廠SDK 使用SPI控制器驅動TFT螢幕ILI9225驅動器(spi介面)

以下是我的一個利用SPI控制器操作屏的一個操作例項 包含一個bpeer_tft.c 和一個bpeer_tft.h 這是我基於flash驅動剝離出來的spi控制器驅動 好的話,頂起來~~~~~~~~~~~~~~~~~~~ 下面是程式碼: bpeer_tft.c 1 /*

23.Linux-塊設備驅動(詳解)

裏的 end opacity 塊設備 dea 獲取request device geometry cat 通過上節的塊設備驅動分析,本節便通過內存來模擬塊設備驅動 參考內核自帶的塊設備驅動程序: drivers/block /xd.c drivers/bl

JZ2440 裸機驅動 第6章 存儲控制器

logs display 裸機 包含 們的 不支持 sel watchdog inux 本章目標: 了解S3C2410/S3C2440地址空間的布局 掌握如何通過總線形式訪問擴展的外設,比如內存、NOR Flash、網卡等 ················

JZ2440 裸機驅動 第13章 LCD控制器(1)

off time sad poi 臨時 接收 一行 類型 組成 本章目標 了解LCD顯示器的接口及時序; 掌握S3C2410/S3C2440 LCD控制器的使用方法; 了解幀緩沖區的概念,掌握如何設置幀緩沖區來顯示圖像; 13.1 LCD和LCD控制器 13.1.1 L

23、【華為HCIE-Storage】--Smart Migration(源目LUN同一控制器

HCIE Storage hostman ------------------------------------重要說明------------------------------------以下部分內容來網絡,部分自華為存儲官方教材具體教材內容請移步華為存儲官網進行教材下載 網絡引用內容

STM32驅動ILI9341控制器控制TFTLCD顯示

point 簡化 draw 光標 索引 hit 數字 nbsp 狀態 STM32驅動ILI9341控制器控制TFTLCD顯示 一、用STM32控制TFTLCD顯示的編程方法,在編程驅動TFTLCD液晶顯示器之前,我們先熟悉以下概念: 1、色彩深度,這是一個與TFTL

linux spi主機控制器pl022驅動註冊以及匹配裝置過程

最近看海思的spi比較多,海思3519的spi ip使用的時ARM提供的pl022,這裡對pl022驅動註冊和匹配裝置樹中的裝置這個過程捋一下。 pl022是ARM提供的片內外設,很多廠商都用了這個ip,只在一些細小的區別。所以它的驅動也是非常通用的。pl022的手冊可以看這裡點選開啟連結

2.23寸OLED顯示屏2832解析度白色藍色黃色綠色醫療裝置軍工產品控制器模組介面測試程式碼結構簡單使用選型方便

OLED顯示屏被認為是下一代平面顯示器的佼佼者,而它全面覆蓋我們日常生活的時代也即將到來。OLED顯示屏可以自發光,反應靈敏,製作簡單,操作方便,一旦技術成熟且量產後,它可以廣泛應用到航空、汽車、家電、手機等各類電子科技產品。 OLED螢幕顯示的優點:1、厚度可

自己學驅動12——儲存控制器

1.2440的BANK     2440一共提供給外部8個BANK(BANK0~BANK7),每個BANK均為128MB的地址空間,一共1GB地址空間。2440對外引出了27根地址線ADDR0~ADDR26,這27根地址線的訪問地址大小為128MB,2440對外還引出了8根