SPI协议简介SPI协议简介.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SPI协议简介SPI协议简介

SPI协议简介 SPI是Serial Peripheral Interface的简称,NDS中的触摸屏,麦克风,电源控制,固件及DS卡的EEPROM都是基于SPI的。所以弄明白SPI的原理对NDS的研究很有帮助。SPI 是一种允许一个主设备启动一个与从设备的同步通讯的协议,从而完成数据的交换。也就是SPI是一种规定好的通讯方式。这种通信方式的优点是占用端口较少, 一般4根就够基本通讯了(不算电源线)。同时传输速度也很高。一般来说要求主设备要有SPI控制器(但可用模拟方式),就可以与基于SPI的芯片通讯了。 这种芯片也许是储存芯片,像DS卡的存档芯片,也许是控制芯片,像DS触摸屏的控制芯片等等。 L SPI 的通信原理很简单,它需要至少4根线,事实上3根也可以。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时 钟),CS(片选)。其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许 在同一总线上连接多个SPI设备成为可能。 接 下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原 因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过SDO线,数据在时钟上沿或下沿时改变,在紧接着的下沿或上沿被读取。 完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。 o要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。 这 样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂 停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。 不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。 下面是用单片机实现触摸屏的代码: [功 能] 8051单片机驱动ADS7846/ADS7843芯片 ? ? 显示代码 打印 01 #include reg51.h 02 #include intrins.h 03 ?? 04 ?? 05 sbit DCLK=P1^6; //根据用户自己的定义 06 sbit CS=P2^2; 07 sbit DIN=P2^3; 08 sbit DOUT=P2^4; 09 sbit BUSY=P2^5; 10 ?? 11 delay(unsigned char i--) 12 { 13 while(i--); 14 } 15 ?? 16 ?? 17 void start() //SPI开始 18 { 19 DCLK=0; 20 CS=1; 21 DIN=1; 22 DCLK=1; 23 CS=0; 24 } 25 ?? 26 WriteCharTo7843(unsigned char num) //SPI写数据 27 { 28 unsigned char count=0; 29 DCLK=0; 30 for(count=0;count8;count++) 31 { 32 num=1; 33 DIN=CY; 34 DCLK=0; _nop_();_nop_();_nop_(); //上升沿有效 35 DCLK=1; _nop_();_nop_();_nop_(); 36 } 37 } 38 ?? 39 ?? 40 ReadFromCharFrom7843() //SPI 读数据 41 { 42 unsigned char count=0; 43 unsigned int Num=0; 44 for(count=0;count12;count++) 45 { 46 Num=1; 47 DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效 48 DCLK=0; _nop_();_nop_();_nop_(); 49 if(DOUT) Num++; 50 } 51 return(N

文档评论(0)

yxutcangfp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档