单片机模拟SPI协议和单片机自带SPI接口的区别?使用起来会有差别吗,会不会影响最终效果?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机模拟SPI协议和单片机自带SPI接口的区别?使用起来会有差别吗,会不会影响最终效果?相关的知识,希望对你有一定的参考价值。
用起来最大的区别就是,你用软件模拟的方式要自己操作SPI的几个关键的引脚,像时钟线,数据线,CE之类的,你要对着时序图来一点点的操作这些引脚,自带的SPI接口我们叫它硬件SPI,这种就非常方便了,你不用关于引脚做了些什么,因为它底层已经做好了,你只要对着文档操作寄存器就可以了,有专门的数据寄存器,还有状态寄存器,硬件SPI比软件的方便很多 参考技术A 如果你模拟的好
就不会影响效果
以前我就是用io直接模拟的
首先你一定要彻底弄清时序图
然后模拟
就好了
祝你成功
模拟SPI协议时序
SPI是串行外设接口总线,摩托罗拉公司开发的一种全双工,同步通信总线,有四线制和三线制。
在单片机系统应用中,单片机常常是被用来当做主机(MASTER),外围器件被当做从机(SLAVE)。
所以,在以下的介绍中,都是默认单片机是主机模式进行说明的。
SPI总线相对于IIC总线,无总裁机制,无应答机制。
SPI常用的四线制分别是,MISO(主入从出)、MOSI(主出从入)、SCK(同步时钟线)、CS(片选线,也有是NSS)。
主从机之间典型的接线方式如下所示:
按照时钟线的时钟极性(CPOL)和相位(CPHA),将SPI总线区分成4种工作方式。
具体区分如下:
当时钟极性(CPOL==0)时:表示时钟线空闲状态为低电平;
当时钟极性(CPOL==1)时:表示时钟线空闲状态为高电平;
当时钟相位(CPHA==0)时:表示数据在时钟的第一个边沿输出;
当时钟相位(CPHA==1)时:表示数据在时钟的第二个边沿输出;
如上所示,CPOL和CPHA两两组合,可表示4种工作方式,假设配置CPOL=0,CPHA=0,表示数据线在空闲时处于低电平,主机数据在时钟的第一个边沿(也就是上升沿被输出),在第二个边沿(也就是下降沿被读入)。
需要注意的是,主机的配置必须根据从机设计,例如,从机是上升沿输出,下降沿输入。那么,主机在配置的过程当中,必须采用上升沿输出,下降沿输入,即SPI0工作方式。
采用I/O端口模拟SPI协议时序,可以很好地加深对于SPI总线的理解。
SPI写时序模拟:
1 void SPI_write(unsigned char dat)
2 {
3 unsigned char temp;
4 for(temp=0x80;temp!=0;temp>>=1)
5 {
6 SCK=0;
7 if(temp&dat==0)
8 {
9 MOSI=0;
10 }
11 else
12 {
13 MOSI=1;
14 }
15 SPI_delay(); //让MOSI稳定
16 SCK=1;
17 }
18 }
SPI读时序模拟:
1 unsigned char SPI_read(void)
2 {
3 unsigned char temp;
4 unsigned char dat;
5 for(temp=0x80;temp!=0;temp>>=1)
6 {
7 SCK=1;
8 SPI_delay(); //让SCK稳定
9 SCK=0;
10 if(MISO==1)
11 {
12 dat|=temp;
13 }
14 else
15 {
16 dat&=~temp;
17 }
18 }
19 return dat;
20 }
以上是关于单片机模拟SPI协议和单片机自带SPI接口的区别?使用起来会有差别吗,会不会影响最终效果?的主要内容,如果未能解决你的问题,请参考以下文章