使用者空間 spi

2021-06-16 09:13:46 字數 1872 閱讀 9673

1.  spi_device

雖然使用者空間不需要直接用到spi_device結構體,但是這個結構體和使用者空間的程式有密切的關係,理解它的成員有助於理解spi裝置節點的ioctl命令,所以首先來介紹它。

在核心中,每個spi_device代表乙個物理的spi裝置。它的成員如程式清單 1.1所示。

程式清單 1.1 spi_device

struct spi_device ;

return spi_register_board_info(&info, 1);

這樣只要控制器驅動載入了,spidev模組就會和這個裝置繫結,並為裝置申請乙個裝置號,主裝置號為153,次裝置號和裝置載入的次序有關。

目前spidev支援最多32個裝置。裝置的名字是spidevx.d,其中x是匯流排編號,d是裝置的片選號。如果正確安裝並配置了udev,/dev目錄下便會生成spidevx.d

裝置節點。直接對這些裝置節點操作就行了。

spidev的裝置節點的介面包括open/close/read/write/ioctl。

~~~~~~~~~~~~~~~~~~~~~~~~~

其中open/close沒有什麼特別之處。

read/write的話有大小的限制,讀寫的大小預設不能超過4096位元組。這個大小是乙個模組載入引數,可以修改。

允許多個使用者同時開啟裝置節點,spidev使用mutext進行互斥,多個使用者同時讀寫時只有乙個活動的使用者,其他使用者睡眠。

spidev的ioctl命令。

~~~~~~~~

spi_ioc_rd_mode:讀取spi_device的mode。

spi_ioc_rd_lsb_first:如果是spi_lsb_first的方式則返回1。

spi_ioc_rd_bits_per_word:讀取spi_device的bits_per_word.

spi_ioc_rd_max_speed_hz:讀取spi_device的max_speed_hz.

spi_ioc_wr_mode:設定spi_device的mode,並呼叫spi_setup立即使設定生效。

spi_ioc_wr_lsb_first:設定spi使用spi_lsb_first的傳輸模式。立即生效。

spi_ioc_wr_bits_per_word:讀取字長。

spi_ioc_wr_max_speed_hz:設定時鐘速率。

無論讀取,使用者傳輸的第三個引數都被當作緩衝位址指標。讀取時存放結果,寫入時存放要寫的內容。

spi_ioc_message:這個命令用來進行複雜的通訊。引數涉及到乙個結構體。各個成員的意義與spi_transfer一致。

struct spi_ioc_transfer ;

核心文件中乙個例子:

[cpp]view plain

copy

print?

static

void do_msg(int fd, int len) 

printf("response(%2d, %2d): ", len, status); 

for (bp = buf; len; len--) 

printf(" %02x", *bp++); 

printf("/n"); 

核心在documentation/spi目錄下有spidev的例子。

注意雖然多個使用者不能同一時刻對spi進行設定或讀寫,但是同一使用者卻無法組織其他使用者修改同一裝置的設定。

舉例來說,usr1開啟裝置節點,然後使用ioctl設定了時鐘速率,此時usr1執行緒被排程出去,然後usr2操作同乙個裝置,將它的時鐘設為另乙個值。

此時usr1重新排程去使用read函式,則達不到預期的效果。

建議不要有兩個程式操作spidevx.d裝置節點。

使用者空間的spi驅動

如果想要在使用者空間編寫spi驅動,這就要在核心的arch mach board c 中宣告乙個spi board info,它的名字一定要是 spidev 比如 struct spi board info info return spi register board info info,1 這樣只...

使用者空間的spi驅動

如果想要在使用者空間編寫spi驅動,這就要在核心的arch mach board c 中宣告乙個spi board info,它的名字一定要是 spidev 比如 struct spi board info info return spi register board info info,1 這樣只...

核心空間與使用者空間

1.核心態與使用者態的區別 1 核心態 的 不受任何限制,可以訪問 所有處理器指令集 記憶體位址以及i o空間 2 使用者態的 只能訪問其位址空間的頁表項中規定的虛擬位址。2.使用者態到核心態的切換方式 1 系統呼叫 軟中斷的一種 由使用者程序主動發起 2 異常 當cpu在執行執行在使用者態下的程式...