前言
本文不具体详解SPI接口的原理特性等等,只负责解释说明Mbed平台中SPI类的部分公共函数。
笔者目前仍在学习阶段,为了自身能够更好理解才写下本文,如有错误请多多指教。(手动土下座)
Reference
SPI - SPIマスター
SPI - API references and tutorials | Mbed OS 6 Documentation
简单介绍
SPI总线规定了4个保留逻辑信号接口:
1. MOSI - Master Output Slave Input - 主设备输出 从设备输入
2. MISO - Master Input Slave Output - 主设备输入 从设备输出
3. SCLK - Serial Clock - 时钟信号 由主设备发送给从设备
4. SS - Slave Select - 片选信号 由主机发出
其工作模式有4个模式:
Mode | Polarity | Phase |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
2 | 1 | 0 |
3 | 1 | 1 |
Polarity表示极性,按笔者的理解可以大概是指默认传输电平为高还是为低。
Phase表示相位,大概指识别电平开始变化的一瞬间或者电平失去变化的一瞬间。
可以借助下图帮助思考。
了解到这里有助于理解后面的函数,详细部分请浏览其他文章。
正文
-
初始化
SPI (PinName mosi, PinName miso, PinName sclk, PinName ssel=NC)
SPI name(mosi, miso, sclk); // 定义一个名为name的SPI类,且必须输入mosi,miso和sclk的引脚
-
通信模式
void format (int bits, int mode=0)
name.format(bits, mode); // 配置传输数据的模式,bits指传输数据的比特数,mode为上文提到的工作模式
-
时钟频率
void frequency (int hz=1000000)
name.frequency(hz); // 设置时钟的频率
-
发送与接收
virtual int write (int value)
val = name.write(data); // data为发送的数据,val为函数接收到数据时返回的数据