发布: 18_SPI_Master驱动程序框架
53
IMX6ULL/doc_pic/11_SPI/18_SPI_Master驱动程序框架.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# SPI_Master驱动程序框架 #
|
||||
|
||||
* 参考内核源码: `drivers\spi\spi.c`
|
||||
|
||||
## 1. SPI传输概述
|
||||
|
||||
### 1.1 数据组织方式
|
||||
|
||||
使用SPI传输时,最小的传输单位是"spi_transfer",
|
||||
|
||||
对于一个设备,可以发起多个spi_transfer,
|
||||
|
||||
这些spi_transfer,会放入一个spi_message里。
|
||||
|
||||
* spi_transfer:指定tx_buf、rx_buf、len
|
||||

|
||||
|
||||
* 同一个SPI设备的spi_transfer,使用spi_message来管理:
|
||||

|
||||
|
||||
* 同一个SPI Master下的spi_message,放在一个队列里:
|
||||

|
||||
|
||||
|
||||
|
||||
所以,反过来,SPI传输的流程是这样的:
|
||||
|
||||
* 从spi_master的队列里取出每一个spi_message
|
||||
* 从spi_message的队列里取出一个spi_transfer
|
||||
* 处理spi_transfer
|
||||
|
||||
### 1.2 SPI控制器数据结构
|
||||
|
||||
参考内核文件:`include\linux\spi\spi.h`
|
||||
|
||||
Linux中使用spi_master结构体描述SPI控制器,有两套传输方法:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 2. SPI传输函数的两种方法
|
||||
|
||||
### 2.1 老方法
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 2.2 新方法
|
||||
|
||||

|
||||
|
||||
BIN
IMX6ULL/doc_pic/11_SPI/18_SPI_Master驱动程序框架.tif
Normal file
BIN
IMX6ULL/doc_pic/11_SPI/pic/80_spi_transfer.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
IMX6ULL/doc_pic/11_SPI/pic/81_spi_message.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
IMX6ULL/doc_pic/11_SPI/pic/82_spi_master.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
IMX6ULL/doc_pic/11_SPI/pic/83_spi_master.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
IMX6ULL/doc_pic/11_SPI/pic/84_spi_transfer_old.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
IMX6ULL/doc_pic/11_SPI/pic/85_spi_transfer_new.png
Normal file
|
After Width: | Height: | Size: 215 KiB |
@@ -577,6 +577,12 @@ git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
|
||||
17_OLED_Framebuffer驱动_上机实验
|
||||
```
|
||||
|
||||
* 2021.05.31 发布"SPI子系统":
|
||||
|
||||
```shell
|
||||
18_SPI_Master驱动程序框架
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
53
STM32MP157/doc_pic/11_SPI/18_SPI_Master驱动程序框架.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# SPI_Master驱动程序框架 #
|
||||
|
||||
* 参考内核源码: `drivers\spi\spi.c`
|
||||
|
||||
## 1. SPI传输概述
|
||||
|
||||
### 1.1 数据组织方式
|
||||
|
||||
使用SPI传输时,最小的传输单位是"spi_transfer",
|
||||
|
||||
对于一个设备,可以发起多个spi_transfer,
|
||||
|
||||
这些spi_transfer,会放入一个spi_message里。
|
||||
|
||||
* spi_transfer:指定tx_buf、rx_buf、len
|
||||

|
||||
|
||||
* 同一个SPI设备的spi_transfer,使用spi_message来管理:
|
||||

|
||||
|
||||
* 同一个SPI Master下的spi_message,放在一个队列里:
|
||||

|
||||
|
||||
|
||||
|
||||
所以,反过来,SPI传输的流程是这样的:
|
||||
|
||||
* 从spi_master的队列里取出每一个spi_message
|
||||
* 从spi_message的队列里取出一个spi_transfer
|
||||
* 处理spi_transfer
|
||||
|
||||
### 1.2 SPI控制器数据结构
|
||||
|
||||
参考内核文件:`include\linux\spi\spi.h`
|
||||
|
||||
Linux中使用spi_master结构体描述SPI控制器,有两套传输方法:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 2. SPI传输函数的两种方法
|
||||
|
||||
### 2.1 老方法
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 2.2 新方法
|
||||
|
||||

|
||||
|
||||
BIN
STM32MP157/doc_pic/11_SPI/18_SPI_Master驱动程序框架.tif
Normal file
BIN
STM32MP157/doc_pic/11_SPI/pic/80_spi_transfer.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
STM32MP157/doc_pic/11_SPI/pic/81_spi_message.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
STM32MP157/doc_pic/11_SPI/pic/82_spi_master.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
STM32MP157/doc_pic/11_SPI/pic/83_spi_master.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
STM32MP157/doc_pic/11_SPI/pic/84_spi_transfer_old.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
STM32MP157/doc_pic/11_SPI/pic/85_spi_transfer_new.png
Normal file
|
After Width: | Height: | Size: 215 KiB |