您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 【很好】第八章常用串行总线分析及应用
第八章常用串行总线介绍及应用8.11-wire总线目前单片机应用系统比较常见的串行扩展接口和串行扩展总线有:1-Wair单总线、SPI串行总线、IIC总线。1-wire单总线采用单根信号线,既可以传输时钟又可以传输数据,而且数据传输是双向的。它具有节省I/O口资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。1-wire单总线适用于单个主机系统,能够控制一个或多个从机设备。当只有一个从机位于总线上时,系统可按照单节点系统操作,而当多个从机位于总线上时则系统按照多节点系统操作。我们以单总线温度传感器DS18B20的应用为例,详细介绍1-wire的应用。8.1.1DS18B20的简介DS18B20的主要特征:全数字温度转换及输出。先进的单总线数据通信。最高12位分辨率,精度可达土0.5摄氏度。12位分辨率时的最大工作周期为750毫秒。可选择寄生工作方式。检测温度范围为–55°C~+125°C(–67°F~+257°F)内置EEPROM,限温报警功能。64位光刻ROM,内置产品序列号,方便多机挂接。多样封装形式,适应不同硬件系统。DALLAS(达拉斯)公司生产的DS18B20温度传感器具有超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强。DS18B20的优势是我们学习单片机技术和开发温度相关的小产品的不二选择。8.1.2DS18B20的引脚及内部结构1.DS18B20的封装DS18B20的封装采用TO-92和8-PinSOIC封装,外形及管脚排列如图8-1。DS18B20引脚定义:GND为电源地。DQ为数字信号输入/输出端。VDD为外接供电电源输入端(在寄生电源接线方式时接地)。NC空引脚。2.DS18B20的构成DS18B20内部结构图如图8-2所示。主要包括:寄生电源、温度传感器、64位激光(lasered)ROM、存放中间数据的高速暂存器RAM、非易失性温度报警触发器TH和TL、配置寄存器等部分。1)寄生电源寄生电源由二极管VD1、VD2、寄生电容C和电源检测电路组成,电源检测电路用于判定供电方式,DS18B20有两种供电方式:3V~5.5V的电源供电方式和寄生电源供电方式。在寄生电源供电方式下,DS18B20从单线信号线上汲取能量:在信号线DQ处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。该寄生电源有两个优点:第一,检测远程温度时无需本地电源;第二,缺少正常电源时也能读ROM。2)64位只读存储器ROMROM中的64位序列号是出厂前被光刻好的,它是该DS18B20的地址序列码。光刻ROM的作用是使每一个DS18B20都各不相同,可以实现一根总线上挂接多个DS18B20。64位光刻ROM序列号的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。3)内部存储器DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPROM,EEPROM用于存放高温度和低温度触发器TH、TL和配置寄存器的内容。高速暂存存储器由9个字节组成。4)温度传感器DS18B20中的温度传感器可以完成对温度的测量。DS18B20的温度测量范围是-55℃~+125℃,分辨率的默认值是12位。DS18B20温度采集转化后得到16位数据,存储在DS18B20的两个8位RAM中,高字节的高5位S代表符号位,如果温度值大于或等于零,符号位为0;温度值小于零,符号位为1。低字节的第四位是小数部分,中间7位是整数部分。D7D6D5D4D3D2D1D02322212-02-12-22-32-4D15D14D13D12D11D10D9D8SSSSS262524对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。5)配置寄存器暂存器的第五字节是配置寄存器,可以通过相应的写命令进行配置其内容如下表:低五位一直都是“1”,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置DS18B20的分辨率。8.1.3单总线开发使用单总线的开发使用过程分三步:1)单总线的硬件连接结构;2)单总线的操作命令序列;3)单总线的通信协议,总线的操作时序。1.硬件结构主机或从机通过一个漏极开路或三态端口连接至该数据线,这样允许设备在不发送数据时释放数据总线,以便总线被其它设备所使用。为了使总线上所有电路的输出能完成“线与”的功能,连接到总线上的器件的输出级必须为“开漏”或“开集”的形式。其内部等效电路如图8-3所示2.单总线操作命令序列典型的单总线命令序列如图8-4所示,每次访问单总线器件,必须严格遵守这个命令序列,否则,单总线器件不会响应主机。但是,这个准则对于搜索ROM命令和报警搜索命令例外,在执行两者中任何一条命令之后,主机不能执行其后的功能命令,必须返回,从初始化开始。根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。控制器对18B20操作流程总流程:初始化1-WIRE总线——发送ROM命令——发送Memory命令——提取数据(可以没有)1.复位:首先我们必须对DS18B20芯片进行复位,复位就是由控制器(单片机)给DS18B20单总线至少480uS的低电平信号。当18B20接到此复位信号后则会在15~60uS后回发一个芯片的存在脉冲。2.存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在15~60uS后接收存在脉冲,存在脉冲为一个60~240uS的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控制器与18B20间的数据通信。如果复位低电平的时间不足或是单总线的电路断路都不会接到存在脉冲,在设计时要注意意外情况的处理。3.ROM操作命令在主机检测到应答脉冲后,就可以发出ROM命令。这些命令与各个从机设备的唯一64位ROM代码相关,允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。这些命令还允许主机能够检测到总线上有多少个从机设备以及其设备类型,或者有没有设备处于报警状态。从机设备可能支持5种ROM命令(实际情况与具体型号有关)每种命令长度为8位,主机在发出功能命令之前,必须送出合适的ROM命令。以下为几个ROM命令的功能:控制器对18B20操作流程(1)读ROM[33h]命令(仅适合于单节点)(2)报警搜索[ECh]命令(仅少数1-wire器件支持)(3)跳越ROM[CCh]命令(仅适合于单节点)4.RAM功能命令在主机发出ROM命令,以访问某个指定的DS18B20,接着就可以发出DS18B20支持的某个RAM功能命令。这些命令允许主机写入或读出DS18B20暂存器、启动温度转换以及判断从机的供电方式。3.单总线数据通讯协议数字式温度传感器和模拟传感器最大的区别,是将温度信号直接转化成数字信号,然通过串行通信方式输出。所有的单总线器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲、应答脉冲序列;写0、写1、和读0、读1。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前,这一点与多数串行通信格式不同(多数为字节的高位在前)。1)初始化序列——复位和应答脉冲单总线上的所有通信都是以初始化序列开始。主机通过拉低单线480us以上,产生复位脉冲,然后释放该线,进入Rx接收模式。主机释放总线时,4.7K的电阻将单总线拉高,产生一个上升沿。单线器件DS18B20检测到该上升沿后,延时15~60us,DS18B20通过拉低总线60~240us来产生应答脉冲。主机接收到从机的应答脉冲后,说明有单线器件在线。总线初始化脉冲时序图如图8-5://温度传感器bitinit_ds18b20(void){ucharj;DQ=1;DQ=0;j=250;while(--j);DQ=1;j=40;while(--j);j=110;while(DQ!=0){j--;if(!j)return0;}j=250;while(--j);return1;}2)写时隙当主机将单总线DQ从逻辑高(空闲状态)拉为逻辑低时,即启动一个写时序。存在两种写时隙:“写1”和“写0”。主机采用写1时隙向从机写入1,而采用写0时隙向从机写入0。所有写时隙至少需要60us,且在两次独立的写时隙之间至少需要1us的恢复时间。两种写时隙均起始于主机拉低总线(图8-6所示)。产生写1时隙的方式:主机在拉低总线后,接着必须在15us之内释放总线(向总线写1),由4.7K上拉电阻将总线拉至高电平;而产生写0时隙的方式:在主机拉低总线后,只需在整个时隙期间保持低电平即可(至少60us)。在写时隙起始后15-60us期间,单总线器件采样总线电平状态。如果在此期间采样为高电平,则逻辑1被写入该器件;如果为0,则写入逻辑0。//写时序voidwtbyte_ds18b20(ucharwdat){uchari,j;for(i=0;i8;i++){if(wdat&0x01)//写1时序{DQ=1;_nop_();DQ=0;_nop_();_nop_();_nop_();DQ=1;j=30;while(--j);}else//写0时序{DQ=1;_nop_();DQ=0;j=35;while(--j);DQ=1;}wdat=1;}}3)读时隙总线器件仅在主机发出读时隙时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时隙,以便从机能够传输数据。所有读时隙至少需要60us,且在两次独立的读时隙之间至少需要1us的恢复时间。每个读时隙都由主机发起,至少拉低总线1us图8-7所示。/*读时序(位)*/bitrdbit_ds18b20(void){ucharj;bitb;DQ=1;_nop_();DQ=0;_nop_();_nop_();_nop_();DQ=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();if(DQ){b=1;}else{b=0;}j=30;while(--j);returnb;}/*读字节*/ucharrdbyte_ds18b20(void){uchari,dat;for(dat=0,i=0;i8;i++){dat=1;if(rdbit_ds18b20())dat|=0x80;}returndat;}温度转换//温度转换函数unsignedchardisplay_7leds[7];/*用数组保存转换后的温度,第1位保存符号,第2,3,4保存整数,第5位保存小数点,6,7位保存小数值*/voidconvert_t(charuct_l,charuct_h){uchartm_dot;tm_dot=(uct_l2)&0x03;uct_h=(uct_h4)&0xf0;tm=uct_h|((uct_l4)&0x0f);if(uct_h&0x80){display_7leds[0]='-';tm=~tm+1;}elsedisplay_7leds[0]='';display_7leds[1]=tm/100;display_7leds[2]=tm%100/10;display_7leds[3]=tm%10;display_7leds[4]=46;//'.'asc=46tm_dot=tm_dot*25;display_7leds[5]=tm_dot/10;display_7led
本文标题:【很好】第八章常用串行总线分析及应用
链接地址:https://www.777doc.com/doc-3954505 .html