全志R16_SPI匯流排驅動的使用文件
介紹Linux 核心中SPI 子系統的介面及使用方法,為SPI裝置驅動的開發提供參考。適用於基於Linux 3.4核心的全志R16硬體平臺。
2. 2. 模組介紹
2.1. 模組功能介紹
Linux 中 SPI 體系結構圖 2.1 所示,圖中用分割線分成了三個層次:
1. 使用者空間,包括所有使用 SPI 裝置的應用程式;
2. 核心,也就是驅動部分;
3. 硬體,指實際物理裝置,包括了 SPI 控制器和 SPI 外設。
其中,Linux 核心中的 SPI 驅動程式僅支援主裝置,邏輯上又可以分為 3 個部分:
1. SPI 核心(SPI Core):實現對 SPI 匯流排驅動及 SPI 裝置驅動的管理;
2. SPI 匯流排驅動(SPI Master Driver):針對不同型別的 SPI 控制器,實現對 SPI 匯流排訪問的具體方法;
3. SPI 裝置驅動(SPI Device Driver):針對特定的 SPI 裝置,實現具體的功能,包括 read,write 以及 ioctl 等對使用者層操作的介面。
SPI匯流排驅動主要實現了適用於特定SPI控制器的匯流排讀寫方法,並註冊到Linux核心的SPI架構,SPI外設就可以透過SPI架構完成裝置和匯流排的適配。但是匯流排驅動本身並不會進行任何的通訊,它只是提供通訊的實現,等待裝置驅動來呼叫其函式。
SPI Core的管理正好遮蔽了SPI匯流排驅動的差異,使得SPI裝置驅動可以忽略各種匯流排控制器的不同,不用考慮其如何與硬體裝置通訊的細節。
2.2. 相關術語介紹
Sunxi 指Allwinner 的一系列 SOC 硬體平臺
SPI:Serial Peripheral Interface,同步序列外設介面
SPI Master:SPI 主裝置
SPI Device:指 SPI 外部裝置
2.3. 模組配置介紹
2.3.1 sys_config.fex sys_config.fex 配置說明
在不同的 Sunxi 硬體平臺中,SPI 控制器的數目也不同,但對於每一個 SPI 控制器來說,
在 sys_config.fex 中配置引數相似,如下:
[spi0]
spi_used = 1
spi_cs_bitmap = 1
spi_cs0 = port:PC27<3><1><default><default>
spi_sclk = port:PC02<3><default><default><default>
spi_mosi = port:PC00<3><default><default><default>
spi_miso = port:PC01<3><default><default><default>
其中:
1. spi_used 置為 1 表示使能,0 表示不使能;
2. spi_cs_bitmap,由於 SPI 控制器支援多個 CS,這一個參數列示 CS 的掩碼;
3. spi_cs0、spi_sclk、spi_mosi 和 spi_miso 用於配置相應的 GPIO。
對於 SPI 裝置,還需要透過以下引數配置 SPI board info,這些資訊會透過 SPI 子系統的介面 spi_register_board_info()在 SPI 匯流排驅動初始化前就註冊到核心中。
[spi_devices]
spi_dev_num = 1
[spi_board0]
modalias = "m25p32"
max_speed_hz = 33000000
bus_num = 0
chip_select = 0
mode = 0
其中:
1. spi_dev_num 表示 SPI 裝置的數目,決定了下面有幾個[spi_boardx];
2. modalias,SPI 裝置的名字,在做匯流排適配時會用到;
3. max_speed_hz,最大傳輸速度,單位是 Hz;
4. bus_num,SPI 控制器的序號,從 0 開始編號;
5. chip_select,理論上可以選 0,1,2,3,取決於硬體的 CS 連線
6. mode,即 spi_board_info 結構中的 mode 成員,其定義同 spi_device 中的 mode
來源:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529038/viewspace-2653738/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux核心匯流排驅動模型-驅動篇Linux模型
- 【linux】驅動-6-匯流排-裝置-驅動Linux
- pci匯流排驅動及pci裝置驅動註冊
- Linux驅動之I2C匯流排裝置以及驅動Linux
- 基於匯流排裝置驅動模型的按鍵讀取驅動程式模型
- 華清平臺匯流排驅動201208(不同平臺)
- 匯流排
- 事件匯流排事件
- 自己動手寫事件匯流排(EventBus)事件
- 6.匯流排
- Linux的匯流排-裝置-驅動三者之間的關係和框架的理解Linux框架
- 序列匯流排的學習
- I2C匯流排 | I2C匯流排介紹
- 將Abp預設事件匯流排改造為分散式事件匯流排事件分散式
- Can匯流排介紹
- Vue 事件中央匯流排Vue事件
- Vue事件匯流排(EventBus)Vue事件
- ARM 匯流排協議協議
- Flutter中的事件匯流排(EventBus)Flutter事件
- Vue事件匯流排(EventBus)使用詳細介紹Vue事件
- 事件匯流排 + 函式計算構建雲上最佳事件驅動架構應用事件函式架構
- PCI匯流排基本概念
- CAN匯流排原理_學習
- I2C 匯流排
- 計算匯流排頻寬
- 大資料匯流排(DataHub)大資料
- 使用spi-gpio-custom模組配置SPI匯流排
- 事件匯流排的設計與實現事件
- 比 EventBus 更高效的事件匯流排(BusUtils)事件
- 企業服務匯流排ESB
- SpringCloud(六)Bus訊息匯流排SpringGCCloud
- SOFA 原始碼分析— 事件匯流排原始碼事件
- 手寫訊息匯流排LiveDataBusLiveData
- 在 .NET 中深入瞭解事件匯流排的使用與實現事件
- .Net Core微服務入門全紀錄(六)——EventBus-事件匯流排微服務事件
- 什麼是計算機的控制匯流排計算機
- IIC序列匯流排的組成及工作原理
- STM32的CAN匯流排初始化