PIC单片机之SPI总线篇

发布者:夜色迷离最新更新时间:2020-02-04 来源: eefocus关键字:PIC单片机  SPI总线  串行外设接口 手机看文章 扫描二维码
随时随地手机看文章

大家好,通过前一期的学习,我们已经对ICD2 仿真烧写器和增强型PIC 实验板的使用方法及学习方式有所了解与熟悉,现在我们就趁热打铁,再向上跨一步,一起来学习一下SPI 总线器的工作原理及使用方法,这样我们可以将一些需要保存的数据保存到存储器芯片中,掉电不会失丢,如汽车的里程表,它在不断地计数,其公里数就是放在一个SPI 总线的存储器芯片里面。


一、SPI总线基本概念


SPI ( Serial Peripheral Interface ———串行外设接口) 总线是Motorola 公司推出的一种同步串行接口技术。SPI 总线系统是一种同步串行外设接口, 允许MCU 与各种外围设备( 如闪存、数摸转换、网络控制器、从MCU) 以串行方式进行通信、数据交换。


SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。其工作模式有两种:主模式和从模式。SPI 是一种允许一个主设备启动一个从设备的同步通讯的协议,从而完成数据的交换。


也就是SPI 是一种规定好的通讯方式。这种通信方式的优点是占用端口较少,一般4 根就够基本通讯了(不算电源线)。同时传输速度也很高。一般来说要求主设备要有SPI 控制器(也可用模拟方式),就可以与基于SPI 的芯片通讯了。


二、SPI总线系统结构


SPI 系统可直接与各个厂家生产的多种标准外围器件直接接口, 一般使用4 条线: 串行时钟线(SCK) 、主机输入/ 从机输出数据线SDO、主机输出/ 从机输入数据线SDI 和低电平有效的从机选择线SS。SDI 和SDO 用于串行接收和发送数据,数据高位在前低位在后。在SPI 设置为主机方式时,SDO 是主机读从机,SDI 是主机写从机。SCK 用于提供时钟脉冲将数据一位位地传送。SPI 总线器件间传送数据框图如图1 所示。



三、SPI总线的接口特性


利用SPI 总线可在软件的控制下构成各种系统。如1 个主MCU 和几个从MCU、几个从MCU 相互连接构成多主机系统(分布式系统)、1 个主MCU 和1 个或几个从I / O 设备所构成的各种系统等。在大多数应用场合,可使用1个MCU 作为主控机来控制数据,并向1 个或几个从外围器件传送该数据。从器件只有在主机发命令时才能接收或发送数据。其数据的传输格式总是高位(MSB)在前,低位(LSB)在后。


当一个主控机通过SPI 与几种不同的串行I / O 芯片相连时,必须使用每片的允许控制端,这可通过MCU 的I / O 端口输出线来实现。


但应特别注意这些串行I / O 芯片的输入输出特性:首先是输入芯片的串行数据输出是否有三态控制端。平时未选中芯片时,输出端应处于高阻态。若没有三态控制端,则应外加三态门。否则MCU 的MISO端只能连接一个外设。其次是外设的串行数据输入是否有允许控制端。


因为只有在此芯片允许时,SCK 脉冲才把串行数据移入该外设;在禁止时,SCK 对外设无影响。若原来没有允许控制端,则增加控制门;当然,也可以在SPI 总线上只连接1 个外设,就不必用允许控制。


通过前文的原理介绍,我们已经对SPI 总线的特性以及工作原理有了大致地了解,但当我们拿到一个SPI 总线器件时要正确地应用它,还是一时不知如何下手,比如我们现在要想把一个具体的数据存储放器件中去,需要怎么办呢?现在,我们来一起看一个数据存储的例子,通过一个实例,相信会给大家带来一个感性的认识,下面就以目前单片机系统中广泛应用的SPI 接口的数据存储器93C46 为例,介绍SPI器件的基本应用。


四、93C46串行存储器简介


93C46 是1k 位串行EEPROM 储存器。


每一个储存器都可以通过DI/DO 引脚写入或读出。它的存储容量为1024 位,内部为128×8位或64×16 位。93C46 为串行三线SPI 操作芯片,在时钟时序的同步下接收数据口的指令。


指令码为9 位十进制码,具有7 个指令,读、擦写使能、擦除、写、全擦、全写及擦除禁止。该芯片擦写时间快,有擦写使能保护,可靠性高,擦写次数可达100 万次, 93C46 的引脚功能图如图2 所示。


图2 93C46 的引脚图


图2 93C46 的引脚图




表1 :93C46 串行EEPROM 指令格式选择表


表1 :93C46 串行EEPROM 指令格式选择表




指令说明:


① 读(READ):当下达10XXXXXX 指令后,地址(XXXXXXXX) 的数据在SCK=1 时由DO输出。


② 写(WRITE):在写入数据前, 必须先下达写使能(EWEN) 指令, 然后再下达01XXXXXX 指令后, 当SCK=1 时, 会把数据码写入指定地址(XXXXXXXX);而DO=0 时,表示还在进行写操作, 写入结束后DO 会转为高电平。写入动作完成后,必须再下达写禁止(EWDS)命令。


③ 清除(ERASE): 下达清除指令11XXXXXX 后会将地址(XXXXXXXX)的数据清除。


④ 写使能(EWEN):下达0011XXXX 指令后,才可以进行写(WRITE)操作。


⑤ 写禁止(EWDS):下达0000XXXX 指令后,才可重复进行写入(WRITE)操作。


⑥ 芯片清除(ERAL):下达0010XXXX 指令后,全部禁止。


⑦ 芯片写入(WRAL):下达0001XXXX指令后,全部写入“0”。


我们的例子程序功能是要实现对93C46 存储器的读写操作,并验证数据是否正确。程序先分别向0x02 和0x03 两个地址写入0x55 和0xAA,然后读其中一个地址,并将读到的数据显示出来验证是否正确。程序默认是读0x02 地址内的数据,读者也可以修改地址数据来读其它地址数据。


首先, 我们来看一下增强型PIC 实验板上的93C46 接口电路, 因为我们需要将软件和硬件相结合进行考虑如何来编程,完成该实验的硬件原理图如图3 所示,U6 为实验板上的93C46 芯片, 单片机的RB1、RB2、RB4、RB5 分别与芯片的CS、CLK、DI、DO 脚相连,七段数码管D5、D7、D8 组成了显示单元,字形码的数据通过RC 口送入,各数码管扫描显示信号分别不同的RA 口进行控制。


图3 硬件原理图


图3 硬件原理图


对于单片机软件的编程,我们使用MPLabIDE 软件来进行C 语言编程,它是我们的编程环境,同时我们可以通过使用ICD2 仿真烧写器和增强型PIC 实验板连接进行程序的仿真调试和烧写步骤,具体的操作步骤,我们已经在前几期做了详细的说明和介绍,在此就不再重复说明,读者朋友可以参阅以前的文章或直接登陆我们的网站查看资料。现在我们可以输入程序代码进行调试了, 我们在MPLab IDE软件中新建工程, 加入源程序代码,同时进行芯片型号的选择和配置位的设置,我们实验所用的芯片型号为PIC16F877A。由于篇幅限制,程序的源代码请上网站www.ele169.com 或www.hificat.com下载。 流程框图如图4 示。


图4 读写演示程序的流程图


图4 读写演示程序的流程图


编好程序后将编译好的HEX通过ICD2 仿真烧写器烧入单片机芯片,上电运行,效果如图5 所示。“0170”是我们事先写入存储器芯片再将其读出来的十进制值。


图5 从93C46 读出的数据通过数码管显示


图5 从93C46 读出的数据通过数码管显示


看到这里,相信你现在已经可以完成一些数据存储方面的实验。

关键字:PIC单片机  SPI总线  串行外设接口 引用地址:PIC单片机之SPI总线篇

上一篇:PIC单片机之数码管
下一篇:PIC单片机之RS232串口通信篇

推荐阅读最新更新时间:2024-11-21 10:08

Microchip推出最新16位超低功耗PIC单片机
XLP PIC® MCU采用5V电源电压,引脚数少却具有更大存储容量,具备能在休眠模式下工作的mTouch™容性传感 全球领先的整合单片机、模拟器件和闪存专利解决方案的供应商——Microchip Technology Inc.(美国微芯科技公司)宣布,通过增加片上12位ADC、EEPROM、智能mTouch™容性传感模块,以及能以5V电源工作的性能,扩展了其低引脚数16位超低功耗PIC® MCU产品阵容。PIC24F32KA304 MCU具备所有XLP PIC MCU产品众所周知的低至20 nA的超低休眠电流,为设计人员提供了当今最通用的低功耗产品,为他们带来了在设计工业、汽车、医疗、公用仪表、白色家电及在许多其他应用
[单片机]
Microchip推出最新16位超低功耗<font color='red'>PIC</font><font color='red'>单片机</font>
PIC中档单片机的中断总结
与51或者其他系列的单片机相比,PIC 单片机的中断机制有其特殊之处,针对我们一些初学者存在的一些问题和疑惑,我在此做一个个人总结,不当的地方,请站友们指正。 先摘引三个对PIC中断理解的回帖,然后我再对中断活动的过程、应该注意的事项、及一个疑惑进行较详细的总结和解释。 --------------- john frank :关于pic中断有些不明白的地方 借用大虾的程序; ;******************** 中断服务代码 btfss INTCON,T0IE ; 判断是否为T0中断 goto other_int btfss INTCON,T0IF ; it ’s the t
[单片机]
如何利用PIC16F877A单片机读写AT24C系列储存器
AT24C系列在增强型PIC实验板上编程的硬件原理图如下图所示,U7为实验板上24C02芯片,SDA与单片机的RB5口相连,SCL与单片机RB4相连,七段数码管D5、D7、D8组成了显示单元,字形码的数据通过RC口送入,各数码管的显示片选信号分别不同的RA口进行控制。 在MPLab IDE软件中新建工程,加入源程序代码,同时进行芯片型号的选择和配置位的设置,我们实验所用的芯片型号为PIC16F877A。 编写的程序代码如下,其中程序流程图如下图所示。 软件代码 编好程序后将编译好的HEX码通过ICD2仿真烧写器烧入单片机芯片,上电运行,主程序中在O×01地址写入了“O×55”,在O×0
[单片机]
如何利用<font color='red'>PIC</font>16F877A<font color='red'>单片机</font>读写AT24C系列储存器
PIC MCU测量相对湿度
如图所示,用一个具有容性响应的传感器和一只PIC微控制器(MCU)就可以构成一个相对湿度计。 其中Humirel公司提供的HS1101型传感器的电容取值范围为162 ~202pF。 使用一个TLC555 CMOS 定时器作为振荡器,完成从电容到频率的转换,定时器的频率等式如下:F = 1.44/(RA + 2RB)×CX这里电阻RA和RB分别等于421 kΩ和42.4 kΩ,CX为传感器电容。接到定时器控制电压输入端的1MΩ电阻用来使与传感器温度系数相匹配的定时器内部温度系数失衡。 MCU测量输入信号周期,并将其转换为相对湿度数字读数。这通过MCU内部计数器(TMR1)和捕获/比较/脉宽调制模块(CCP
[单片机]
用<font color='red'>PIC</font> <font color='red'>MCU</font>测量相对湿度
PIC单片机的新开发环境--MPLAB X IDE
自从学习pic单片机开始所有的历程全部是以MPLAB IDE为编译环境,然MPLAB IDE即便是最新的版本在win7 64位下运行也会出现挂载不上picc编译器的情况,这就导致了作为初学者的我选择了更换电脑系统的下下策。 我安装了win7 32位系统,首先说32位系统会吞掉将近一个多G的内存分配给显卡,而且32位系统最多识别4个G的内存所以家内存条也解决不了问题,也就是说实际电脑使用的时候能用到的内存只有2个多G,这将对我们电脑的工作产生非常大的影响。 于是我在网上搜罗发现Microchip公司推出的新版本的编译环境MPLAB X IDE是可以在windows7-10之间畅游的,所以便打起了这个家伙的主意,软件本身是可以
[单片机]
PIC单片机A/D转换数据存储以及串口效率
PIC 单片机A/D 转换后的数据通常需要占用两个8 位宽的RAM 单元, 而PIC 单片机的存储单元有限,因此造成了单片机的存储单元不能被有效利用, 同时通过串口向上位机传送数据时也需要花费较多的时间。 为此提出一种数据打包的方法, 使得相同的数据量占用较少的存储空间, 并可提高传输效率。 引言 在由单片机和PC 机构成的检测系统中, 通常会由多个单片机采集数据并将经过A/D 转换的数据通过串口送往上位PC 机进行数据处理。PIC 单片机A/D 转换后的结果大多是8 位或10 位的, 8 位的A/D转换不涉及该问题。以10 位的数据为例, 在单片机内进行存储时需要占用2 个8 位的字节, 低8 位和高2位分别存储在2
[单片机]
PIC单片机人机接口模块独立式按键的元器件选型
独立式键盘就是一个按键对应着一个端口输入,每一个按键都有一个按键电路来区分其是否按下。下面将首先介绍按键的结构,然后再介绍按键的外扩电路,以便于读者对独立式键盘有一个清晰和完整的认识。   按键分为单路和多路,在实际的应用中,按键和开关的功能是基本相同的,现在将基本的按键及开关汇总,如图所示。   图 基本按键和开关   下面的按键及开关中不仅有单路的、双路的,还有多路的。有些开关是选择开关,一般选择开关只有两路,不是第一路就是第二路;另外,还有一选二的开关,即有两路开关,可以选择两路同时开或关。   这些例子基本上涵盖了实用的按键和开关,另外还需注意,尽管按键或者开关的电路相同,但是其形状和指标都不同。例如,平时
[嵌入式]
使用PIC单片机开发的被动红外传感器模块的报警器
  在本文中,单片机开发工程师们分享了一个使用PIC单片机开发的被动红外(PIR)传感器模块的报警器。在这个方案中,我们使用PIC12F635单片机进行开发,持续监控传感器模块的输出,并在其激活时打开蜂鸣器。   一、被动红外(PIR)报警器方案的原理   某些半导体材料具有暴露于热红外辐射时会产生表面电荷的特性。这种现象称为热电。被动红外(PIR)传感器模块的工作原理相同。人体以红外线辐射的形式辐射热量,最大约为9.4微米。人体的存在会导致热释电传感器感应到的周围环境的IR轮廓发生突然变化。PIR传感器模块在板上具有仪表电路,该仪表电路将该信号放大到适当的电压电平以指示运动的检测。   PIR传感器需要大约10到60秒的
[单片机]
使用<font color='red'>PIC</font><font color='red'>单片机</font>开发的被动红外传感器模块的报警器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved