SPI的英文全称是:“Serial Peripheral Interface”,翻译成中文的意思是串口通信外围设备技术。也就是把数据用串口传输方式进行交换。它有一个主控制器,一般我们采用微处理器,比如常用的单片机,以及一些其它的外围设置,比如,液晶显示频,等外围设备。
它一般是由5根线组成的:分别是MOSI,MISO,SCK,SS以及地线,电源线。 MOSI:是由主机向设备发出数据的。 MISO:是由设备向主机发送数据的。 SCK:是起到一个控制数据传输的校准,根据arduino官方的说法,好像还具备有对数据全能的控制作用。 SS线是用于一根使能线,特别是接多个外围设备的时候,可以通过控制SS线,对不同的外围设备进行通信。 写一个程序关于 I必须注意的问题有: 1. 字节的传输是从最高位(MSB)传输,还是从最低位(LSB)传输呢?这是由 SPI.setBitOrder () 函数进行设置的。 2. 当数据不传输时,时钟线是高还是低? 3. 触发方式是上升沿触发还是下降沿触发呢 ?这个由 SPI.setDataMode() 函数进行设置。 4. SPI 运行的速度是多快呢?这个由 SPI.setClockDivider() 函数进行设置。 在 arduino2009 板上, 10 脚是 SS , 11 脚是 MOSI, 12 脚是 MISO , 13 脚是时钟引脚。当然在同时用这几根引脚控制多个外围设备的时候, SS 引脚可以是其它引脚,比如 arduinoEhthernet 模块,利用第 4 个引脚去控制 SD 卡的 SS 端。第 10 引脚控制 Enthernet 模块的 SS 端,下面是三种不同的硬件接法示意图:![](https://web.ruidan.com/images/aritcle/programmes/20230421/content/l4cikn5vx5y.png)
这是auduino 只控制一个外围设备的接法。
![](https://web.ruidan.com/images/aritcle/programmes/20230421/content/qv0554gwsmp.png)
这是数据传输的时序图。
这是第三种方法,主机控制多个外围设备的接法。上文提到的控制网络模块与SD卡两个外围设备用的电路http://www.ruidan.com/mcu/2014.html就是这种电路。
这是另外一种接法,也是同时控制多个外围设备,但是这种占用到主机的引脚相对于第二种来说会少一点。 下面再补充几个上文没有说到的关于SPI的函数: SPI.begin() 作用是初始化SPI总线。设备SCK, MOSI,和SS为输出。把SCK和MOSI拉低,把SS线进行拉高。 SPI.end() 作用是结束SPI传输,或者准确地说是禁止SPI总线工作。 SPI.transfer(val) 作用是传输一个字节,这里要指出来的是val只能是字节。
-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。