资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
SPI 总线SPI 总线(Serial Peripheral Interface 串行外围设备接口总线)是三线式的串行总线,是由摩托罗拉公司所研发,使用三线进行数据传输,分别是 SCK 时钟引脚,SI 数据输入引脚和 SO 数据输出引脚,另外还有 CS 片选引脚可以对同一总线上的芯片进行选通使用,SPI总线已被广泛使用在 EEPROM、单片机和各种设备中。常用串行 EEPROM 中的 25XX 系列芯片就是使用兼容 SPI 总线结构,采用先进 COMS 技术,体积小,是一种理想的低功耗非易失性存储器,广泛使用在各种家电、通讯、交通或工业设备中,通常是用于保存设备或个人的相关设置数据。ATMEL 公司生产的 25 系列的 EEPROM 存储容量从 1K 位到256K 位。其它一些芯片也会用到 SPI 总线,如常用的 CPU 监控芯片 X5043、X5045 就带有 512 字节的 SPI 界面 EEPROM,常用于单片机系统的看门狗电路,同时也可以提供小数据量的存储,给电路设计带来很多的方便。此文将用 X5045 为例讲述 SPI 的编程应用和X5045 的一些其它功能。X5045 由 Xicor 公司出品,电压范围有 2.7V 到 5.5V 和 4.5V 到5.5V 二个版本,擦写次数可达一百万次,最高时钟频率可达 3.3MHz。图一是 X5045 的PID 封装实物图。图 1图 2图二是 X5045 的引脚定义图。 CS/WDI 是片选和看门狗复位输入,当 CS 为高时 SO 引脚变为高阻态,这时可以允许其它器件共用 SPI 总线,同时芯片也处于休眠状态,当 CS为低时芯片被选中,并从休眠状态中唤醒,可以进行读写操作。SO 是串行数据输出,在读芯片时数据从此脚输出。WP 是写保护引脚,当 WP 为低时芯片写保护,不能对芯片写操作,但其它功能不受影响。Vss 是电源地。SI 是串行数据输入,接收来自控制器的数据和地址。SCK 是串行时钟输入,RESET 是复位输出,Vcc 是电源。在 25 芯片中还有一个HOLD 引脚,此引脚的功能是保持输入脚,ATMEL 公司生产 25 芯片的 HOLD 引脚是低电平有效。不用此功能时,HOLD 引脚要保持高电平。在芯片正在串行传输时,将 HOLD 拉为低电平,可以暂停进一步的传送,具体方法是 SCK 变低后,将 HOLD 也拉低,不然在下一个 SCK 变低前不能暂停传送,要恢复串行传送,必须在 SCK 为低电平时将 HOLD 拉高。芯片处于暂停时,SI,SO,SCK 脚为高阻状态,任何时刻只要 HOLD 被拉低时,SO都会处于高阻状态。限于文章的篇幅,下面内容只着重介绍 X5045 芯片的 SPI 总线对 EEPROM 单元的编程应用。在 X5040 芯片中有 6 个指令,它和 25 系列芯片的指令是兼容的,也就是说在 25系列芯片中使用时基本上是不需要改变的,具体见表一。指令 指令格式 说明WREN 0000 0110 写入允许WRDI 0000 0100 写入禁止RSDR 0000 0101 读状态寄存器WRSR 0000 0001 写状态寄存器,用于操作区块写保护标识和看门狗标识READ 0000 A8011 读数据WRITE 0000 A8010 写数据注:A8 用于数据地址的第 9 位。 表一指令集写入允许和禁止X5045 芯片内部有一个写入使能寄存器,在需要向芯片写入数据时,需要先用 WREN指令使片内写入使能寄存器先置位,写入数据后可以用 WRDI 指令使寄存器复位到禁止状态。当上电、WRSR 指令执行、WRITE 指令执行、WP 拉低也会使写入使能寄存器复位到禁止状态。图三是 WREN/WRDI 指令的操作时序图。首先要把 CS 拉低,输入数据,向SCK 输入时钟信号,数据在时钟的上升沿有效,时钟上升后至少数据至少保持 30ns。数据是串行的,所以在每个时钟周期的上升沿发送一个位。在操作这两个指令时,SO 是处于高阻状态的。图 3 写入使能时序读写状态寄存器X5045 片内有一个状态寄存器,用于指于芯片的状态和设置,可以读写,芯片出厂时状态寄存器值为 30H。具体每位的功能请看表 2。WIP 写入保护位,是只读位,指示芯片是否正忙于写入操作。当 WIP 为1时,说明写入正在进行,为0时表示没有进行写入。在编程时,写入数据操作后,可以查询 WIP 位,当 WIP 为 0 后才进行下一次的写入操作,这样可以避免写入出错。WEL 写入使能状态位,是只读位。WEL 位的状态由 WREN 和WRDI 指令确定,WREN 成功执行后 WEL 为1 指示允许写入数据,WRDI 指令成功执行后 WEL 为0 指示禁止写入数据。在编程时可以先查询 WEL 位的状态,如为 0 时则要执行 WREN 后才可以进行写入操作。BL0、BL1 设置当前保护的区块地址,是可读写位,这两个位的设置和区块地址的关系如表 3,区块的内容被保护后,就只能读出而不能写入了。25 系列芯片中不同型号的芯片容量不一样,BL 设置所保护的范围也不一样。WD1、WD0看门狗设置位是 X5045/43 特有的设置位,是可以读写位,在 25 系列芯片中这两个位是保留位,在 X5045 中有看门狗功能,这两个位就用于设置 MCU 喂狗的时间,表 4 是看门狗位的设置时间。状态寄存器的第 6 和第 7 位是保留位。读状态寄存器时,发送完 RSDR 指令后,SO 由高阻态转为输出数据,从数据位的高位开始。写状态寄存器,发送完 WSDR指令后,再发一个字节的状态数据就可以了,其中只读位可以是1也可以是0 ,它们不会被 WSDR 指令所更改。图 5、图 6 是读写状态寄存器的时序图。7 6 5 4 3 2 1 00 0 WD1 WD0 BL1 BL0 WEL WIP0 0 看门狗位1 看门狗位0 区块保护1 区块保护0 写入使能状态位 写入保护位表 2状态寄存器定义BL1 BL0 保护地址范围0 0 无保护0 1 180H1FFH1 0 100H1FFH1 1 000H1FFH表 3BL 设置位WD1 WD0 喂狗时间0 0 1.4 秒0 1 600 毫秒1 0 200 毫秒1 1 功能禁用(出厂设置)表 4看门狗设置位图 4 读状态寄存器时序图 5 写状态寄存器时序读数据图 6 是读数据时的时序,先拉低 CS 选中芯片,先要把需读取的地址的第 9 位加到指令字节的第 4 个字节中,发送完指令字节就发送地址字节的前 8 位,这时 SO 就会由高阻态转为输出数据。每当一个字节的数据传送完毕后,芯片内部的地址指针自动加 1,指向下一个数据地址,这时如仍有时钟脉冲时,数据会被继续输出,CS 脚拉高后输出才会终止。当最高位地址的数据被读出后,地址指针指向 00H。图 6 读数据时序(点击看大图)写数据在向芯片写入数据之前,写使能寄存器必须处于置位状态,一般可以不必查询写使能寄存器的状态,而直接用 WREN 置位写使能寄存器。在发送完 WREN 指令后,必须把 CS拉高,在 CS 拉高之前写使能寄存器并没有置位,这时向芯片传送数据是不会被写入的。写使能寄存器置位后,再将 CS 拉低,把需读取的地址的第 9 位加到指令字节的第 4 个字节中,发送完指令字节就发送地址字节的前 8 位,然后发送需写入的数据。WRITE 指令可以连续写入 16 个字节,但这 16 个字节的地址必须在同一页中。每一页的地址由xxxxx0000开始,到xxxxx1111结束。操作方法就是在发送完每一个地址和数据后,继续发后面的数据,芯片内部的地址指针会自动累加,当达到页中最后一个字节时,时钟仍在继续,则内部地址指针回到页中第一个地址重新开始累加,并覆盖以前写入的数据。要注意的是,在操作过程中 CS 不能拉高,只有在数据字节的最后一个位传送完成后才可以拉高 CS,不然写入操作将不完全。在写入数据或写状态寄存器指令写送后,芯片会进入一次非易失性写操作,这会花费一定的时间,最大约为 10ms,在这个时间内可以用读状态寄存器,并检查 WIP 位,当 WIP 为 1 时则说明写入还在进行中,只有当 WIP 位为 0 时才可以进行下一次的读写数据操作,否则将会使写入不完全。图 7 写数据时序(点击看大图)下面我们用 AT89C2051 和 X5045 为主做一个密码控制器实验。使用 X5045 的看门狗功能可以使电路在受到干扰或特殊情况死机后,可以自动复位重启电路,使电路保持正常工作。使用 X5045 的数据读写功能,可以保存密码,也可以修改密码。本文附带的实例程序演示 X5045 的状态寄存器的读写、存储位的读写,里面的功能函数可以直接移植到别的程序中。电路上电后,红色 LED 亮,当按下按键时绿色 LED 闪亮一下,当按下3,1,5,8,1,8,密码正确,红色 LED 灭,绿色 LED 亮,继电器打开,10 秒后回到上电时的状态。当按下第一次按键后 20 秒内没有按下正确的键值,则会进行下一次键值输入。程序可以方便修改成可以方便更改密码的程序,也可以加入记录工作次数的程序等等,升级成更实用的程序。图 9 是笔者用万用板搭建成的实验电路。在上一篇提供的 EEPROM 读写器电路及程序也支持 25 系列芯片和 X5043/45 芯片,可以直接使用它来读写。图 7 原理图(点击看大图)
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号