您好,欢迎访问三七文档
串行通信协议串行总线的组成及工作原理采用串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高。同时,系统的更改和扩充极为容易。常用的串行扩展总线有:单总线(1-WIREBUS)I2C(InterICBUS)总线SPI(SerialPeripheralInterface)总线One-Wire总线(单总线)One-Wire总线是DALLAS公司研制开发的协议。它由一个总线主节点、一个或多个从节点组成系统,通过一根信号线对从芯片进行数据的读取。每一个符合One-Wire协议的从芯片都有一个唯一的地址,包括48位的序列号、8位的家族代码和8位的CRC代码。主芯片对各个从芯片的寻址依据这64位的不同来进行。One-Wire总线利用一根线实现双向通信。因此其协议对时序的要求较严格,如应答等时序都有明确的时间要求。基本的时序包括复位及应答时序、写一位时序、读一位时序。在复位及应答时序中,主器件发出复位信号后,要求从器件在规定的时间内送回应答信号;在位读和位写时序中,主器件要在规定的时间内读回或写出数据。单总线的时序One-Wire协议定义了复位脉冲、应答脉冲、写0、读0和读1时序等几种信号类型。所有的单总线命令序列(初始化,ROM命令,功能命令)都是由这些基本的信号类型组成的。在这些信号中,除了应答脉冲外,其他均由主机发出同步信号,并且发送的所有命令和数据都是字节的低位在前。数字化温度传感器DS18B20DALLAS半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的DS18B20体积更小、更经济、更灵活。DS18B20测量温度范围为55℃~+125℃。在10℃~+85℃范围内,精度为0.5℃。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。DS18B20的外形和内部结构DS18B20内部结构主要由4部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的外形及管脚排列如图。DS18B20引脚定义如下:(1)DQ为数字信号输入/输出端。(2)GND为电源地。(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。DS18B20的4个主要数据部件(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看做是该DS18B20的地址序列码,这样就可以实现一根总线上挂接多个DS18B20的目的。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。8位检验CRC48位序列号8位工厂代码(10H)(2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。DS18B20温度值格式表如表所示。其中“S”为标志位,对应的温度计算:当符号位S=0时,表示测得温度值为正,直接将二进制位转换为十进制;当S=1时,表示测得温度值为负,先将补码变换为原码,再计算十进制值。SSSSS262524232221202-12-22-32-4DS18B20温度与二进制温度数据对应关系7418温度/℃二进制表示十六进制表示+125000001111101000007D0H+8500000101010100000550H+25.062500000001100100010191H+10.125000000001010001000A2H+0.500000000000010000008H000000000000000000000H-0.51111111111111000FFF8H-10.1251111111101011110FF5EH-25.06251111111001101111FE6FH-551111110010010000FC90HI2C-BUSI2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。在多主机系统中,可能同时有几个主机企图启动总线传送数据。为了避免混乱,I2C总线要通过总线仲裁,以决定由哪一台主机控制总线。数据位的有效性规定I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。I2C总线的数据传送起始和终止信号SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号。对于不具备I2C总线硬件接口的有些单片机来说,为了检测起始和终止信号,必须保证在每个时钟周期内对数据线SDA采样两次。接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将SCL线拉成低电平,从而使主机处于等待状态。直到接收器件准备好接收下一个字节时,再释放SCL线使之为高电平,从而使数据传送可以继续进行。数据传送格式字节传送与应答每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。IO口模拟子程序(1)起始信号voidStart_I2c(void){SDA=1;//发送起始条件的数据信号DelayNus(2);SCL=1;DelayNus(6);//起始条件建立时间大于4.7us,延时SDA=0;//发送起始信号DelayNus(6);//起始条件建立时间大于4.7us,延时SCL=0;//钳住I2C总线,准备发送或接收数据}(2)终止信号voidStop_I2c(void){SDA=0;DelayNus(2);SCL=1;DelayNus(6);//起始条件建立时间大于4.7us,延时SDA=1;DelayNus(6);}从机地址(SlaveAddress)I2C总线不需要额外的地址译码器和片选信号。多个具有I2C总线接口的器件都可以连接到同一条I2C总线上,它们之间通过器件地址来区分。主机是主控器件,它不需要器件地址,其它器件都属于从机,要有器件地址。必须保证同一条I2C总线上所有从机的地址都是唯一确定的,不能有重复,否则I2C总线将不能正常工作。D7~D1位组成从机的地址。D0位是数据传送方向位,为“0”时表示主机向从机写数据,为“1”时表示主机由从机读数据例:AT24C系列E2PROM芯片地址的固定部分为1010,A2、A1、A0引脚接高、低电平后得到确定的3位编码。形成的7位编码即为该器件的地址码。子地址带有I2C总线的器件除了有从机地址(SlaveAddress)外,还可能有子地址。从机地址是指该器件在I2C总线上被主机寻址的地址,而子地址是指该器件内部不同部件或存储单元的编址。例如,带I2C总线接口的E2PROM就是拥有子地址器件的典型代表。应答在I2C总线传输数据过程中,每传输一个字节,都要跟一个应答状态位。接收器接收数据的情况可以通过应答位来告知发送器。应答位的时钟脉冲仍由主机产生,而应答位的数据状态则遵循“谁接收谁产生”的原则,即总是由接收器产生应答位。主机向从机发送数据时,应答位由从机产生;主机从从机接收数据时,应答位由主机产生。I2C总线标准规定:应答位为0表示接收器应答(ACK),常常简记为A;为1则表示非应答(NACK),常常简记为A。发送器发送完LSB之后,应当释放SDA线(拉高SDA,输出晶体管截止),以等待接收器产生应答位基本的数据传输格式在图4和图5中,各种符号的意义为:S:起始位(START)SA:从机地址(SlaveAddress),7位从机地址W:写标志位(Write),1位写标志R:读标志位(Read),1位读标志A:应答位(Acknowledge),1位应答/A:非应答位(NotAcknowledge),1位非应答D:数据(Data),每个数据都必须是8位P:停止位(STOP)阴影:主机产生的信号无阴影:从机产生的信号重复起始条件(RepeatedSTARTcondition)主机与从机进行通信时,有时需要切换数据的收发方向(例如,访问某一具有I2C总线接口的E2PROM存储器时,主机先向存储器输入存储单元的地址信息(发送数据),然后再读取其中的存储内容(接收数据))在切换数据的传输方向时,可以不必先产生停止条件再开始下次传输,而是直接再一次产生开始条件。I2C总线在已经处于忙的状态下,再一次直接产生起始条件的情况被称为重复起始条件。重复起始条件常常简记为Sr。读/写一字节子程序voidSendByte(unsignedcharc){unsignedchari;for(i=0;i8;i++){if((ci)&0x80)SDA=1;//判断发送位elseSDA=0;DelayNus(2);SCL=1;DelayNus(6);SCL=0;DelayNus(6);}}unsignedcharRcvByte(void){unsignedchari;unsignedcharc=0;SDA=1;for(i=0;i8;i++){SCL=0;//置时钟线为低,准备接收数据位DelayNus(6);//时钟低电平周期大于4.7μsSCL=1;DelayNus(2);c=1;if(SDA){c+=1;}//读数据位,将接收的数据存c}SCL=0;returnc;}SPI-BUS同步串行外设接口(SPI)是由摩托罗拉公司开发的全双工同步串行总线,该总线大量用在与EEPROM、ADC、FRAM和显示驱动器之类的慢速外设器件通信通信方式单工通信:信息只能单方向传输的工作方式。例如遥控、遥测,就是单工通信方式半双工通信:可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。同一时刻里,信息只能有一个传输方向。如日常生活中的例子有步话机通信,对讲机等。全双工通信:通信的双方可以同时发送和接受信息的信息交互方式。SPI-BUSSPI(SerialPeripheralInterface)是一种串行串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交换。SPI接口由SDI(串行数据输入),SDO(串行数据输出),SCK(串行移位时钟),CS(从使能信号)四种信号构成,CS决定了唯一的与主设备通信的从设备,如没有CS信号,则只能存在一个从设备,主设备通过产生移位时钟来发起通讯。通讯时,数据由SDO输出,SDI输入,数据在时钟的上升或下降沿由SDO输出,在紧接着的下降或上升沿由SDI读入,这样经过8/16次时钟的改变,完成8/16位数据的传输SPI-BUS该总线通信基于主-从(所有的串行的总线均是这样,USB,IIC,SPI等)配置,而且下面提到的方向性的操作合指代全部从主设备的角度说得。它有以下4个信号:MOSI:主出/从入MISO:主入/从出SCK:串行时钟SS:从属选择;芯片上“从属选择”(slave-select)的引脚数决定了可连到总线上
本文标题:串行总线详解
链接地址:https://www.777doc.com/doc-2726651 .html