前兩天寫了乙個《驅動模組使用i2c匯流排範例》。由於spi和i2c類似,加上有空閒時間,故參考之前寫的i2c實現了這個spi模組。**如下,這個**未經除錯,我目前的板子沒有用到spi介面,但是總體架構應該沒錯的。
[cpp]view plain
copy
?#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 拿到乙個開發板後,燒上系統,那我們基本上就有了平台驅...