PIC单片机与串行闪存的SPI接口设计_第1页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、pic单片机与串行闪存的spi接口设计以性能稳定、品种众多等特点在工业控制、仪器仪表、家电、通信等领域得到广泛应用。虽然无数型号自身集成了存储器,但在无数状况下难以满足系统对大容量存储的要求,需要外扩非易失性的存储器。与并行flash存储器相比,串行flash存储器占用引脚少,体积小,易于扩展,接线容易,工作牢靠,故而越来越多地应用在各类产品和工业测控系统中。本文主要研究pic16f877a单片机与串行闪存m25p16之间的spi通信,在要求大容量数据存储且mcu引脚资源有限的状况下具有有用价值。1 spi工作原理spi(serial peripheral interface)是一种常用的串行

2、通信协议,用于mcu系统与外围设备的通信,可用来衔接存储器、ad转换器、da转换器、实时时钟、驱动器、,甚至其他处理器。spi主要用法4个信号:mosi(主机输出从机输人)、miso(主机输入从机输出)、sck(串行时钟)和cs(片选)。其中,sck由主机产生,作为传输的同步时钟,控制全部数据传输。主机通过触发从设备的cs打算二者之间的spi传输是否能够举行。主机和外设都包含1个串行移位寄存器。主机通过向自己的spi串行寄存器写入1个字节来发起1次传输,然后通过mosi信号线将数据传给外设,同时外设将自己移位寄存器中的内容通过miso信号线返回给主机,1所示。这样,两个移位寄存器中的内容就交换

3、了。也就是说,外设的写操作和读操作是同步完成的。在实际应用中,假如只举行写操作,则主机只需忽视收到的字节即可;假如主机要读外设的数据,必需发送1个字节来引发从机的传输,发送的这个字节可以是随意数据。2 m25p16简介m25p16是16 mb的串行闪存,具有先进的写庇护机制,支持速度高达50 mhz的spi的存取操作。该存储器有32个扇区,每个扇区256页,每页256字节。工作范围2.73.6 v,工作温度范围-40+85。数据保存长达20年,每个扇区可擦写编程100 000次。m25p16支持的操作命令共有12条。命令格式为:其中,8位的指令字是必须的,地址、哑元以及数据字节的有无和长度会因

4、命令的不同而有所差别,细节如表1所列。全部的指令码、地址、串行输入输出的数据,均是高位在前,低位在后。对m25p16操作时,先选中芯片(即片选信号s拉低),然后串行输入操作命令字节,紧接着串行输入地址字节(0或3字节),须要时还要加入哑读字节,最后串行输入输出数据字节,然后把片选信号拉高,之后m25p16启动内部控制规律,自行完成相应的操作。3 spi硬件设计pic16f877a单片机具有十分完美的spi接口(rc3sck、rc4sdi、rc5sdo、ra5ss),惟独pic16f877a作为从机时,ra5ss引脚才作为spi脚,pic16f877a为主机时,ss可作为一般io用法。通过该接口

5、,可比较简单地实现pic16f877a与spi flash的通信。pic16f877a与m25p16的硬件接口2所示。其中,sck、sdi、sdo为mcu的spi专用引脚,分离与存储器的对应引脚相连,可选mcu的随意io脚作为存储器的片选信号,图中选取rc2脚与存储器的片选s相连,这样,在spi通信时只涉及mcu的c口,便于操作。m25p16的hold和w挺直接高电平,表示不允许在s有效的状况下暂停spi通信且囫囵存储区都没有写庇护。图2中,vdd为+5 v,因为pic16f877a工作在5 v电压下,而m25p16的工作电压范围为2.73.6 v,二者不能挺直相连。这里采纳分压的方式,保证输

6、入m25p16的s、c、d脚的电压在存储器能承受且能识别的范围内,通过在m25p16向pic16f877a输入数据的sdo脚加上拉电阻,保证mcu可以识别m25p16输出的高电压,从而保证正常的spi通信。假如mcu工作于3.3 v,则挺直将二者的对应引脚相连即可。4 spi软件设计在硬件连线正确的基础上,要举行spi通信,还要对m25p16编写驱动程序,包括spi初始化、读m25p16的数据、向m25p16写人数据、数据的擦除等,这里用法编程,编译器挑选picc,开发环境为mplab ide8.10。pic16f877a的spi通信涉及4个寄存器:控制寄存器sspcon、状态寄存器sspst

7、at串行接收发送缓冲器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函数

8、的代码中,可以看出数据发送和接收是否完成,都是通过推断stat_bf标记位(sspstat寄存器的bf位,stat_bf是在头文件pic1687xh中定义的名称)来实现的,而数据手册中关于bf位的描述仅用于接收模式。这是因为pic16f877a通过sdo发送数据的同时,会通过sdi读人数据,当1字节发送完成时,刚好接收1字节到sspbuf,这时sspbuf满,by被置为1,故可通过stat_bf标记推断1字节是否发送完成。(2)延续写函数m25p16的pp命令允许1次延续写入不超过1页(256字节)的数据。写人数据之前,首先要发出写允许指令,然后才干执行数据写入操作。数据写入函数参数包括add

9、ress(32位地址)、block(写入数据缓冲区指针)、n(一次延续写入的字节数,n其中,delay()为延时子函数,参数为ms级,delay(1)即延时1ms。加入延时,是为了保证存储器在预备好的状况下才举行读写操作。(3)延续读函数m25p16允许发出读命令后,延续读取数据,这一模式极大提高了总线效率。数据读取函数的参数包括address:32位地址;block:读数据缓冲区指针;n:一次延续读取的字节数,代码如下:m25p16的延续读操作与延续写不同的是,无论read还是fast_read,在起始地址处1字节的数据读出后,会自动寻址更高地址处的数据,故程序中无需address+语句。除了对m25p16的初始化、读写之外,常常还要对其举行擦除操作,擦除

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论