SPI 控制器驅(qū)動層
SPI 控制器驅(qū)動層負(fù)責(zé)最底層的數(shù)據(jù)收發(fā),主要有以下功能:
- 申請必要的硬件資源,比如中斷、DMA 通道、DMA 內(nèi)存緩沖區(qū)等等
- 配置 SPI 控制器的工作模式和參數(shù),使之可以和相應(yīng)的設(shè)備進(jìn)行正確的數(shù)據(jù)交換
- 向通用接口層提供接口,使得上層的協(xié)議驅(qū)動可以通過通用接口層訪問控制器驅(qū)動
- 配合通用接口層,完成數(shù)據(jù)消息隊列的排隊和處理,直到消息隊列變空為止
SPI 主機(jī)驅(qū)動就是 SOC 的 SPI 控制器驅(qū)動。Linux 內(nèi)核使用 spi_master/spi_controller 表示 SPI 主機(jī)驅(qū)動,spi_master 是個結(jié)構(gòu)體,定義在 include/linux/spi/spi.h 文件中。
SPI 主機(jī)驅(qū)動的核心就是申請 spi_master,然后初始化 spi_master,最后向 Linux 內(nèi)核注冊 spi_master。
API 如下:
spi_alloc_master 函數(shù):申請 spi_master。
spi_master_put 函數(shù):釋放 spi_master。
spi_register_master函數(shù):注冊 spi_master。
spi_unregister_master 函數(shù):注銷 spi_master。
spi_bitbang_start函數(shù):注冊 spi_master。
spi_bitbang_stop 函數(shù):注銷 spi_master。
SPI 主機(jī)驅(qū)動的加載
以 MTK 為例,源碼來自于小米開源項目
https://github.com/MiCode/Xiaomi_Kernel_OpenSource
小米每做一個項目,都會把 kernel 部分開源,因為需要遵循 Linux GPL 開源協(xié)議。
【設(shè)備】聲明在設(shè)備樹中
kernel-4.14/arch/arm64/boot/dts/mediatek/mt6885.dts
【驅(qū)動】
kernel-4.14/drivers/spi/spi-mt65xx.c
匹配以后,probe 函數(shù)執(zhí)行,申請 spi_master,初始化 spi_master,最后向 Linux 內(nèi)核注冊 spi_master。
-
控制器
+關(guān)注
關(guān)注
112文章
16332瀏覽量
177808 -
驅(qū)動
+關(guān)注
關(guān)注
12文章
1838瀏覽量
85262 -
SPI
+關(guān)注
關(guān)注
17文章
1706瀏覽量
91507
發(fā)布評論請先 登錄
相關(guān)推薦
評論