spi,uart,iic协议之间的对比:
spi和uart的区别,spi结构上可以实现一主多从进行通信,依靠时钟进行传输数据的同步传输模式。
SPI和iic都是一主多从进行通信的,同样需要依靠时钟完成数据的同步 传输,iic选中从机进行通信依靠发送从机的地址,而spi选中
从机开始通信则是需要主机拉低对应外设的片选信号。
iic与spi的时钟频率都是由主机来控制的,Iic实际应用的传输速度是10k~400khz,spi的传输速递最大是fclk/2;
但是关于传输速度的选择实际上还是要依靠通信的外部设备决定。
带控制器的设备uart,spi,can,iic等协议的通信中可以扮演主设备或者从设备的角色,是主设备还是从设备是相对的。
1,物理层
spi的物理连接方式:
SCK:串口时钟,作为主设备的输出,从设备的输入
MOSI:通常用作主机的输出引脚(master out slave in),在从模式下接收数据。
MISO:通常用作主机的输入引脚(master in slave out),在从模式下发送数据。
SSx:片选引脚,使能某个外部设备
在spi的连接图中可以看出spi通信是全双工的同步通信,但是在芯片手册中也规定spi可以采用单工通信的方式仅发送或接收(双线或单线);
注意,spi 在成功发送数据之前一定要拉低片选线。
SPI能够以两种配置工作于单工方式: (文章中对这种模式并不进行分析)
● 1条时钟线和1条双向数据线
● 1条时钟线和1条数据线(双工模式下只读方式)
Stm32f103中spi的引脚接线情况:
2,协议层
在协议中可以选择LSB先行或者MSB先行模式,只要主设备与从设备设置的模式一致即可。
片选信号的使能可以选择配置为软件模式和硬件模式两种,常用的是软件模式。
设备可以选择配置成主模式还是从模式,区别是配置成主模式的设备要配置时钟。
时钟的时序图:
通过设置spi的时钟时钟相位和时钟极型,可以得到四种时序模式。如下图:
当cpol设置为0,scl的空闲时的电平是低电平;
当cpol设置为1,scl的空闲时的电平是高电平;
当cpha设置为0,在时钟的奇数边沿进行数据采样。
当cpha设置为1,在时钟的偶数边沿进行数据采样。
上述的协议图中,常用的时序模式是mode0和mode3;
以mode0的时序为例:
因为cpol设置为0,当scl为低电平时保持空闲状态,当cs片选线拉低,scl产生时钟信号;
因为cpha设置为0,当时钟scl线上产生第一个跳变沿电平(下降沿)时,触发信号。
3,逻辑框图
在逻辑框图中可以看出,
要发送的数据经由地址与数据总线,发送到tx寄存器,转移到发送移位寄存器通过MISO引脚,发送给外部设备。
接收的数据通过MOSI引脚转移到接收移位寄存器,控制器通过总线读取接收数据寄存器,读出接收到的数据。
在主设备的模式下还需要配置时钟的频率,涉及到的相关的寄存器如上图所示。
4,代码
spi的初始:
通过spi读写一个字节:
注意:用spi协议从设备中读取一个数据,是需要先向从设备中 发送一个数据,启动时钟。
具体其他代码去看正点历程或野火的历程也是很好的选择呢……因为要去运动了,剩下的代码就不贴了.....