基于PIC单片机与串行闪存的SPI接口设计

[09-13 23:35:28]   来源:http://www.88dzw.com  电视机电路   阅读:8475

文章摘要: 图2中,VDD为+5 V,由于PIC16F877A工作在5 V电压下,而M25P16的工作电压范围为2.7~3.6 V,二者不能直接相连。这里采用电阻分压的方式,保证输入M25P16的S、C、D脚的电压在存储器能承受且能识别的范围内,通过在M25P16向PIC16F877A输入数据的SDO脚加上拉电阻,保证MCU可以识别M25P16输出的高电压,从而保证正常的SPI通信。如果MCU工作于3.3 V,则直接将二者的对应引脚相连即可。 www.88dzw.com 4 SPI软件设计 在硬件连线正确的基础上,要进行SPI通信,还要对M25P16编写驱动程序,包括SP

基于PIC单片机与串行闪存的SPI接口设计,标签:电视机电路,电路设计,http://www.88dzw.com

      图2中,VDD为+5 V,由于PIC16F877A工作在5 V电压下,而M25P16的工作电压范围为2.7~3.6 V,二者不能直接相连。这里采用电阻分压的方式,保证输入M25P16的S、C、D脚的电压在存储器能承受且能识别的范围内,通过在M25P16向PIC16F877A输入数据的SDO脚加上拉电阻,保证MCU可以识别M25P16输出的高电压,从而保证正常的SPI通信。如果MCU工作于3.3 V,则直接将二者的对应引脚相连即可。

 

www.88dzw.com

      4  SPI软件设计

      在硬件连线正确的基础上,要进行SPI通信,还要对M25P16编写驱动程序,包括SPI初始化、读M25P16的数据、向M25P16写人数据、数据的擦除等,这里使用C语言编程,编译器选择PICC,开发环境为MPLAB IDE8.10。

      PIC16F877A的SPI通信涉及4个寄存器:控制寄存器SSPCON、状态寄存器SSPSTAT串行接收/发送缓冲器SSPBUF和移位寄存器SSPSR。其中,SSPCON的8位都是可读可写的,用于设置SSP处于主/从模式、时钟频率、时钟极性、SSP使能以及写冲突检测;SSPSTAT只有高2位可读写,低6位是只读的。PIC16F877A处于接收模式时,SSPSR和SSPBUF构成2级缓冲的接收器,SSPSR每收到1个完整的字节,就将该字节传给SSPBUF,并将中断标志位SSPIF置1,可通过读SSPBUF得到数据;877A处于发送模式时,写SSPBUF操作会同时将数据写入SSPSR,触发传输。下面结合具体的代码进行详细阐述。

      (1)SPI初始化与读写函数

    从SendByte和RcvByte函数的代码中,可以看出数据发送和接收是否完成,都是通过判断STAT_BF标志位(SSPSTAT寄存器的BF位,STAT_BF是在头文件pic1687x.h中定义的名称)来实现的,而数据手册中关于BF位的描述仅用于接收模式。这是由于PIC16F877A通过SDO发送数据的同时,会通过SDI读人数据,当1字节发送完成时,刚好接收1字节到SSPBUF,这时SSPBUF满,BY被置为1,故可通过STAT_BF标志判断1字节是否发送完成。

      (2)连续写函数

      M25P16的PP指令允许1次连续写入不超过1页(256字节)的数据。写人数据之前,首先要发出写允许命令,然后才能执行数据写入操作。数据写入函数参数包括address(32位地址)、bLOCk(写入数据缓冲区指针)、n(一次连续写入的字节数,n<256)。如果address的低8位不全为0,即不是从页起始处写,并且需要写入的数据超出该页剩余空间,则超出部分被丢弃。代码如下:

  其中,delay()为延时子函数,参数为ms级,delay(1)即延时1ms。加入延时,是为了保证存储器在准备好的情况下才进行读写操作。

上一页  [1] [2] [3]  下一页


Tag:电视机电路电视机电路,电路设计家电维修 - 单元电路介绍 - 电视机电路

《基于PIC单片机与串行闪存的SPI接口设计》相关文章