先说串口
之前写过一篇UART,通用串行异步通讯协议,感兴趣可以参考一下《 我打赌!你还不会UART 》; 因为UART没有时钟信号,无法控制何时发送数据,也无法保证双发按照完全相同的速度接收数据 。因此,双方以不同的速度进行数据接收和发送,就会出现问题 。
如果要解决这个问题,UART为每个字节添加额外的 起始位和 停止位,以帮助接收器在数据到达时进行同步;
双方还必须事先就 传输速度达成共识(设置相同的波特率,例如每秒9600位) 。
传输速率如果有微小差异不是问题,因为接收器会在每个字节的开头重新同步 。相应的协议如下图所示;
文章插图
串口传输的过程
异步串行工作得很好,但是在每个字节发送的时候都需要额外的 起始位和 停止位以及在发送和接收数据所需的复杂硬件方面都有很多开销 。
不难发现,如果接收端和发送端设置的速度都不一致,那么接收到的数据将是 垃圾(乱码) 。
下面开始讲一下SPI协议,会有哪些优点 。
SPI通讯协议
于是我们想有没有更好一点的串行通讯方式;相比较于 UART , SPI 的工作方式略有不同 。
SPI 是一个同步的数据总线,也就是说它是用 单独的数据线和 一个单独的时钟信号来保证 发送端和接收端的完美同步 。
时钟是一个振荡信号,它告诉接收端在确切的时机对数据线上的信号进行采样 。
产生时钟的一侧称为 主机,另一侧称为 从机 。总是 只有一个主机(一般来说可以是 微控制器/MCU),但是可以有多个 从机(后面详细介绍);
数据的采集时机可能是 时钟信号的 上升沿(从低到高)或 下降沿(从高到低) 。
具体要看对SPI的配置;
整体的传输大概可以分为以下几个过程:
-
主机先将 NSS 信号拉低,这样保证开始接收数据;
-
当 接收端检测到时钟的边沿信号时,它将立即读取 数据线上的信号,这样就得到了一位数据(1 bit );
由于时钟是随数据一起发送的,因此指定 数据的传输速度并不重要,尽管设备将具有可以运行的最高速度(稍后我们将讨论选择合适的时钟边沿和速度) 。
-
主机发送到 从机时:主机产生相应的时钟信号,然后数据 一位一位地将从 MOSI 信号线上进行发送到从机;
-
主机接收 从机数据:如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过 MISO 信号线发送;
具体如下图所示;
文章插图
SPI的时序
注意,SPI是“全双工”(具有单独的发送和接收线路),因此可以在同一时间发送和接收数据,另外SPI的接收硬件可以是一个简单的移位寄存器 。这比异步串行通信所需的完整UART要简单得多,并且更加便宜;SPI特性
SPI总线包括4条逻辑线,定义如下:
-
MISO: Master input slave output 主机输入,从机输出(数据来自从机);
-
MOSI: Master output slave input 主机输出,从机输入(数据来自主机);
-
SCLK: Serial Clock 串行时钟信号,由主机产生发送给从机;
-
SS: Slave Select 片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号 。
其他制造商可能会遵循其他命名规则,但是最终他们指的相同的含义 。以下是一些常用术语;
-
MISO也可以是 SIMO , DOUT , DO , SDO 或 SO (在主机端);
-
MOSI也可以是 SOMI , DIN , DI , SDI 或 SI (在主机端);
-
NSS也可以是 CE , CS 或 SSEL ;
推荐阅读
- 交通事故协议书 交通事故协议书范本
- 工程施工安全责任协议书怎么写 安全施工协议
- 巴萨买哈兰德?巴萨或与哈兰德达成加盟协议
- 加班|《木卫四协议》开发商公开宣传“996”:CEO现已道歉
- 游戏|《木卫四协议》为不跳票狂赶工 一周7天、一天15小时
- 核聚变|从月薪5000到年薪1.2亿美元?假的!博士电视求职被拒并没有翻身
- 尼康d5300好吗?尼康d5300的缺点_1
- 小孩尿臭是怎么回事
- 面试|我工作了1年多就当上了管理,我并没有高兴,而是对未来多了迷茫
- |怎么养紫砂壶