SPI 驅(qū)動(dòng)源文件目錄
Linux common spi driver
kernel-4.14/drivers/spi/spi.c Linux 提供的通用接口封裝層驅(qū)動(dòng)
kernel-4.14/drivers/spi/spidev.c linux 提供的 SPI 通用設(shè)備驅(qū)動(dòng)程序
kernel-4.14/include/linux/spi/spi.h linux 提供的包含 SPI 的主要數(shù)據(jù)結(jié)構(gòu)和函數(shù)
spi 控制器驅(qū)動(dòng),IC 廠商提供,不同廠商命名不同
kernel-4.14/drivers/spi/spi-mt65xx.c MTK SPI 控制器驅(qū)動(dòng)
kernel-4.14/drivers/spi/spi-mt65xx-dev.c
kernel-4.14/include/linux/platform_data/spi-mt65xx.h
dts
kernel-4.14/arch/arm/boot/dts/...
kernel-4.14/arch/arm64/boot/dts/...
以上文件對(duì)應(yīng)如下 SPI 驅(qū)動(dòng)軟件架構(gòu):
SPI 控制器驅(qū)動(dòng)程序
SPI 控制器不用關(guān)心設(shè)備的具體功能,它只負(fù)責(zé)把上層協(xié)議驅(qū)動(dòng)準(zhǔn)備好的數(shù)據(jù)按 SPI 總線的時(shí)序要求發(fā)送給 SPI 設(shè)備,同時(shí)把從設(shè)備收到的數(shù)據(jù)返回給上層的協(xié)議驅(qū)動(dòng),因此,內(nèi)核把 SPI 控制器的驅(qū)動(dòng)程序獨(dú)立出來。
SPI 控制器驅(qū)動(dòng)負(fù)責(zé)控制具體的控制器硬件,諸如 DMA 和中斷操作等等,因?yàn)槎鄠€(gè)上層的協(xié)議驅(qū)動(dòng)可能會(huì)通過控制器請(qǐng)求數(shù)據(jù)傳輸操作,所以,SPI 控制器驅(qū)動(dòng)同時(shí)也要負(fù)責(zé)對(duì)這些請(qǐng)求進(jìn)行隊(duì)列管理,保證先進(jìn)先出的原則。
SPI 通用接口封裝層
為了簡(jiǎn)化 SPI 驅(qū)動(dòng)程序的編程工作,同時(shí)也為了降低【協(xié)議驅(qū)動(dòng)程序】和【控制器驅(qū)動(dòng)程序】的耦合程度,內(nèi)核把控制器驅(qū)動(dòng)和協(xié)議驅(qū)動(dòng)的一些通用操作封裝成標(biāo)準(zhǔn)的接口,加上一些通用的邏輯處理操作,組成了 SPI 通用接口封裝層。
這樣的好處是,對(duì)于控制器驅(qū)動(dòng)程序,只要實(shí)現(xiàn)標(biāo)準(zhǔn)的接口回調(diào) API,并把它注冊(cè)到通用接口層即可,無需直接和協(xié)議層驅(qū)動(dòng)程序進(jìn)行交互。而對(duì)于協(xié)議層驅(qū)動(dòng)來說,只需通過通用接口層提供的 API 即可完成設(shè)備和驅(qū)動(dòng)的注冊(cè),并通過通用接口層的 API 完成數(shù)據(jù)的傳輸,無需關(guān)注 SPI 控制器驅(qū)動(dòng)的實(shí)現(xiàn)細(xì)節(jié)。
SPI 協(xié)議驅(qū)動(dòng)程序
SPI 設(shè)備的具體功能是由 SPI 協(xié)議驅(qū)動(dòng)程序完成的,SPI 協(xié)議驅(qū)動(dòng)程序了解設(shè)備的功能和通信數(shù)據(jù)的協(xié)議格式。向下,協(xié)議驅(qū)動(dòng)通過通用接口層和控制器交換數(shù)據(jù),向上,協(xié)議驅(qū)動(dòng)通常會(huì)根據(jù)設(shè)備具體的功能和內(nèi)核的其它子系統(tǒng)進(jìn)行交互。
例如,和 MTD 層交互以便把 SPI 接口的存儲(chǔ)設(shè)備實(shí)現(xiàn)為某個(gè)文件系統(tǒng),和 TTY 子系統(tǒng)交互把 SPI 設(shè)備實(shí)現(xiàn)為一個(gè) TTY 設(shè)備,和網(wǎng)絡(luò)子系統(tǒng)交互以便把一個(gè) SPI 設(shè)備實(shí)現(xiàn)為一個(gè)網(wǎng)絡(luò)設(shè)備。如果是一個(gè)專有的 SPI 設(shè)備,我們也可以按設(shè)備的協(xié)議要求,實(shí)現(xiàn)自己的專有協(xié)議驅(qū)動(dòng)。
SPI 通用設(shè)備驅(qū)動(dòng)程序
考慮到連接在 SPI 控制器上的設(shè)備的可變性,在內(nèi)核沒有配備相應(yīng)的協(xié)議驅(qū)動(dòng)程序,對(duì)于這種情況,內(nèi)核為我們準(zhǔn)備了通用的 SPI 設(shè)備驅(qū)動(dòng)程序,該通用設(shè)備驅(qū)動(dòng)程序向用戶空間提供了控制 SPI 控制的控制接口,具體的協(xié)議控制和數(shù)據(jù)傳輸工作交由用戶空間根據(jù)具體的設(shè)備來完成,在這種方式中,只能采用同步的方式和 SPI 設(shè)備進(jìn)行通信,所以通常用于一些數(shù)據(jù)量較少的簡(jiǎn)單 SPI 設(shè)備。
-
控制器
+關(guān)注
關(guān)注
112文章
16376瀏覽量
178224 -
驅(qū)動(dòng)
+關(guān)注
關(guān)注
12文章
1840瀏覽量
85310 -
SPI
+關(guān)注
關(guān)注
17文章
1707瀏覽量
91642
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論