开始发布: SPI子系统, 01_SPI视频概述,02_SPI协议介绍

This commit is contained in:
weidongshan
2022-02-16 16:23:40 +08:00
parent 3b480a253d
commit c7dae5e33c
19 changed files with 221 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
# SPI视频概述 #
# 1. SPI硬件框架
![image-20220216103153006](pic/01_hardware_block.jpg)
## 2. SPI视频涉及的内容
* SPI协议
* SPI驱动程序框架
* SPI总线设备驱动模型
* SPI设备树处理过程
* 简单的SPI设备驱动
* SPI ADC
* SPI OLED
* 内核自带的spi dev驱动
* 复杂的SPI设备驱动
* SPI+FrameBuffer
* SPI控制器驱动程序
* 使用GPIO实现
* 具体芯片的SPI控制器驱动程序分析
* SPI调试工具
* spi-tools
* 高性能QSPI
* 主控芯片用作SPI从设备
录制视频时留意这些知识点:
* SPI3线和SPI4线
* bits_per_word设置8和16会影响到啥
* 硬件片选和软件片选在驱动咋用

View File

@@ -0,0 +1,59 @@
# SPI协议介绍 #
参考资料:
* 《SPI Block Guide V04.01.pdf》
* 《S3C2440A_UserManual_Rev13.pdf》
## 1. SPI硬件知识
### 1.1 硬件连线
![](pic/01_hardware_block.jpg)
引脚含义如下:
| 引脚 | 含义 |
| -------- | ------------------------------------------------------------ |
| DO(MOSI) | Master Output, Slave Input<br />SPI主控用来发出数据SPI从设备用来接收数据 |
| DI(MISO) | Master Input, Slave Output<br />SPI主控用来发出数据SPI从设备用来接收数据 |
| SCK | Serial Clock时钟 |
| CS | Chip Select芯片选择引脚 |
### 1.2 SPI控制器内部结构
这个图等我们看完后面的SPI协议再回过头来讲解
![image-20220216121534549](pic/04_spi_block.png)
## 2. SPI协议
### 2.1 传输示例
假设现在主控芯片要传输一个0x56数据给SPI Flash时序如下
<img src="pic/02_spi_send_byte.png">
首先CS0先拉低选中SPI Flash0x56的二进制就是0b0101 0110因此在每个SCK时钟周期DO输出对应的电平。
SPI Flash会在每个时钟周期的上升沿读取D0上的电平。
### 2.2 SPI模式
在SPI协议中有两个值来确定SPI的模式。
CPOL:表示SPICLK的初始电平0为电平1为高电平
CPHA:表示相位即第一个还是第二个时钟沿采样数据0为第一个时钟沿1为第二个时钟沿
| CPOL | CPHA | 模式 | 含义 |
| :--: | :--: | :--: | :--------------------------------------------: |
| 0 | 0 | 0 | SPICLK初始电平为低电平在第一个时钟沿采样数据 |
| 0 | 1 | 1 | SPICLK初始电平为低电平在第二个时钟沿采样数据 |
| 1 | 0 | 2 | SPICLK初始电平为高电平在第一个时钟沿采样数据 |
| 1 | 1 | 3 | SPICLK初始电平为高电平在第二个时钟沿采样数据 |
我们常用的是模式0和模式3因为它们都是在上升沿采样数据不用去在乎时钟的初始电平是什么只要在上升沿采集数据就行。
极性选什么格式选什么通常去参考外接的模块的芯片手册。比如对于OLED查看它的芯片手册时序部分
<img src="pic/03_spi_protocol.png">
SCLK的初始电平我们并不需要关心只要保证在上升沿采样数据就行。

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

View File

@@ -372,11 +372,13 @@ git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
```shell
15_编写虚拟UART驱动程序_实现数据传输
```
* 2021.08.06 发布"UART子系统"
```shell
16_编写虚拟UART驱动程序_调试
```
* 2021.08.12 发布"UART子系统"
```shell
@@ -390,31 +392,37 @@ git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
19_编写console驱动
20_early_printk和earlycon
```
* 2021.08.17 完结"UART子系统"
```shell
21_RS485简单讲解
```
* 2021.10.11 发布"PCI和PCIe子系统"
```shell
01_从软件开发角度看待PCI和PCIe
```
* 2021.10.29 发布"PCI和PCIe子系统"
```shell
02_PCI设备的访问方法_非桥设备(type0)
```
* 2021.11.01 发布"PCI和PCIe子系统"
```shell
03_PCI设备的访问方法_桥设备(type1)
```
* 2021.11.11 发布"PCI和PCIe子系统"
```shell
04_从软件角度看PCIe设备的硬件结构
```
* 2021.11.18 发布"PCI和PCIe子系统"
```shell
@@ -426,41 +434,49 @@ git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
```shell
06_PCIe路由方式
```
* 2021.12.29 发布"PCI和PCIe子系统"
```shell
07_PCI驱动程序框架
```
* 2021.12.31 发布"PCI和PCIe子系统"
```shell
08_RK3399_PCIe芯片手册解读
```
* 2022.01.02 发布"PCI和PCIe子系统"
```shell
09_RK3399_PCIe_Host驱动分析_地址映射
```
* 2022.01.06 发布"PCI和PCIe子系统"
```shell
10_RK3399_PCIe_Host驱动分析_设备枚举
```
* 2022.01.17 发布"PCI和PCIe子系统"
```shell
11_INTx_MSI_MSIX三种中断机制分析
```
* 2022.01.20 发布"PCI和PCIe子系统"
```shell
12_INTx中断机制源码分析
```
* 2022.01.25 发布"PCI和PCIe子系统"
```shell
13_GICv3_LPI机制
```
* 2022.01.26 完结"PCI和PCIe子系统"
```shell
@@ -469,6 +485,13 @@ git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
16_怎么编写PCIe设备驱动程序
```
* 2021.02.16 发布"SPI子系统"
```shell
01_SPI视频概述
02_SPI协议介绍
```
## 6. 联系方式

View File

@@ -0,0 +1,40 @@
# SPI视频概述 #
# 1. SPI硬件框架
![image-20220216103153006](pic/01_hardware_block.jpg)
## 2. SPI视频涉及的内容
* SPI协议
* SPI驱动程序框架
* SPI总线设备驱动模型
* SPI设备树处理过程
* 简单的SPI设备驱动
* SPI ADC
* SPI OLED
* 内核自带的spi dev驱动
* 复杂的SPI设备驱动
* SPI+FrameBuffer
* SPI控制器驱动程序
* 使用GPIO实现
* 具体芯片的SPI控制器驱动程序分析
* SPI调试工具
* spi-tools
* 高性能QSPI
* 主控芯片用作SPI从设备
录制视频时留意这些知识点:
* SPI3线和SPI4线
* bits_per_word设置8和16会影响到啥
* 硬件片选和软件片选在驱动咋用

View File

@@ -0,0 +1,59 @@
# SPI协议介绍 #
参考资料:
* 《SPI Block Guide V04.01.pdf》
* 《S3C2440A_UserManual_Rev13.pdf》
## 1. SPI硬件知识
### 1.1 硬件连线
![](pic/01_hardware_block.jpg)
引脚含义如下:
| 引脚 | 含义 |
| -------- | ------------------------------------------------------------ |
| DO(MOSI) | Master Output, Slave Input<br />SPI主控用来发出数据SPI从设备用来接收数据 |
| DI(MISO) | Master Input, Slave Output<br />SPI主控用来发出数据SPI从设备用来接收数据 |
| SCK | Serial Clock时钟 |
| CS | Chip Select芯片选择引脚 |
### 1.2 SPI控制器内部结构
这个图等我们看完后面的SPI协议再回过头来讲解
![image-20220216121534549](pic/04_spi_block.png)
## 2. SPI协议
### 2.1 传输示例
假设现在主控芯片要传输一个0x56数据给SPI Flash时序如下
<img src="pic/02_spi_send_byte.png">
首先CS0先拉低选中SPI Flash0x56的二进制就是0b0101 0110因此在每个SCK时钟周期DO输出对应的电平。
SPI Flash会在每个时钟周期的上升沿读取D0上的电平。
### 2.2 SPI模式
在SPI协议中有两个值来确定SPI的模式。
CPOL:表示SPICLK的初始电平0为电平1为高电平
CPHA:表示相位即第一个还是第二个时钟沿采样数据0为第一个时钟沿1为第二个时钟沿
| CPOL | CPHA | 模式 | 含义 |
| :--: | :--: | :--: | :--------------------------------------------: |
| 0 | 0 | 0 | SPICLK初始电平为低电平在第一个时钟沿采样数据 |
| 0 | 1 | 1 | SPICLK初始电平为低电平在第二个时钟沿采样数据 |
| 1 | 0 | 2 | SPICLK初始电平为高电平在第一个时钟沿采样数据 |
| 1 | 1 | 3 | SPICLK初始电平为高电平在第二个时钟沿采样数据 |
我们常用的是模式0和模式3因为它们都是在上升沿采样数据不用去在乎时钟的初始电平是什么只要在上升沿采集数据就行。
极性选什么格式选什么通常去参考外接的模块的芯片手册。比如对于OLED查看它的芯片手册时序部分
<img src="pic/03_spi_protocol.png">
SCLK的初始电平我们并不需要关心只要保证在上升沿采样数据就行。

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB