spi协议
Documentation/spi/spi-summary
读这个文档发现
1.spi 没有固定的信道
2.这是一个简单的“事实上的”标准,不够复杂,不足以获得一个标准化机构。
三线一line
CS SCK MOSI
四线一line
CS SCK data rs(决定是命令还是数据)
四线两line
CS SCK MISO MOSI
spi 的 线也就这几种了,CS 和SCK 肯定是有的.
其实一个spi控制器接很多spi外设的时候,spi端有很多片选线,每一根片选线(CS)接外设的CS
CPOL : 空闲状态是低(0)还是高(1).如果空闲状态为高,则 SCK从高开始
CPHA : 采样时刻,从第一个沿采样(0)还是第二个沿采样(1)
一般从时序图中能看出来.
CPOL CPHA 表示 clock modes,有 00 01 10 11
设备一般支持 0 3 , 上升沿采样
spi电气特性
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190319213141934.png)
一般SPI的协议比较快的时钟频率可能能到几百Mhz
例如 某颗 SPI Flash的时钟最快频率是104MHz
SPI时序
spi 四线
1. CS 拉低
2. SCK 持续变化
3. MOSI 发送数据,一个周期变化一次.
4. MISO 接收数据,一个周期变化一次
注意,不管是设备侧还是host侧,接收的时候都要发送数据
如果host侧要发送数据.则发送写命令+地址+数据,同时接收数据
device侧要接收数据,同时发送数据
如果host侧要接收数据,则发送读命令+地址
device侧要发送数据.
- host读(这里只表述了有效的值,其实SI和SO一直都有数据的)
![在这里插入图片描述](https://img-blog.csdnimg.cn/dd6b51dd782347cca4ea2b53a735986e.png)
- host 写
![在这里插入图片描述](https://img-blog.csdnimg.cn/769c31d72ce044e5b74ee9cfdc751464.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190415231714720.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190415231750814.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTE4Mjc=,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190920124735546.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTE4Mjc=,size_16,color_FFFFFF,t_70)
spi同时收发
spi 同时发送接收
不理解 发个 0x9F000000 ,同时接收了 SPIFLASH_ID 0x00C84014,这个是发 0x9F 指令,返回的值 是 厂商ID.看起来是同时完成了发和收.
其实想着发命令,收数据应该不是同时的,因为肯定是先发命令,然后芯片接收到指令,并发出回应.
其实不是同时收发.只发了8个bit(0x9F),收了24bit(0xC84014),且不是同时的.
0x9F 后面的 数据时 dummy 数据,一般填 0x00???
一直是这样理解的,由于SPI通信要由主机产生sck时钟信号,只有存在时钟才从机才能把寄存器内数据发送出去,所以只要保证发送的数据从机不会产生动作(无效数据)即可。