arm linux驅動開發學習5

2021-10-16 05:23:10 字數 2590 閱讀 6046

串列埠通訊:

只要是使用串列埠通訊,不論是ttl還是232、485,其驅動程式都是一樣的,通過外接rs485晶元即可將串列埠轉換為rs485訊號。本節用的是串列埠3,串列埠驅動框架為:

1、uart_driver 註冊與登出

每個串列埠驅動都需要定義乙個 uart_driver,載入驅動的時候通過 uart_register_driver 函式向

系統註冊這個 uart_driver,此函式原型如下:

int uart_register_driver(struct uart_driver *drv)

登出驅動的時候也需要登出掉前面註冊的 uart_driver,需要用到 uart_unregister_driver 函式,

函式原型如下:

void uart_unregister_driver(struct uart_driver *drv)

2、uart_port 的新增與移除

int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)

int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport)

3、uart_ops 實現

imx_pops 就是 uart_ops 型別的結構體變數

rs232驅動編寫方法:

1、 imx6ull-alientek-emmc.dts uart3 io 節點建立

2、新增 uart3 節點

故障除錯方法:

分為硬體和軟體部分。硬體部分用示波器檢測出規律的peak峰值訊號,證明硬體沒有問題。

軟體部分檢查驅動的編寫、語法、及拼寫有沒有問題。

spi通訊

spi 驅動框架和 i2c 很類似,都分為主機控制器驅動和裝置驅動,主機控制器也就是 soc

的 spi 控制器介面。我們編寫好 spi 控制器驅動以後就可以直接使用了,不管是什麼 spi 裝置,spi 控制器部分的驅動都是一樣,我們的重點就落在了種類繁多的 spi 裝置驅動。

一、spi主機驅動

1、spi_master 申請與釋放

struct spi_master *spi_alloc_master(struct device *dev, unsigned size)

void spi_master_put(struct spi_master *master)

2、spi_master 的註冊與登出(到核心)

int spi_register_master(struct spi_master *master)

void spi_unregister_master(struct spi_master *master)

二、spi 裝置驅動

1、spi_driver 申請與釋放

int spi_register_driver(struct spi_driver *sdrv)

void spi_unregister_driver(struct spi_driver *sdrv)

2、spi_driver 的註冊與登出(到核心)

spi_register_driver 來註冊 spi_driver

spi_unregister_driver 來登出 spi_driver

三、spi 裝置和驅動匹配過程

of_driver_match_device 函式用於完成裝置樹裝置和驅動匹配,比較 spi 裝置節點的 compatible 屬性和 of_device_id 中的 compatible 屬性是否相等,如果相當的話就表示 spi 裝置和驅動匹配。

我們知道,spi_nss有兩種模式,spi_nss_hard和spi_nss_soft。

spi_nss_hard,硬體自動拉高拉低片選,在速率上是遠比軟體方式控制要高的,缺點是當stm32為主裝置時,同乙個spi上面只能接乙個從裝置。這也就限制了spi通訊裝置的數量。

spi_nss_soft,軟體控制,gpio控制片選拉高拉低,優點是乙個spi上面可以掛多個裝置。這也是使用較多的方式。所以不再講述這個,主要講一下spi_nss_hard下,該如何配置及使用spi。

stm32是可以自動拉高拉底的,但是是通過spi_cmd這個函式實現的,使能spi,硬體自動拉低片選,取消使能spi,硬體自動拉高片選。

delay_us(28

);spi_cmd

(spi2,enable)

;while

(spi_getflagstatus

(spi2,spi_flag_txe)

== reset)

;spi_senddata

(spi2,data)

;while

(spi_getflagstatus

(spi2,spi_flag_rxne)

== reset)

;spi_receivedata

(spi2)

;spi_cmd

(spi2,disable)

;

這是我使用的時候,一段簡單的spi通訊的示例,請按照實際修改。

arm linux驅動開發學習2

驅動測試階段 wifi模組始終無法載入成功,usb wifi插上之後,始終無法顯示wifi網路資訊 lib modules 4.1.15 ifconfig a eth0 link encap ethernet hwaddr00 04 9f 04 d2 35 inet addr 192.168 1.5...

arm linux驅動開發學習6

靜態編譯 將驅動原始碼放到kernel核心原始碼所對應的資料夾下面 修改kconfig配置 修改makefile make menuconfig配置圖形介面 生成zimage映象檔案 動態編譯 將驅動檔案編譯成.ko檔案 將test.ko檔案拷貝到 lib module 4.1.15 目錄下 dep...

ARM Linux驅動開發環境

目的 梳理arm linux驅動開發所需的環境和流程,記錄遇到的問題。環境介紹 pc機 編寫驅動程式和測試 伺服器 編譯驅動程式生成.ko檔案,編譯測試 生成執行程式 單板 jz2440 準備工作 linux核心 linux 2.6.22.6以及對應的補丁檔案 工具鏈 gcc version 3.4...