【单片机】傻傻分不清?ISP和SPI的区别与联系

在折腾单片机的时候,总会听到ISP、SPI等缩写,这两组缩写甚至连字母都是一样的,但其实这两个缩写的含义并不相同,但又有联系(尤其是在烧录单片机的时候)。

本文尝试介绍这两者的定义,区别与联系。ISP和IPS别再傻傻分不清了。
在这里插入图片描述

一、定义

1. ISP

ISP是In-System Programming(在系统可编程)的缩写,是一类技术的统称,即我们给单片机烧写(上传)程序的时候是通过串口/下载器/仿真器等比较简单的方式进行的。
在通过ISP上传程序的时候,单片机进入ISP子程序,使得我们可以方便地对ROM进行写入和擦除。
与ISP相对的烧写方式则是将单片机放在烧写座上,直接对它的ROM擦除,烧录程序的方法。

ISP其实这是我们通常给单片机(尤其是开发板)烧写程序的方式,只不过这种方式太习以为常了,所以我们也不总是提到它的名字罢了。其实,不论是用Arduino IDE通过USB串口对Arduino板子上传程序,还是用J-Link等仿真器对STM单片机上传程序,这些操作我们都可以称之为是“ISP”。

2. SPI

SPI是Serial Peripheral Interface(串行外设接口)的缩写。可能这个缩写大家更熟悉一些,它是一种串行总线协议,和我们其他常用的串行总线协议,如:I2C, UART(俗称串口), OneWire 等是一个类别的东西。
SPI是一种高速的,全双工,同步的通信总线,一般需要四根接线,分别是:

  1. SDO/MOSI – Master Out Slave In(主设备数据输出,从设备数据输入);
  2. SDI/MISO – Master In Slave Out(主设备数据输入,从设备数据输出);
  3. SCLK – 时钟信号,由主设备产生;
  4. CS/SS – 从设备使能信号,由主设备控制。

二、联系

从定义我们可以看到,其实ISP和SPI这两个根本就不是一类的东西。那他们的联系在哪里呢?
答案是,我们在用ISP技术给单片机烧写程序的时候,有可能就是通过SPI协议进行上传的。

举例来说,当我们给Arduino烧写BootLoader(注意不是普通的上传程序)的时候,我们就是通过ISP技术并且通过SPI协议进行的。

以UNO为例,上图中最下方用红色方框圈出来的6个引脚,就被成为ISP(ICSP)引脚,可以通过它来烧录主芯片(ATmega328)的BootLoader和程序。但其实这6个引脚只不过是我们正常使用的时候的SPI引脚被重新引出来放在这里罢了,这里的MOSI、MISO、SCK和11-13引脚上的是一样(等电位)的,VCC, GND, RESET 也是和普通的那两排上的是一样的。所以我们可以看出,我们在通过ISP接口烧写Arduino的时候,用的是SPI串行总线协议。(更多关于Arduino ISP 的细节可以看我的这篇博客

当然也不是所有的ISP烧录用的都是SPI协议。比如我们一般通过USB接口给Arduino上传程序的时候,其实就是最普通的串口(UART)协议(板载了USB转串口芯片),也就是0号口和1号口的那个RX和TX。再比如烧写STM芯片的时候用我们就用的是SWD或JTAG协议。

三、总结

SPI是In-System Programming的缩写,指的是我们给单片机上传程序的一种方式,使用的通信协议包括但不限于SPI;
而SPI是一种串行总线协议,用于设备之间的通信,也会被用做ISP时的通信协议。

觉得有用的话,不要吝惜评论点赞分享哦,希望大家多多包涵,有任何问题欢迎指正、讨论。
本文基于CC-BY-SA 4.0协议,欢迎转载
(博客看累了?去我的B站瞧一瞧?)

发布了19 篇原创文章 · 获赞 212 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_27133869/article/details/104767880