Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 合同模板 > SPI协议详解,spi协议详解pdf百度网盘下载

SPI协议详解,spi协议详解pdf百度网盘下载

收藏

本作品内容为SPI协议详解,格式为 docx ,大小 777395 KB ,页数为 10页

SPI协议详解


('SPI协议详解SPI的四种模式是什么,然后你不会,总是会有点尴尬。读了这篇文章,你会对SPI协议有一定的认识,也会对你的面试有帮助。协议是为了规范收发双方的,好的协议不仅需要速度的保证,还需要传输稳定,可拓展等等。#SPI协议简介SPI,是英语SerialPeripheralinterface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器等芯片,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如AT91RM9200。SPI主从模式硬件连接如下图SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。SPI的四条通讯线是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。MOSI主设备数据输出,从设备数据输入对应MOSImasteroutputslaveinputMISO主设备数据输入,从设备数据输出对应MISOmasterinputslaveoutputSCLK时钟信号,由主设备产生CS/SS从设备使能信号,由主设备控制要注意的是,SCLK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据,也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议,因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义。在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。当然了,因为SPI从设备没有地址区分,这样也存在了一个弊端,那就是「没有指定的流控制,没有应答机制确认是否接收到数据」#SPI总线四种工作方式SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。时序详解:CPOL时钟极性选择,为0时SPI总线空闲为低电平,为1时SPI总线空闲为高电平CPHA时钟相位选择,为0时在SCK第一个跳变沿采样,为1时在SCK第二个跳变沿采样Mode0SCLK空闲是为低电平,数据在上升沿有效Mode1SCLK空闲是为低电平,数据在下降沿有效Mode2SCLK空闲是为高电平,数据在下降沿有效Mode3SCLK空闲是为高电平,数据在上升沿有效4种工作模式波形时序如下图:#协议心得SPI接口时钟配置心得:在主设备配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。但要注意的是,主设备的SDO连接从设备的SDI,从设备的SDO连接主设备的SDI。从设备SDI接收的数据是主设备的SDO发送过来的,主设备SDI接收的数据是从设备SDO发送过来的,所以主设备这边SPI时钟极性的配置(即SDO的配置)跟从设备的SDI接收数据的极性是相反的,跟从设备SDO发送数据的极性是相同的。下面这段话是SychipWlan8100ModuleSpec上说的,充分说明了时钟极性是如何配置的:The81xxmodulewillalwaysinputdatabitsattherisingedgeoftheclock,andthehostwillalwaysoutputdatabitsonthefallingedgeoftheclock.意思是:主设备在时钟的下降沿发送数据,从设备在时钟的上升沿接收数据。因此主设备这边SPI时钟极性应该配置为下降沿有效。又如,下面这段话是摘自LCDDriverICSSD1289:SDIisshiftedinto8-bitshiftregisteroneveryrisingedgeofSCKintheorderofdatabit7,databit6……databit0.意思是:从设备SSD1289在时钟的上升沿接收数据,而且是按照从高位到地位的顺序接收数据的。因此主设备的SPI时钟极性同样应该配置为下降沿有效。时钟极性和相位配置正确后,数据才能够被准确的发送和接收,因此应该对照从设备的SPI接口时序或者Spec文档说明来正确配置主设备的时钟。#SPI协议软件模拟单片机软件模拟SPI接口—加深理解SPI总线协议现以AT89C205l单片机模拟SPI总线操作串行EEPROM93CA6为例,如图1所示,介绍利用单片机的I/O口通过软件模拟SPI总线的实现方法。在这里,仅介绍读命令的时序和应用子程序。93C46存储器SPI总线的工作原理93CA6作为从设备,其SPI接口使用4条I/O口线:串行时钟线(SK)、输出数据线DO、输入数据线DI和高电平有效的从机选择线CS。其数据的传输格式是高位(MSB)在前,低位(LsB)在后。93C46的SPI总线接口读命令时序如图2所示。软件模拟SPI接口的实现方法对于不带SPI串行总线接口的AT89C2051单片机来说,可以使用软件来模拟SPI的操作,图1所示为AT89C2051单片机与串行EEPROM93C46的硬件连接图,其中,P1.0模拟SPI主设备的数据输出端SDO,P1.2模拟SPI的时钟输出端SCK,P1.3模拟SPI的从机选择端SCS,P1.1模拟SPI的数据输入SDI。上电复位后首先先将P1.2(SCK)的初始状态设置为0(空闲状态)。读操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(10),6位被读的数据地址(A5A4A3A2A1A0),然后通过P1.1口读1位空位(0),之后再读l6位数据(高位在前)。写操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(01),6位被写的数据地址(A5A4A3A2A1A0),之后通过P1.0口发送被写的l6位数据(高位在前),写操作之前要发送写允许命令,写之后要发送写禁止命令。写允许操作(WEN)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(11XXXX)。写禁止操作(WDS)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(00XXXX)。下面介绍用C51模拟SPI的子程序。/例子1///首先定义好I/O口sbitSDO=P1^0;sbitSDI=P1^1;sbitSCK=P1^2;sbitSCS=P1^3;sbitACC_7=ACC^7;unsignedintSpiRead(unsignedcharadd){unsignedchari;unsignedintdatal6;add&=0x3f;/6位地址/add=0x80;/读操作码l0/SDO=1;/发送1为起始位/SCK=0;SCK=1;for(i=0;<8;i++)/发送操作码和地址/{if(add&0x80==1)SDO=1;elseSDO=0;SCK=0;/从设备上升沿接收数据/SCK=1;add<<=1;}SCK=1;/从设备时钟线下降沿后发送数据,空读1位数据/SCK=0;datal6<<=1;/读16位数据/for(i=0;<16;i++){SCK=1;_nop_();if(SDI==1)datal6=0x01;SCK=0;datal6<<=1;}returndatal6;}/例子2/#defineSS252//定义SS所对应的GPIO接口编号#defineSCLK253//定义SCLK所对应的GPIO接口编号#defineMOSI254//定义SCLK所对应的GPIO接口编号#defineMISO255//定义MISO所对应的GPIO接口编号#defineOUTP1//表示GPIO接口方向为输出#defineINP0//表示GPIO接口方向为输入/SPI端口初始化voidspi_init(){set_gpio_direction(SS,OUTP);set_gpio_direction(SCLK,OUTP);set_gpio_direction(MOSI,OUTP);set_gpio_direction(MISO,INP);set_gpio_value(SCLK,0);//CPOL=0set_gpio_value(MOSI,0);}/从设备使能enable:为1时,使能信号有效,SS低电平为0时,使能信号无效,SS高电平voidss_enable(intenable){if(enable)set_gpio_value(SS,0);//SS低电平,从设备使能有效elseset_gpio_value(SS,1);//SS高电平,从设备使能无效}/SPI字节写voidspi_write_byte(unsignedcharb){inti;for(i=7;i>=0;i--){set_gpio_value(SCLK,0);set_gpio_value(MOSI,b&(1<


  • 编号:1700673189
  • 分类:合同模板
  • 软件: wps,office word
  • 大小:10页
  • 格式:docx
  • 风格:商务
  • PPT页数:777395 KB
  • 标签:

广告位推荐

相关合同模板更多>