在折腾单片机的时候,总会听到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协议。

三、总结

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

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

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

  1. 国防大学计算机学院,国防大学和国防科技大学是同一所学校吗?很多人傻傻都分不清!...

    国防大学和国防科技大学,这两所大学名字相近,极易混淆,在很多网站搜索"国防大学录取分数线",出来的全是国防科技大学的的高考录取分数线,所以给广大考生带来了很大困惑,难道国防大学和国 ...

  2. session、token、jwt、oauth2 傻傻分不清

    △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 367 篇原创分享 作者 l zyz1992 来源 l Hollis(ID:hollischuang) 在我们的 java ...

  3. 国家电网和南方电网还傻傻分不清?

    参看:都2020年了,国家电网和南方电网还傻傻分不清? 一.名称不同 一个叫南方电网,一个叫国家电力电网,虽然都是电网,但是区别还是很大的 而且成立时间不一样:国家电力电网有限公司成立于2002年12 ...

  4. cdn厂商 同兴万点_同兴万点:TXNetworks和CDNetworks让我们傻傻分不清

    原标题:同兴万点:TXNetworks和CDNetworks让我们傻傻分不清 在2008年2月25日成立的同兴万点,公司全称为同兴万点(北京)网络技术有限公司(TXNetworks),一直专注于CDN ...

  5. Executor 与 ExecutorService 和 Executors 傻傻分不清

    转载自  Executor 与 ExecutorService 和 Executors 傻傻分不清 java.util.concurrent.Executor, java.util.concurren ...

  6. 2运行内存多大_智能设备中的内存与容量为何傻傻分不清?它们的区别是什么?...

    在日常生活中,很多时候会把某些电子产品的容量说成内存,或者把内存说成了容量.比如有人问:"这个手机的内存多大?"或许会有这样回答的:"内存是256G."这种问答 ...

  7. 数据平台、大数据平台、数据中台……傻傻分不清?这次终于有人讲明白了!

    来源 | 智领云科技 造概念,在IT行业可不是一件陌生的事儿,中文博大精深,新名词.新概念往往简单准确,既可以被大众接受,又可以被专家把玩,真正做到雅俗共赏.各有趣味.近年来,数据中台之火爆,什么数据 ...

  8. c语言位运算符怎么用,傻傻分不清

    c语言位运算符怎么用,傻傻分不清 左移运算符 << 右移运算符 >> 左移运算符 << 左移运算符**<<**用来把操作数的各个二进制位全部左移若干位. ...

  9. Session/Cookie/Token还傻傻分不清?

    Cookie.Session.Token 傻傻分不清 Session/Cookie/Token 还傻傻分不清? 相信项目中用JWT Token的应该不在少数,但是发现网上很多文章对 token 的介绍 ...

最新文章

  1. Zepto.js库touch模块代码解析
  2. 收藏 | 计算机视觉中的Transformer
  3. 如何解决C/C++中stack overflow问题
  4. 127. Leetcode 242. 有效的字母异位词 (哈希表)
  5. 【图像处理opencv】_图像锐化
  6. 静态页中调用动态数据的三种办法
  7. 小熊的人生回忆(五)
  8. 【MySQL】MySQL 界面连接工具 优化工具 监控工具 其他工具 简介
  9. 使用Python编写简易定时器
  10. JAVA实现的吸血鬼数字算法,高效率版本(已有网友给出算法说明)
  11. 微服务社交平台项目【十次方】(二)-API文档与模拟数据接口
  12. matlab 呼吸灯,一种控制呼吸灯呼吸效果的方法与流程
  13. 单片机 74HC573
  14. python化学模拟_rdkit 化学反应高级功能
  15. 如何高效学习_斯科特扬(读后,整体学习法试用,总结)
  16. 69. 放下鼠标,离开键盘
  17. 10款PHP开源的外贸网店电子商务管理系统
  18. 使用C++实现MySQL数据库编程
  19. 机器人的发展及其概述
  20. 各个地区的语言代号及value文件夹命名规范

热门文章

  1. solidworks设计树规则
  2. android go rom下载地址,一步一步学Android ROM开发(一)——修改现有ROM资源文件-Go语言中文社区...
  3. Nginx:http自动跳转到https
  4. Javaweb新闻管理系统01
  5. KVM 虚拟化管理平台 VManagePlatform
  6. 高抛低吸T+0操作要领(目前行情短线炒作的必备技能)
  7. Spring Boot 使用 Maven assembly 插件打包
  8. Integrated Security=True是什么意思
  9. 怎么查看访问网站服务器记录,如何快速分析网站服务器日志
  10. IT常见_项目管理_名词