mirror of
https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
synced 2025-12-02 04:41:19 +08:00
开始发布: SPI子系统, 01_SPI视频概述,02_SPI协议介绍
This commit is contained in:
40
IMX6ULL/doc_pic/11_SPI/01_SPI视频概述.md
Normal file
40
IMX6ULL/doc_pic/11_SPI/01_SPI视频概述.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# SPI视频概述 #
|
||||
|
||||
|
||||
|
||||
# 1. SPI硬件框架
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 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会影响到啥
|
||||
* 硬件片选和软件片选在驱动咋用
|
||||
|
||||
59
IMX6ULL/doc_pic/11_SPI/02_SPI协议介绍.md
Normal file
59
IMX6ULL/doc_pic/11_SPI/02_SPI协议介绍.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# SPI协议介绍 #
|
||||
|
||||
参考资料:
|
||||
|
||||
* 《SPI Block Guide V04.01.pdf》
|
||||
* 《S3C2440A_UserManual_Rev13.pdf》
|
||||
|
||||
## 1. SPI硬件知识
|
||||
|
||||
### 1.1 硬件连线
|
||||
|
||||

|
||||
引脚含义如下:
|
||||
|
||||
| 引脚 | 含义 |
|
||||
| -------- | ------------------------------------------------------------ |
|
||||
| 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协议,再回过头来讲解:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 2. SPI协议
|
||||
|
||||
### 2.1 传输示例
|
||||
|
||||
假设现在主控芯片要传输一个0x56数据给SPI Flash,时序如下:
|
||||
<img src="pic/02_spi_send_byte.png">
|
||||
首先CS0先拉低选中SPI Flash,0x56的二进制就是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的初始电平我们并不需要关心,只要保证在上升沿采样数据就行。
|
||||
BIN
IMX6ULL/doc_pic/11_SPI/02_SPI协议介绍.tif
Normal file
BIN
IMX6ULL/doc_pic/11_SPI/02_SPI协议介绍.tif
Normal file
Binary file not shown.
BIN
IMX6ULL/doc_pic/11_SPI/S3C2440A_UserManual_Rev13.pdf
Normal file
BIN
IMX6ULL/doc_pic/11_SPI/S3C2440A_UserManual_Rev13.pdf
Normal file
Binary file not shown.
BIN
IMX6ULL/doc_pic/11_SPI/SPI Block Guide V04.01.pdf
Normal file
BIN
IMX6ULL/doc_pic/11_SPI/SPI Block Guide V04.01.pdf
Normal file
Binary file not shown.
BIN
IMX6ULL/doc_pic/11_SPI/pic/01_hardware_block.jpg
Normal file
BIN
IMX6ULL/doc_pic/11_SPI/pic/01_hardware_block.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 61 KiB |
BIN
IMX6ULL/doc_pic/11_SPI/pic/02_spi_send_byte.png
Normal file
BIN
IMX6ULL/doc_pic/11_SPI/pic/02_spi_send_byte.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
BIN
IMX6ULL/doc_pic/11_SPI/pic/03_spi_protocol.png
Normal file
BIN
IMX6ULL/doc_pic/11_SPI/pic/03_spi_protocol.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
BIN
IMX6ULL/doc_pic/11_SPI/pic/04_spi_block.png
Normal file
BIN
IMX6ULL/doc_pic/11_SPI/pic/04_spi_block.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 133 KiB |
Reference in New Issue
Block a user