驅動模組使用SPI匯流排範例

2021-06-25 14:24:13 字數 3298 閱讀 1491

前兩天寫了乙個《驅動模組使用i2c匯流排範例》。由於spi和i2c類似,加上有空閒時間,故參考之前寫的i2c實現了這個spi模組。**如下,這個**未經除錯,我目前的板子沒有用到spi介面,但是總體架構應該沒錯的。

[cpp]view plain

copy

print

?#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

structspi_api ;  

#define spi_minors    32

#define spi_mode_mask (spi_cpha | spi_cpol | spi_cs_high /

| spi_lsb_first | spi_3wire | spi_loop /  

| spi_no_cs | spi_ready)  

staticlist_head(spi_api_list);  

staticdefine_spinlock(spi_api_list_lock);  

static

structspi_api *get_spi_api(intbus_id)  

spi_api = null;  

found:  

spin_unlock(&spi_api_list_lock);  

returnspi_api;  

}static

structspi_api *add_spi_api(structspi_device *spi)  

spi_api = kzalloc(sizeof(*spi_api), gfp_kernel);  

if(!spi_api)  

returnnull;  

spi_api->spi = spi;  

spin_lock(&spi_api_list_lock);  

list_add_tail(&spi_api->list, &spi_api_list);  

spin_unlock(&spi_api_list_lock);  

returnspi_api;  

}static

voiddel_spi_api(structspi_api *spi_api)  

static

intspi_api_do_set(intbus_id,  

u8 mode,   

u8 bits_per_word,   

u8 max_speed_hz)  

static

intspi_api_do_write(intbus_id,constu8 *buf,size_tlen)  

static

intspi_api_do_read(intbus_id, u8 *buf,size_tlen)  

static

intspi_api_do_write_then_read(intbus_id,  

constu8 *txbuf, unsigned n_tx,  

u8 *rxbuf, unsigned n_rx)  

static

intspi_api_probe(structspi_device *spi)  

static

intspi_api_remove(structspi_device *spi)  

static

structspi_driver spi_api_driver = ,  

.probe = spi_api_probe,  

.remove = spi_api_remove,  

};  

static

int__init spi_api_init(void)  

printk("spi_api_init/n"

);  

return0 ;    

}static

void__exit spi_api_exit(void)  

module_author("loon, "

);  

module_description("spi spi_api driver"

);  

module_license("gpl"

);  

module_init(spi_api_init);  

module_exit(spi_api_exit);  

export_symbol_gpl(spi_api_do_set);  

export_symbol_gpl(spi_api_do_write);  

export_symbol_gpl(spi_api_do_read);  

export_symbol_gpl(spi_api_do_write_then_read);  

spi匯流排 上層呼叫 SPI匯流排使用入門

spi 匯流排協議及 spi時序圖詳解 spi,是英語 serial peripheral inte ce 的縮寫,顧名思義就是序列外圍裝置介面。spi,是一種高速的,全雙工,同步的通訊 匯流排,並且在晶元的管腳上只占用四根線,節約了晶元的管腳,同時為 pcb的布局上節省空間,提供方便,正是出於這種...

SPI 匯流排驅動和裝置驅動的匹配

關於spi driver和spi device的匹配 第一種情況 spidev.c中spi driver中name欄位 static structspi driverspidev spi driver 和mach smdk6410.c中的modalias欄位 static structspi boa...

linux下的SPI模組驅動使用

由於linux的驅動都有很好的框架性,但是對剛開始學習的人來說,在不太懂框架的基礎之下學習是很麻煩的事,網上很多都把這個框架給完整性分析了一下,但是具體怎麼要能用,也沒有怎麼說,這裡我總結一下。1 驅動分為平台驅動 控制器驅動 裝置驅動 裝置。2 拿到乙個開發板後,燒上系統,那我們基本上就有了平台驅...