注意:有的开发板可能没有自带SPI
本篇随便找了一个SPI的芯片手册
相关引脚
MCU或SOC上的SPI相关引脚如下
M——master
O——output
I——input
S——slave(从属)
某SPI芯片
对应如下
接线
- SPICLK(时钟信号)——CSerial Clock)
由使用SPI发送数据的开发板给出时钟信号 - SPIMOSI(SPI OUTPUT)——D(Serial Data Input)
开发板的发送端接上SPI芯片的接收端 - SPIMISO(SPI INPUT)——Q(Serial Data Input)
开发板的输出接上SPI芯片的输入 - GPIO——Chip Selecct
随便一个GPIO设置成输出,连接SPI芯片上的片选引脚
SPI总线允许多个设备接入,那么怎么分辨不同的设备——片选引脚
片选引脚为低电平,则选定设备 - Write Protect写保护
当电平为低时,不允许写入该芯片,只能读 - HOLD暂停所有操作
低电平有效
如果不想用写保护和暂停,直接把这两根接到电源,一直给高电平就可以了
SPI协议
读
对于这一款芯片,地址的A8在第一个字节的bit3,其他芯片不一定是这样的格式
这款芯片内存是512字节,需要9个地址位,其他的一般是8个
因为是读,所以要先写入地址,告诉SPI芯片要读的位置
然后SPI芯片将这个地址里的数据给到读它的设备
片选引脚
- 不使用时是高电平
- 给与低电平后,设备开始工作
Clock
- SPI芯片被选中时,芯片的时钟不断发送脉冲
每来一个时钟,传送一个位的数据
D(serial data input)
- 第一个字节
第0到2个字节是0
第三个字节是的地址的第9位
bit4和5是0
bit6和7是11,表示读 - 第二个字节
地址的剩余8位
Q(serial data input)
- SPI芯片接收到两个字节的信号后,知道了要读的地址
在第三个字节的时序,将次地址的信息发送给读取的设备
写
和读差不多
只是SPI芯片不用返回数据给连接的MCU
D(serial data input)
- 第一个字节
最后两位是10,表示写
其余和上面一样 - 第二个字节
发送要写的地址 - 第三个字节
发送要写入的数据
SPI控制器
例如2440
2440发送的时钟一定要满足外接的SPI芯片
如这款SPI的芯片,能接受的最大达的频率是5MHz
↑有相应的寄存器可以设置时钟的频率
2440最大能发送25MHz的时钟,但SPI只能接受5MHz的频率,所以要配置