前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单片机通信之SPI通信

单片机通信之SPI通信

作者头像
飞哥
发布2020-07-10 10:18:34
1K0
发布2020-07-10 10:18:34
举报

之前已经给大家介绍过了单片机的UART通信和IIC通信,大家可以点击“利用IIC协议实现单片机对EEPROM的读和写操作”、“单片机通信之串口通信”进行回顾。那么在这里讲解另一个单片机常用到的通信方式——SPI通信。在这里以ds1302芯片为例,实现单片机对ds1302的读写操作。

ds1302芯片简介

(1)DS1302实时时钟具有能计算2100年之前的秒、分、时、日、日期、星期、月、年的能力,还有闰年调整的能力。

(2)内部含有31个字节静态RAM,可提供用户访问。

(3)采用串行数据传送方式,使得管脚数量最少,简单SPI 3线接口。

……

(1)控制寄存器

D7

D6

D5

D4

D3

D2

D1

D0

1

RAM/CK

A4

A3

A2

A1

A0

RD/W

其中

D7:固定为1

D6:RAM/CK位,=1片内RAM,=0日历、时钟寄存器选择位。

D5~D1:地址位,用于选择进行读写的日历、时钟寄存器或片内RAM。对日历、时钟寄存器或片内RAM的选择见表。

寄存器名称

D5

D4

D3

D2

D1

秒寄存器

0

0

0

0

0

分寄存器

0

0

0

0

1

小时寄存器

0

0

0

1

0

日寄存器

0

0

0

1

1

月寄存器

0

0

1

0

0

星期寄存器

0

0

1

0

1

年寄存器

0

0

1

1

0

写保护寄存器

0

0

1

1

1

D0:读写选择,=0写,=1读

(2)日历、时钟寄存器

DS1302共有12个寄存器,其中有7个与日历、时钟相关,存放的数据为BCD码形式。日历、时钟寄存器的格式如表。

说明:

(1)数据都以BCD码形式。

(2)小时寄存器的D7位为12小时制/24小时制的选择位,当为1时选12小时制,当为0时选24小时制。当12小时制时,D5位为1是上午,D5位为0是下午,D4为小时的十位。当24小时制时,D5、D4位为小时的十位。

(3)秒寄存器中的CH位为时钟暂停位,当为1时钟暂停,为0时钟开始启动。

(4)写保护寄存器中的WP为写保护位,当WP=1,写保护,当WP=0未写保护,当对日历、时钟寄存器或片内RAM进行写时WP应清零,当对日历、时钟寄存器或片内RAM进行读时WP一般置1。

SPI总线简介:SPI接口的全称是“Serial Peripheral Interface”,意为串行外围接口SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,地位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。

SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号: (1)MOSI – 主器件数据输出,从器件数据输入 (2)MISO – 主器件数据输入,从器件数据输出 (3)SCLK – 时钟信号,由主器件产生 (4)/CS – 从器件使能信号,由主器件控制

数据输入输出:在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

DS1302是通过SPI串行总线跟单片机通信的,当进行一次读写操作时最少得读写两个字节,第一个字节是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还是对CLOK寄存器操作。第二个字节就是要读或写的数据了。

单字节读写:只有在SCLK为低电平时,才能将CE置为高电平。所以在进行操作之前先将SCLK置低电平,然后将CE置为高电平,接着开始在I/O上面放入要传送的电平信号,然后跳变SCLK。数据在SCLK上升沿时,DS1302读写数据,在SCLK下降沿时,DS1302放置数据到I/O上

接下来具体讲一讲如何利用SPI总线来对ds1602芯片的读写操作。

(1)首先,与IIC类似,要单独编写读和写的程序方便调用。写函数——在SCK为0时片选CE由低变高,开始传送八位地址(注意是从低位开始),然后写入八位数据。读函数类似,不过有一个返回值。

(2)编写好具体的读写函数之后就是调用了。将读出的数据存放到数组里,如果要用数码管显示则要将数据进行相应的处理转换,然后显示出来即可。

总结

总的来说,SPI与IIC是比较类似的,时序比IIC要更简单。基本可以概括为

读:将总线上的数据存放到定义的变量中。

写:将命令字节放到总线上。

在时序上,SPI 是不是比 I2C要简单的多?没有了起始、停止和应答,UART 和 SPI 在通信的时候,只负责通信,不管是否通信成功,而 I2C却要通过应答信息来获取通信成功失败的信息,所以相对来说,UART 和 SPI 的时序都要比 I2C简单一些。

下一节我们可以将他们三者放到一起对比学习。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子技术研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档