【單片機】傻傻分不清?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站瞧一瞧?)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章