99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度解析Linux SPI總線和設(shè)備驅(qū)動架構(gòu)

Q4MP_gh_c472c21 ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2018-02-07 08:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

SPI是"Serial Peripheral Interface" 的縮寫,是一種四線制的同步串行通信接口,用來連接微控制器、傳感器、存儲設(shè)備,SPI設(shè)備分為主設(shè)備和從設(shè)備兩種,用于通信和控制的四根線分別是:

·CS 片選信號

·SCK 時鐘信號

·MISO 主設(shè)備的數(shù)據(jù)輸入、從設(shè)備的數(shù)據(jù)輸出腳

·MOSI 主設(shè)備的數(shù)據(jù)輸出、從設(shè)備的數(shù)據(jù)輸入腳

硬件結(jié)構(gòu)

通常,負責發(fā)出時鐘信號的設(shè)備我們稱之為主設(shè)備,另一方則作為從設(shè)備,下圖是一個SPI系統(tǒng)的硬件連接示例:

深度解析Linux SPI總線和設(shè)備驅(qū)動架構(gòu)

圖1.1 SPI硬件結(jié)構(gòu)圖

如上圖所示,主設(shè)備對應(yīng)SOC芯片中的SPI控制器,通常,一個SOC中可能存在多個SPI控制器,像上面的例子所示,SOC芯片中有3個SPI控制器。每個控制器下可以連接多個SPI從設(shè)備,每個從設(shè)備有各自獨立的CS引腳。每個從設(shè)備共享另外3個信號引腳:SCK、MISO、MOSI。任何時刻,只有一個CS引腳處于有效狀態(tài),與該有效CS引腳連接的設(shè)備此時可以與主設(shè)備(SPI控制器)通信,其它的從設(shè)備處于等待狀態(tài),并且它們的3個引腳必須處于高阻狀態(tài)。

工作時序

按照時鐘信號和數(shù)據(jù)信號之間的相位關(guān)系,SPI有4種工作時序模式:

我們用CPOL表示時鐘信號的初始電平的狀態(tài),CPOL為0表示時鐘信號初始狀態(tài)為低電平,為1表示時鐘信號的初始電平是高電平。另外,我們用CPHA來表示在那個時鐘沿采樣數(shù)據(jù),CPHA為0表示在首個時鐘變化沿采樣數(shù)據(jù),而CPHA為1則表示要在第二個時鐘變化沿來采樣數(shù)據(jù)。內(nèi)核用CPOL和CPHA的組合來表示當前SPI需要的工作模式:

·CPOL=0,CPHA=1 模式0

·CPOL=0,CPHA=1 模式1

·CPOL=1,CPHA=0 模式2

·CPOL=1,CPHA=1 模式3

軟件架構(gòu)

在內(nèi)核的SPI驅(qū)動的軟件架構(gòu)中,進行了合理的分層和抽象,如下圖所示:

圖2.1 SPI驅(qū)動的軟件架構(gòu)

SPI控制器驅(qū)動程序

SPI控制器不用關(guān)心設(shè)備的具體功能,它只負責把上層協(xié)議驅(qū)動準備好的數(shù)據(jù)按SPI總線的時序要求發(fā)送給SPI設(shè)備,同時把從設(shè)備收到的數(shù)據(jù)返回給上層的協(xié)議驅(qū)動,因此,內(nèi)核把SPI控制器的驅(qū)動程序獨立出來。SPI控制器驅(qū)動負責控制具體的控制器硬件,諸如DMA和中斷操作等等,因為多個上層的協(xié)議驅(qū)動可能會通過控制器請求數(shù)據(jù)傳輸操作,所以,SPI控制器驅(qū)動同時也要負責對這些請求進行隊列管理,保證先進先出的原則。

SPI通用接口封裝層

為了簡化SPI驅(qū)動程序的編程工作,同時也為了降低協(xié)議驅(qū)動程序和控制器驅(qū)動程序的耦合程度,內(nèi)核把控制器驅(qū)動和協(xié)議驅(qū)動的一些通用操作封裝成標準的接口,加上一些通用的邏輯處理操作,組成了SPI通用接口封裝層。這樣的好處是,對于控制器驅(qū)動程序,只要實現(xiàn)標準的接口回調(diào)API,并把它注冊到通用接口層即可,無需直接和協(xié)議層驅(qū)動程序進行交互。而對于協(xié)議層驅(qū)動來說,只需通過通用接口層提供的API即可完成設(shè)備和驅(qū)動的注冊,并通過通用接口層的API完成數(shù)據(jù)的傳輸,無需關(guān)注SPI控制器驅(qū)動的實現(xiàn)細節(jié)。

SPI協(xié)議驅(qū)動程序

上面我們提到,控制器驅(qū)動程序并不清楚和關(guān)注設(shè)備的具體功能,SPI設(shè)備的具體功能是由SPI協(xié)議驅(qū)動程序完成的,SPI協(xié)議驅(qū)動程序了解設(shè)備的功能和通信數(shù)據(jù)的協(xié)議格式。向下,協(xié)議驅(qū)動通過通用接口層和控制器交換數(shù)據(jù),向上,協(xié)議驅(qū)動通常會根據(jù)設(shè)備具體的功能和內(nèi)核的其它子系統(tǒng)進行交互,例如,和MTD層交互以便把SPI接口的存儲設(shè)備實現(xiàn)為某個文件系統(tǒng),和TTY子系統(tǒng)交互把SPI設(shè)備實現(xiàn)為一個TTY設(shè)備,和網(wǎng)絡(luò)子系統(tǒng)交互以便把一個SPI設(shè)備實現(xiàn)為一個網(wǎng)絡(luò)設(shè)備,等等。當然,如果是一個專有的SPI設(shè)備,我們也可以按設(shè)備的協(xié)議要求,實現(xiàn)自己的專有協(xié)議驅(qū)動。

SPI通用設(shè)備驅(qū)動程序

有時候,考慮到連接在SPI控制器上的設(shè)備的可變性,在內(nèi)核沒有配備相應(yīng)的協(xié)議驅(qū)動程序,對于這種情況,內(nèi)核為我們準備了通用的SPI設(shè)備驅(qū)動程序,該通用設(shè)備驅(qū)動程序向用戶空間提供了控制SPI控制的控制接口,具體的協(xié)議控制和數(shù)據(jù)傳輸工作交由用戶空間根據(jù)具體的設(shè)備來完成,在這種方式中,只能采用同步的方式和SPI設(shè)備進行通信,所以通常用于一些數(shù)據(jù)量較少的簡單SPI設(shè)備。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

    213828
  • SPI總線
    +關(guān)注

    關(guān)注

    4

    文章

    104

    瀏覽量

    28041
  • 設(shè)備驅(qū)動
    +關(guān)注

    關(guān)注

    0

    文章

    68

    瀏覽量

    11143

原文標題:Linux SPI總線和設(shè)備驅(qū)動架構(gòu)你都懂了嗎?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    GPU架構(gòu)深度解析

    GPU架構(gòu)深度解析從圖形處理到通用計算的進化之路圖形處理單元(GPU),作為現(xiàn)代計算機中不可或缺的一部分,已經(jīng)從最初的圖形渲染專用處理器,發(fā)展成為強大的并行計算引擎,廣泛應(yīng)用于人工智能、科學(xué)計算
    的頭像 發(fā)表于 05-30 10:36 ?386次閱讀
    GPU<b class='flag-5'>架構(gòu)</b><b class='flag-5'>深度</b><b class='flag-5'>解析</b>

    能否提供Linux下USB轉(zhuǎn)SPI模式的測試程序?

    我已在 Linux 上成功配置了 CY7C65211 器件,使其在 USB 轉(zhuǎn) SPI 模式下運行。 使用 lsusb 命令,設(shè)備顯示如下:總線 003
    發(fā)表于 05-22 06:16

    基于RK3576開發(fā)板的SPI使用說明

    ,完全可以不必理會SPI協(xié)議的詳細規(guī)定。只需要按照驅(qū)動層提供給我們的操作SPI外設(shè)的操作接口函數(shù)就可以像操作linux中其他普通設(shè)備文件那樣
    的頭像 發(fā)表于 05-07 10:31 ?759次閱讀
    基于RK3576開發(fā)板的<b class='flag-5'>SPI</b>使用說明

    解鎖未來汽車電子技術(shù):軟件定義車輛與區(qū)域架構(gòu)深度解析

    解鎖未來汽車電子技術(shù):軟件定義車輛與區(qū)域架構(gòu)深度解析 ——立即下載白皮書,搶占智能汽車發(fā)展先機 *附件:解鎖未來汽車電子技術(shù):軟件定義車輛與區(qū)域架構(gòu)
    的頭像 發(fā)表于 04-27 11:58 ?583次閱讀

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-I2C設(shè)備驅(qū)動Linux下的I2C驅(qū)動簡介

    的通信協(xié)議,其中一個設(shè)備作為主設(shè)備控制總線,并與多個從設(shè)備通信。在Linux內(nèi)核中,I2C驅(qū)動
    發(fā)表于 04-15 10:39

    飛凌嵌入式ElfBoard ELF 1板卡-I2C設(shè)備驅(qū)動Linux下的I2C驅(qū)動簡介

    的通信協(xié)議,其中一個設(shè)備作為主設(shè)備控制總線,并與多個從設(shè)備通信。在Linux內(nèi)核中,I2C驅(qū)動
    發(fā)表于 04-15 10:19

    對于一款新的BSP如何添加SPI驅(qū)動

    介紹SPI總線由開發(fā),是一種,由四個IO口組成:CS、SCLK、MISO、MOSI;通常用于CPU和外設(shè)之間進行通信,常見的SPI總線設(shè)備
    的頭像 發(fā)表于 02-26 19:00 ?513次閱讀
    對于一款新的BSP如何添加<b class='flag-5'>SPI</b><b class='flag-5'>驅(qū)動</b>

    SPI通信總線概述和Verilog實現(xiàn)

    SPI = Serial Peripheral Interface,是串行外圍設(shè)備接口,是一種高速,全雙工,同步的通信總線。
    的頭像 發(fā)表于 02-07 14:28 ?1419次閱讀
    <b class='flag-5'>SPI</b>通信<b class='flag-5'>總線</b>概述和Verilog實現(xiàn)

    迅為RK3568開發(fā)板驅(qū)動指南Linux中通用SPI設(shè)備驅(qū)動

    迅為RK3568開發(fā)板驅(qū)動指南Linux中通用SPI設(shè)備驅(qū)動
    的頭像 發(fā)表于 01-23 11:02 ?2843次閱讀
    迅為RK3568開發(fā)板<b class='flag-5'>驅(qū)動</b>指南<b class='flag-5'>Linux</b>中通用<b class='flag-5'>SPI</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>驅(qū)動</b>

    【S32K146 RT-thread】之 SPI驅(qū)動適配

    概述RT-Thread對SPI總線驅(qū)動,抽象出了spibus的設(shè)備驅(qū)動,我們基于S32K146的硬件學(xué)習(xí)spibus
    的頭像 發(fā)表于 11-01 08:11 ?1285次閱讀
    【S32K146 RT-thread】之 <b class='flag-5'>SPI</b><b class='flag-5'>驅(qū)動</b>適配

    自動售貨機MDB總線周邊設(shè)備地址中文解析(三)

    自動售貨機MDB協(xié)議中文解析(三)MDB總線周邊設(shè)備地址
    發(fā)表于 09-09 10:43 ?0次下載

    SPI總線的定義和特點

    SPI總線(Serial Peripheral Interface),全稱為串行外圍設(shè)備接口,是由Motorola公司提出并定義的一種同步、串行、高速的通信總線。
    的頭像 發(fā)表于 09-03 14:05 ?2175次閱讀

    linux系統(tǒng)的設(shè)備驅(qū)動一般分幾類

    Linux系統(tǒng)的設(shè)備驅(qū)動是操作系統(tǒng)與硬件設(shè)備之間的橋梁,負責實現(xiàn)操作系統(tǒng)與硬件設(shè)備之間的通信和控制。Li
    的頭像 發(fā)表于 08-30 15:13 ?1027次閱讀

    Linux設(shè)備驅(qū)動程序分類有哪些

    Linux設(shè)備驅(qū)動程序是操作系統(tǒng)與硬件設(shè)備之間的橋梁,負責實現(xiàn)硬件設(shè)備與操作系統(tǒng)之間的通信和控制。Lin
    的頭像 發(fā)表于 08-30 15:11 ?1240次閱讀

    Linux 驅(qū)動開發(fā)與應(yīng)用開發(fā),你知道多少?

    一、Linux驅(qū)動開發(fā)與應(yīng)用開發(fā)的區(qū)別開發(fā)層次不同:Linux驅(qū)動開發(fā)主要是針對硬件設(shè)備進行編程,處于操作系統(tǒng)內(nèi)核層,直接與硬件交互,為上層
    的頭像 發(fā)表于 08-30 12:16 ?1599次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>驅(qū)動</b>開發(fā)與應(yīng)用開發(fā),你知道多少?