先前花了兩篇文章的篇幅談了非接觸式的溫度感測器,再讓我們回到通訊介面的題目吧!這次的主角是歷久彌新的 SPI 通訊介面。
歷史悠久的 SPI
SPI 的歷史可以回溯到 1980 年代初期,當時 Motorora 仍然是微處理器市場上的主要供應商(後來 Motorola 在 2004 年將半導體事業部拆分,成立 Freescale 飛思卡爾半導體,Freescale 又在 2015 年賣給 NXP 恩智浦半導體)。Motorola 在 8-bit 的微控制器(MCU)68HC11 上首度加上了這個四隻腳的介面,並稱之為 SPI:
(圖片來源:Bird 提供)
上圖是 1985 年出版的 MC68HC11 datasheet 中,關於這個微控制器的方塊圖(SPI 旁邊的 Serial Communication Interface 其實就是 UART),直到今日我們仍然可以在 NXP 半導體的網站上找到這份文件的最新版,而且這個零件目前還持續在生產,仍有大量的車用電子裝置跑在這個平台上。
Motorola 當年設計 SPI 的用意,主要是為了用串列介面的方式減少連接周邊裝置時所需要的接腳數量,SPI 的全名 Serial Peripheral Interface 就是這麼來的,在當年被視為一個「高速」的介面,在 68HC11 上它的 clock 可以跑到 MCU 主頻的一半(初代 68HC11 的速度大約是 1 MHz 左右),且由於它同步傳輸的設計,只要驅動電路推得動、EMI 沒有太誇張,它的速度可以隨著半導體製程的進步與速度的提升,不斷提高。
Arduino UNO 上的 SPI 可以跑到 8 MHz,而在更高階的平台上,如果使用 ESP8266,因爲 CPU 主頻高達 80 或 160 MHz,SPI 甚至可以輕易跑到數十 MHz 以上。
仍然是串列界面
我們第一次談 UART 界面時,曾經說過串列通訊的原始精神是:「把一整排的資料按照順序排列,逐一送到遠方,接收方再用同樣的順序將資料排回去」。
SPI 就是基於這個精神設計出來的界面。當年的微處理器或微控制器都是 8-bit 的,因此用並列界面傳輸資料,一次就會用掉 8 根線,但如果我們用移位暫存器將資料排成串列再依序送出,到了目的地再用移位暫存器將資料排回來,就只需要 data 和 clock 兩個訊號(也許再加上重設移位暫存器的 reset 訊號)。
只需不到短短一分鐘...
輸入您的信箱與ID註冊即可享有一切福利!
會員福利
免費電子報
會員搶先看
主題訂閱
好文收藏