首页 工作文档7 通信接口设计

工作文档7 通信接口设计

举报
开通vip

工作文档7 通信接口设计工作文档7 通信接口设计 7 通信接口设计 2 7.1 串行接口 ......................................................................................... 2 7.1.1 串行通信概述 ............................................................................. 2 7.1.2 串行接口设计实例 .............................

工作文档7 通信接口设计
工作文档7 通信接口设计 7 通信接口设计 2 7.1 串行接口 ......................................................................................... 2 7.1.1 串行通信概述 ............................................................................. 2 7.1.2 串行接口设计实例 ..................................................................... 5 27.2 IC接口 ........................................................................................... 9 27.2.1 IC接口概述............................................................................... 9 27.2.2 IC接口设计实例..................................................................... 10 7.3 ETHERNET以太网接口.................................................................. 16 7.3.1 Ethernet接口概述 .................................................................... 16 7.3.2 以太网控制器RTL8019........................................................... 18 7.3.3 Ethernet接口设计实例 ............................................................ 20 7.4 USB接口 ...................................................................................... 24 7.4.1 USB接口概述 .......................................................................... 24 7.4.2 USB接口设计实例 ................................................................... 27 7 通信接口设计 计算机与外界的信息交换称为通信。基本的通信方式有两种,即并行通信和串行通信。并行通信是指数据的各位同时进行传送(发送或接收)的通信方式。串行通信指数据是一位一位按顺序传送的通信方式。构造基于网络的嵌入式应用,不仅仅是为了提供信息传送,还要实现信息的共享、分布式处理等功能。 7.1 串行接口 许多 I/O 接口器件与 CPU 交换信息或计算机与计算机之间交换信息,都是通过一对导线或通信来传递信息,这时数据时一位一位进行传输的,每一位都占据一个规定长度的时间间隔,这样数据一位位顺序传递的通信方式称为串行通信。 完成串行通信任务的接口称为串行通信接口。计算机在处理数据时总是以并行方式进行数据处理,而外部设备如果是串行通信方式,那么就需要将串行信息转变为并行信息,而计算机想要将信息传送给外设也必须将并行数据转换成串行数据。这样就需要一个转换信息的接口即串行接口。与并行接口相比较,串行接口应用更为广泛。本节首先介绍串行通信中的一些基本概念及串行通信接口的设计方法。 7.1.1 串行通信概述 1. 数据传送方式 串行通信时,数据在两个站(或设备)A 与 B 之间传送,按数据流方向的不同可分为单工、半双工、全双工和多工等几种传送方式。如图 7.1 所示. 单工(Simplex)方式只允许数据按一个固定的方向传送。采用这种方式时,就已经确定了通信双方中的一方为接收端,另一方为发送端。这种确定方式是不可以改变的。如图7.1 (a)现在把这种通信方式称为单向通信。 半双工(Half Duplex)通信是指信息的发送和接收要同时公用一条线,在半双工方式中,数据可在两个设备之间任一个方向传输,但两个设备之间只有一根传输线,故同一时间内只能在一个方向上传输数据,不能同时收发,故在通信换向时接口部分要靠电路转换,如图7.1 (b)。无线电对讲机就是半双工传输的一个例子,一个人在讲话的时候,另一个人只能听着,因为一端在发送信息时,接收端的电路是断开的。 全双工(Full Duplex)通信是指接口对接收和发送的信息用不同的通道供信息的发送和接收可同时进行,这就意味着工作于全双工方式下的串行通信信息的传递要用两条线即发送线、接收线,如图7.1 (c)。采用全双工的系统可以同时发送和接收数据,电话系统就是一个全双工传输数据的例子。计算机的主机和显示端(它由带键盘的 CRT 显示器构成)进行通信时,通常也采用全双工方式,一方面,键盘上敲入的字符可以送到主机内存,另一方面主机内存的信息可以送到显示器终端。在键盘上敲入一个字符后,并不立即显示出来,而是等计算机收到该字符后,再会送给终端,由终端将该字符显现出来。这样,对主机而言,前一个字符的回送过程和后一个字符的输入过程是同时进行的,并通过不同的线路进行传送,即系统工作于全双工方式。 多工方式下采用的多路复用技术主要有时分复用 TDM 和频分复用 FDM 两种。前者将共用的物理线路分成若干时间片,轮流为各信号占用,其特点是电路简单,抗干扰性强;后者利用频率调制原理将要发送的信号搬移到不同频段后同时或不同时地发送,其特点是效率高,但电路复杂,抗干扰能力弱。 在计算机串行通讯中主要使用半双工和全双工方式。 图7.1 串行通信的单工、半双工、双工及多工传送方式 2(异步通信和同步通信方式 串行通信可分为两种:一种为同步通信(Asynchronous);一种为异步通信(Synchronous)。 同步通信是将所要发送信息组成一个信息组(通常称为帧),在每帧信息的开始要有同步字符(1,2)个,在数据线上要保持连续的字符,没有信息时也要填上专用空字符,因为同步传输不允许在传输一帧信息时出现间隙。同步通信特点:传送信息量大,数度高,适宜于快速传递,灵活性差。 异步通信时,在字符开始要有起始位,一个字传输的结束要用间隔位进行字间隔。通常一组数据由多个字符组成,而字符是若干数码位的集合。本方式一次传送一个字符,若要传送一批字符,则需要反复调用该方式。各字符出现于数据场中的相对时间是随意的,没有专门的时钟控制。异步通信的特点:灵活性好,便于处理实时性强的串行数据;速度低,仅适宜于中低速率传输。 3(波特率和传输速率 随着计算机在各个领域的广泛利用,不但要解决人机通信的问题还要解决计算机之间,计算机与通信设备之间的通信问题。因此为了供通信双方相互衔接,人们就建立了在通信过程中收发双方 共同遵守的标准,标准包括:传输率、电特性、信号名称及接口标准。 并行通信中通常以每秒传送的字节数来 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示传送速率,而串行通信中通常以每秒传送的比特数(比特率)来表示传送速率。 (1)传输速率 串行通信中,可用传速率衡量通信设备传输数据快慢,传输速率定义为每秒钟传输的字符帧数。由于不同 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 的字符帧,每帧字符数据长度不同,用传输速率不能直观表达通信口传输数据速度的快慢。在微处理机系统的串行通信中,常采用波特率表示。 (2)波特率 串行中每秒钟传送二进制数码的位数称为波特率。波特率的单位bps,即位/秒(Bit per Second)。波特率主要用以表征数据的传输速度,波特率越高,数据传输速度越快。 串行口的波特率与通信接口的标准以及通信线路的质量好坏有关,例如采用RS-232C标准接口方式,其波特率一般在300,19200bps之间,最高速率不超过20kbps。此时,其最大通信距离为15m;若适当降低速率,其最大传送距离可增大到60m。这种标准接口方式只能用于较低波特率和近距离通信。而用RS-422A标准接口方式,其最大速率可达10M,此时的最大传输距离可达120m;如果适当降低速率,则RS-422A的最大传送距离可增加到数千米。 数据传送中每位数的传输时间定义为波特率的倒数。若波特率为2400bps,则每位数的传输时间为Tb=1/2400=04165ms。 4(出错校验 在数据通信中,可能会因为各种原因而导致接收数据出错,为了保证传输数据的正确性,在数据传送过程中常需数据校验。在单片机系统的数据通信中常用的校验方法有奇偶校验、累加和校验 Redundancy Check)。 以及CRC冗余校验(Cyclical (1)奇偶校验 奇偶校验是通过检验被传送的二进制数据中0或1位数的奇偶性,来判断数据在传送过程中是否出错。在发送数据时,将该数据与其奇偶标志组成一帧数据一起发送,接收方收到这帧数据后将计算出接收数据的奇偶标志位与接收到的标志位相比较,若不同,则传送数据有误。 (2)累加和校验 奇偶校验法通常对每一个传送的字节数据进行校验,如果要对有n个字节的数据块进行校验,则可以采用累加和校验方法。 累加和校验是在传送数据之前先对n个字节进行加法运算,得到累加和。把累加和附在第n个字节后面传送,接收方收到n个字节后也按同样方法进行n 个字节求和,然后把两个累加和进行比较,如果不同,表示数据块传送出错。 在微处理器中,累加和的加法运算可以采用逻辑加,即用异或操作指令完成;也可以用算术加法指令按算术加法得到累加和。 (3)CRC循环冗余校验 奇偶校验以及累加和校验法虽然简单,但校验功能有限,在奇偶校验中如果同时有两位数据出错,就无法检验出来,累加和校验虽然可以发现几个连续位的差错,但不能检出数据之间的顺序错误码率,即数据交换位置时累加和不变,因此在重要数据传送时经常采用较为复杂的CRC循环冗余校验。 循环冗余校验的基本原理是将一个数据块看成一个很长的二进制数。例如把一个128字节的数据块看作是一个1024位的二进制数,然后用一个特定的数去除它,将得到的余数作为校验码附在数据块的后面一起发送;在接收到该数据块和校验码之后,对它作同样的运算,所得的余数应为0;如果计算结果不为0,就表示接收有错。 5(电气特性 RS-232C是由美国电子工业协会EIA于1969年制定并采用的一种串行通信接口标准,后来被广 泛采用,发展成为一种国际通用的串行通信接口标准。表7.1即为RIA制定的传送电气规格。 表7.1 RIA制定的传送电气规格 状 态 L(Low) H(High) 电压范围 -25V~-3V +3V~+25V 逻辑 1 0 名称 SPACE MARK RS-232C所用的驱动芯片通常以?12V的电源来驱动信号线,但是实际上,因为传输线的连接状态及接收端负载阻抗的影响,均会造成电压的下降,但最低仍不得低于?15V以下。 RS-232C标准采用的接口是9芯或25芯的D型插头为例,各引脚定义如表7.2所示。 表7.2 9芯D型插头引脚信号描述 引 脚 名 称 功 能 描 述 1 DCD 数据载波检测 2 RXD 数据接收 3 TXD 数据发送 4 DTR 数据终端准备好 5 GND 地 数据设备准备好 6 DSR 7 RTS 请求发送 8 CTS 清除发送 9 RI 振铃指示 7.1.2 串行接口设计实例 串行接口电路连接特性的定义目前已有行业标准,通常就称为串行接口标准,如 RS-232 标准RS-423 标准、RS-485 标准等。 其中 RS-232 标准最初是为远程通信连接数据终端设备(DTE)和数据通信设备(DCE)而制定的,它一般用于异步串行通信中。和其它几个标准相比 RS-232 性能较差,但因其简单、经济而获得了非常广泛的应用。目前 RS-232 标准已成为微机串行通信接口中广泛采用的一种标准,如用于计算机(视为 DTE)和调制解调器(视为 DCE)之间的连接。 为了支持串口通信作这个常用接口,很多处理器以及一些外围芯片都采用串口进行通信。例如几大厂家都生产串行通信的AD、DA等数字芯片,很多LED驱动器器也采用串口与主机通行。本实例介绍S3C4510B与PC机的串行通行接口的设计方法。通过MAX232芯片可以建立串口通行的物理连接,S3C4510通过此串口可以与PC机间接受和发送数据,而且还可用于接受PC机的调试命令。 由于RS-232C标准所定义的高、低电平信号与S3C4510B系统的LVTTL电路所定义的高、低电平信号完全不同,LVTTL的标准逻辑“1”对应2V,3.3V电平,标准逻辑“0”对应0V,0.4V电平,而RS-232C标准采用负逻辑方式,标准逻辑“1”对应-5V,15V电平,标准逻辑“0”对应+5V,+15V电平。显然,两者间要进行通信必须经过信号电平的转换,目前常使用的电平转换电路为MAX232,其引脚分布如图7.2。 图7.2 MAX232引脚分布 关于MAX232更具体的内容可参考MAX232的用户手册。 图7.3为MAX232的常见应用电路图,C1、C2、C3、C4用于电平转换,其典型值为0.1uF。通过此MAX232电路,S3C4510B的UART0与PC机的串口1建立连接,S3C4510B的UART1与PC机的串口2建立连接。在具体设计时,经常通过两个跳线选择S3C3410B的UART0或UART1只与PC机的串口1连接,同时设计数据发送与接收的状态指示LED。当有数据通过串行口传输,LED闪烁,便于用户掌握其工作状态以及进行软、硬件的调试。 C1+VCCC1C3 0.1uF0.1uFC1-V+ TXD1T1INT1OUTTXD1 RXD1R1OUTR1INRXD1 TXD2T2INT2OUTTXD2 RXD2R2OUTR2INRXD2 C2+V-C2C4 0.1uF0.1uFGNDC2- MAX232 S3C4510PC机 图7.3 MAX232的常见应用电路图 S3C4510B的UART单元特性包括: , 波特率可编程 , 支持红外发送与接收 , 1,2个停止位 , 5、6、7或8个数据位 , 奇偶校验 每一个异步串行通信口都具有独立的波特率发生器、发送器、接收器和控制单元。波特率发生器可由片内系统时钟MCLK驱动,或由外部时钟UCLK(Pin64)驱动;发送器和接收器都有独立的数据缓冲寄存器和数据移位器。 待发送的数据首先传送到发送缓冲寄存器,然后拷贝到发送移位器并通过发送数据引脚UATXDn发送出去。接收数据首先从接收数据引脚UARXDn移入移位器,当接收到一个字节时就拷贝到接收缓冲寄存器。可通过软件控制工作模式的选择、状态和中断产生。 当使用UART的发送中断功能时,应在初始化UART之前先写一个字节数据到UART的发送缓冲寄存器,这样,当发送缓冲寄存器空时就可以产生UART的发送中断。 以下的编程示例完成S3C4510B通过串行口UART0向PC机发送数据,并从其接收数据的编程。首先使用InitUART()函数设置串口控制寄存器的初始化,设置它的波特率、数据位、停止位、奇偶 校验等。其次使用TxUART()函数发送字符串,依次将每个字符写入发送寄存器等待发送完成。然后 使用RxUART()函数接受数据字符,等待接受寄存器满后在将其存入字符串直到全部完成。该示例 使用S3C4510B的串口UART0设置为19200波特、8位数据、1位停止、无校验。并向PC机循环发送 字符串"Communcation Testting! \r\n"。 打开CodeWarrior for ARM Developer Suite(或ARM Project Manager),新建一个项目,并 新建一个文件,名为main.c,具体内容如下: //************************************************************* // File Name: main.c // Description: // Date: //************************************************************* #define ULCON0 (*(volatile unsigned *)0x03FFD000) //UART channel0 line control register #define UCON0 (*(volatile unsigned *)0x03FFD004) //UART channel0 control register #define USTAT0 (*(volatile unsigned *)0x03FFD008) //UART channel0 status register #define UTXBUF0 (*(volatile unsigned *)0x03FFD00c) //UART channel0 transimit // holding register #define URXBUF0 (*(volatile unsigned *)0x03FFD010) //UART channel0 recieve buffer register #define UBRDIV0 (*(volatile unsigned *)0x03FFD014) //Baud rate divisor register0 #define ULCON1 (*(volatile unsigned *)0x03FFE000) //UART channel1 line control register #define UCON1 (*(volatile unsigned *)0x03FFE004) //UART channel1 control register #define USTAT1 (*(volatile unsigned *)0x03FFE008) //UART channel1 status register #define UTXBUF1 (*(volatile unsigned *)0x03FFE00c) //UART channel1 transimit //holding register #define URXBUF1 (*(volatile unsigned *)0x03FFE010) //UART channel1 recieve buffer register #define UBRDIV1 (*(volatile unsigned *)0x03FFE014) //Baud rate divisor register1 void InitUART(int Port,int Baudrate); void TxUART(int Port,char *s); char * RxUART(int Port,char *s); int Main() { InitUART(0,0x500); //19200bps CPU工作频率50MHz 0=COM1;1=COM2 for(;;) { TxUART(0,"Communcation Testting! \r\n"); } return(0); } void TxUART(int Port,char *s) { if(Port==0) for(;*s!='\0';s++) { for(;(!(USTAT0&0x40));); UTXBUF0=*s; } if(Port==1) for(;*s!='\0';s++) { for(;(!(USTAT1&0x40));); UTXBUF1=*s; } } char * RxUART(int Port) { char * s; if(Port==0) { for(;(!(USTAT0&0x20));s++); *s= UTXBUF0; *s= '\0'; } if(Port==1) { char * s; if(Port==1) { for(;(!(USTAT1&0x20));s++); *s= UTXBUF1; *s= '\0'; } return s; } void InitUART(int Port,int Baudrate) { if(Port==0) { ULCON0=0x03; UCON0=0x09; UBRDIV0=Baudrate; } if(Port==1) { ULCON1=0x03; UCON1=0x09; UBRDIV1=Baudrate; } } 保存main.c,并添加到新建的项目。此时可对该项目进行编译连接,生成可执行的映象文件,当可执行的映象文件运行时,会不停的向UART0发送字符串“Communcation Testting!”。 27.2 IC接口 2构造分布式嵌入式系统的网络 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 有许多种,如RS-485、IC总线协议、CAN总线协议、以太网 2协议等。实际应用时,根据需要选取所需的协议,来构成嵌入式系统的网络。本节主要介绍IC总线技术。 27.2.1 IC接口概述 22IC总线是嵌入式系统中常用的网络接口,它常用于将微控制器连接到系统的总线。IC Bus 2Integrated Circuit Bus,IIC)是飞利浦公司在20世纪80年代开发出的用于内部IC器件(Inter- 控制的一种简单两线双向串行总线。与SPI、MICROWIRE/PLUS接口不同,它是以两根连线实现了完 2善的全双工同步数据传送,可以极方便地构成多面系统和外围器件扩展系统。IC总线采用了器件地址的硬件设置方式,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有最简单 2而灵活的扩展方法。按照IC总线规范,总线传输中的所有状态都生成相对应的状态码,系统中的主机能够依照这些状态码自动进行总线管理。用户只要在程序中装入这些标准处理模块,根据数据22操作要求完成IC总线的初始化,启动IC总线就能自动完成规定的数据传送动作。 2总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于此时数据传送的方向。IC总线的数据传送速率在标准工作方式下为100Kbps,快速方式下最高传送速率达400Kbps。 21(IC总线数据传送格式 2在IC总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,则将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。 当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平,这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。 2在IC总线技术规范中,开始和结束信号(也称做启动和停止信号)的定义如图7.4所示。 SDA SCL 开始信号结束信号 图7.4 开始和结束信号的定义 当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平,定义为“开始”信号。 当SCL线为高电平时,SDA线发生低电平到高电平的跳变,定义为“结束”信号。开始和结束信号都是由主器件产生的。 在开始信号以后,总线即被认为处于忙状态;在结束信号以后的一段时间内,总线被认为是空闲的。 2在IC总线开始信号后,送出的第一个字节数据是用来选择从器件地址的。其中前7位为地址码,第8位为方向位(R/W)。方向位为“0”表示发送,即主器件把信息写到所选择的从器件;方向位为“1”表示主器件将从从器件读信息。 2在IC总线上每次传送的数据字节数不限,但每一个字节必须为8位,而且每个传送的字节后面必须跟一个认可位(第9位),也叫作应答位(ACK)。 22(IC总线数据传送过程 2IC总线传送数据时,每次都是先传送最高位,通常从器件在接收到每个字节后都会做出响应,即释放SCL线返回高电平,准备接收下一个数据字节,主器件可继续传送。如果从器件正在处理一个实时事件而不能接收数据时(例如,正在处理一个内部中断,在这个中断处理完之前就不能接收2IC总线上的数据字节),则可以使时钟SCL线保持低电平,从器件必须使SDA保持高电平,此时主器件产生1个结束信号,使传送异常结束,迫使主器件处于等待状态。当从器件处理完毕时将释放SCL线,主器件继续传送。 通常被寻址的接收器在接收到的每个字节后,除了用CBU地址开头的报文,必须产生一个响应。 当从机不能响应从机地址时(例如它正在执行一些实时函数不能接收或发送),从机必须使数据线保持高电平。主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输。 如果从机接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示。从机使数据线保持高电平,主机产生一个停止或重复起始条件。 如果传输中有主机接收器,它必须通过在时钟的最后一个字节从机不产生响应来向从机发送器通知数据结束。从机发送器必须释放数据线,允许主机产生一个停止或重复起始条件。 222所有进入IC总线系统中的器件或MCU都带有IC总线接口,具有符合IC总线电气规范的特征, 2因此不需要另外设计IC接口,极大地简化了系统的硬件设计。 22在IC总线系统中,每连接的一个IC接口为1个节点。节点的数量受两个因素制约:一是总线电容不得大于400pF,二是节点地址容量。总线电容过大会造成信号传送失真,最终导致数据传输失败。 3(总线竞争和仲裁机制 总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况。当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。 27.2.2 IC接口设计实例 22与串口一样,为了与外设芯片通信目前很多处理器都内部集成了IC总线主控器。具有IC总线 接口的存储器、AD/DA转换器、时钟芯片等,因为协议简单只需要SDA、SCL两根线,在工业领域得 2到广泛应用。本实例介绍一种常见的IC存储器AT24C01在S3C4510嵌入式系统的设计和应用编程 2方法。其他IC接口芯片的应用实例与此相似,可仿效这种方法进行设计。 22S3C4510B内含一个IC总线主控器,可方便的与各种带有IC接口的器件相连。在该实例中, 2外扩一片AT24C01作为IC存储器。AT24C01提供128字节的EEPROM存储空间,可用于存放少量在 系统掉电时需要保存的数据。 5所示。AT2401的SDA为串行数据引脚,SCLAT24C01引脚分布及信号描述和应用电路如图7. 2为串行时钟引脚。它们均需要用1K的电阻上拉后与S3C4510B进行连接,这是为了满足IC总线的 通信协议的要求。 5V VCCNC TESTNC R1R2 1K1KSCLSCLNC SDASDAGND AT24C01 GND S3C4510B 图7.5 AT24C01应用电路 2S3C4510B片内的IC总线控制器具有如下重要特性: (1)仅需要两根传输线。一根为串行数据线(Serial Data Line,SDA),另一根为串行时钟线2(Serial Clock Line,SCL)。当IC总线处于空闲状态时,两根传输线均为高电平。 (2)连接到总线上的每一个设备都可以通过一个主控器使用唯一的地址进行软件寻址。总线主 2控器既可以是一个主发送器,也可以是一个主接收器。但S3C4510B的IC总线控制器仅支持单主控 器模式。 (3)支持8位、双向、串行数据传输。 2(4)连接到IC总线的器件数目仅受到最大总线电容(400PF)的限制。 2图7.6为S3C4510B IC总线控制器的功能模块。 多个字节从接受器格式 SSlave addressWData 1 (8 bits)AData 2Data MAP 多个字节从接受器格式 SSlave addressRData 1 (8 bits)AData 2Data MAP 注: S ~开始 W ~写 R ~读 P ~停止 A ~应答:应答信号第一次发送到从器件,接下来的应答信号发送 与数据传输的防线有关,谁接受就由谁发送此信号。 2图7.6 S3C4510B IC总线控制器的功能模块图 22S3C4510B的IC总线控制器为一个串行IC总线主控器。可通过设置预分频寄存器(Prescaler Register,IICPSR)对串行时钟频率进行编程。串行时钟频率可由下式计算: MCLK/(16×(预分频寄存器的值,1),3) 2可通过对控制状态寄存器(IICCON)的位[5:4]写入“01”发送启动码初始化串行IC总线,然后总线控制器发送7位的从设备地址并通过移位缓冲寄存器发送读/写控制位,接收器则在主控器的SCL脉冲期间通过将SDA线从高电平下拉到低电平作为应答信号。 写数据的操作:先设置控制状态寄存器的BF位,然后写入数据到移位缓冲寄存器。移位缓冲寄 写操作,必须设置控制状态寄存存器无论是被读还是写,BF位均会自动清零。若要进行连续的读/ 器的ACK位。 读数据的操作:在设置控制状态寄存器的BF位以后,可以进行读数据的操作,当读/写完最后一个字节时,可对ACK位进行复位,通知发送器/接收器读数据操作的结束。 在读/写操作完成以后,可通过设置IICCON[5:4]=“10”生成结束码。 2IC总控制器由三个特殊功能寄存器:一个控制状态寄存器(IICON),一个预分频寄存器(IICPS)和一个移位缓冲寄存器(IICBUF)。具体寄存器说明可参见S34510B数据手册。 22虽然在移植了操作系统后,其内部驱动就已经实现了IC驱动,只需要调用相应函数完成IC操 2作即可。为了深刻理解IC接口的操作过程,下面编写的代码列举了AT24C01的具体读写实现方法, 2部分子函数也可以作为其他IC接口芯片的子函数来调用。代码的main函数中,首先调用IIC_Init()22完成IC接口的初始化(复位IC控制器,并设置时钟参数),然后即可开始进行写入和读取操作。本例中调用了IIC_page_write()向0x10处写入“This is a IIC test program”,然后调用IIC_random_read() 从0x10处读取写入的内容。通过如下例程所示。 2#define IICCON (*(volatile unsigned *)0x03FFF000) //IC控制寄存器 2#define IICBUF (*(volatile unsigned *)0x03FFF004) //IC数据缓冲寄存器 2#define IICPS (*(volatile unsigned *)0x03FFF008) //IC预分频寄存器 //************************************************************************ //函数名:IIC_Init() 2//描述: 初始化IC接口(复位和分配时钟) //参数: 无 //返回值:无 //************************************************************************ void IIC_Init() { int error=0; 2IICCON=IICRESET; //IC控制器复位 IICPS=0x0000001E; //时钟参数设置,IIC CLK=SysClk/(16*(prescaker+1)+4),100kHz at 50MHz } //************************************************************************* //函数名:IIC_byte_write() 2//描述: IC接口写一个字节函数 2//参数: IC器件地址,写入地址,写入数据 //返回值:无 //************************************************************************* void IIC_byte_write(int slave_address,int address,int data) { 2 DrvIicInit(); //IC控制器复位 while(IICON&BUSY); //等不忙信号 IICCON=START|ACK; //发送启动命令 IICBUF=slave_address|S_WRITE; //发送控制字(write cmd):read block 0 while(!(IICCON&BF)); IICBUF=(int)(address&0xFF); while(!(IICCON&BF)); IICBUF=data; while(!(IICCON&BF)); 2IICCON=STOP; //停止IC控制器 Delay(5000); //延时 } //**************************************************************************** //函数名:IIC_page_write() 2//描述: IC页写函数 22//参数: IC器件地址,IC写入地址,写入数据指针 //返回值:无 //**************************************************************************** void IIC_page_write(int slave_address,int address,int *pdata) { int i; 2DrvIicInit(); //IC控制器复位 while(IICCON&BUSY); //等不忙信号 IICCON=START|ACK; //发送启动命令 IICBUF=slave_address|S_WRITE; //发送控制字节数据(write cmd):read block 0 while(!(IICCON&BF)); IICBUF=(int)(address&0xFF); //发送低位地址 while(!(IICCON&BF)); for(i=0;i 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 。RTL8019共有32个输入/输出地址,对应地址偏移量为00h,1Fh。RTL8019的内部寄存器是分页的,每个寄存器都是8位,在不同的页面下,同一个端口对应不用的寄存器。页面的选择通过CR寄存器的第6位和第7位来选择;10h,17h的8个地址,为数据读写端口地址,只用其中的一个地址即可。18h、1Ah、1Ch、1Eh这几处复位端口是有效的,其他不要使用,因为有些兼容卡不支持19h、1Bh、1Dh等奇数地址的复位。RTL8019的寄存器如表7.4所示。 表7.4 RTL8019的寄存器 Page0 Page1 Page2 Page3 地 址 R W R/W R R R/W 00 CR CR CR CR CR CR 01 CLDA0 PSTART PAR0 PSTART 9346CR 9346CR 02 CLDA1 PSTOP PAR1 PSTOP BPAGE BPATGE 03 BNRY BNRY PAR2 NONFIG0 04 TSR TSR PAR3 TPSR CONFIG1 CONFIG1 05 NCR TBCR0 PAR4 CONFIG2 CONFIG2 06 FIFO TBCR1 PAR5 CONFIG3 CONFIG3 07 ISR ISR CURR TEST 08 CRDA0 RSAR0 MAR0 CSNSAV 09 CRDA1 RSAR1 MAR1 HLTCLK 0x0A 8019ID0 RBCR0 MAR2 0x0B 8019ID1 RBCR1 MAR3 INTR 0x0C RSR RSR MAR4 RCR FMWP 0x0D CNTR0 TCR MAR5 TCR 0x0E CNTR1 DCR MAR6 DCR 0x0F CNTR2 IMR MAR7 IMR DMA端口 [0x10:0x17] 复位端口 [0x18:0x1F] 1(RTL8019的复位 RTL8019的复位引脚RSTDRV是高电平有效的复位信号,高电平时间长度需大于800ns,通常在RSTDRV从高电平回到低电平之后的100ms时,再对RTL8019进行读写操作,以确保完全复位。复位可以通过将RSTDRV接处理器的一个引脚来进行,也可以直接将RSTDRV与处理器的RESET引脚并联。当处理器复位时,以太网控制器也复位。为了保证能够完全复位,还可以使用下面介绍的热复位方法。 18h,1Fh的8个地址,为复位端口,对该端口的偶数地址读或写入任何数,都会引起以太网控制器的复位,这种方式称为热复位。 中断状态寄存器ISR中包含有与复位有关的标位,它的地址为07h,位于第0页,可以直接读写,其位定义如表7.5所示。这个寄存器反映了网卡的状态,通过读取该寄存器可以了解究竟是什么引发了中断,个别位可以通过写入“1”来清零。该寄存器必须在上电后全部清零。 ISR寄存器中的第7位RST与复位有关。在以太网控制器执行了正确复位之后该位为1。一般在复位之后检查该标志位,以确认是否复位成功。 表7.5 中断状态寄存器(ISR) 符位 描述 号 0 PRX 表示数据包被无错接受 1 PTX 表示数据包被无错发送 2 RXE 如果在接受数据中发生CRC错误、帧对齐错误和包丢失时,该位置1 3 TXE 如果在数据发送过程中发生了过多的冲突,发送就会停止,且该位置1 4 OVW 如果接受缓冲器溢出,该位置1 5 CNT 如果1个或多个网络标签计数器的最高位置1,该位置1 6 RDC 如果远程DMA操作完成 如果NIC进入复位状态,该位置1;在启动命令写入命令寄存器CR时,该位清0;在接受缓7 RST 冲区溢出时该位置1,如果一个或多个包从缓冲区中读出,该位清0。 2(RAM空间结构 以太网控制器含有16KB的RAM,地址为0x4000,0x7FFF(指的是RTL8019内部的存储地址,而不是ISA总线的地址,是RTL8019工作用的存储器,可以通过远程DMA访问),每256个字节称为1页,共有64页,页的地址就是RAM字节地址的高8位,页地址的范围为0x40,0x7F。这16KB的RAM一部分用来存储接收的数据包,一部分用来存储待发送的数据包。当然也可能给用户作其他用途使用。 使用0x40,0x45作为以太网控制器的发送缓冲区,共6页,6×256=1536B,刚好可以存储1个最大的以太网包,使用0x46,0x5F作为以太网控制器的接收缓冲区,共32页。因此可以设置寄存器PSTART=0x46,PSTOP=0x5F。CURR和BNRY寄存器是以太网数据收发中用到的两个最主要的寄存器,它们的工作原理如下。 (1)CURR是以太网控制器写接收缓冲区的指针。控制器正确复位后,应该将它初始化为PSTART+1=0x47;以太网控制器写完接收缓冲区一页,就将这个页地址加1,即CURR=CURR+1,这是RTL8019自动加的;当加到最后的空间(即PSTOP=0x60)时,将CURRF置为接收缓冲区的第1页(即PSTART=0x46),这也是以太网控制器自动完成的。当CURR=BNRY时,表示缓冲区全部被存满,数据没有被用户读走,这时以太网控制器将停止往接收缓冲区写数据,新收到的数据包将被丢弃不要,而不覆盖旧的数据。此时实际上出现了接收缓冲区溢出。 (2)BNRY指向接收缓冲区中已经被读取的最后一个页。控制器正确复位后,刚开始还没有接收到任何数据包,所以BNRY被设置为指向第一个接收缓冲区的页(即PSTART=0x46),BNRY要由用户来操作。用户从以太网控制器读一页数据,要将BNRY加1,然后再写回到BNRY寄存器(即BNRY=BNRY+1)。当BNRY加到最后的空页(即PSTOP=0x60)时,同样要将BNRY变成第一个接收页(PSTART=BNRY=0x46)。 (3)CURR和BNRY主要用来控制缓冲区的存取过程,保证能顺次写入和读出。当CURR=BNRY+1(或当BNRY=0x7F,CURR=0x46)时,以太网控制器的接收缓冲区里没有数据,表示没有收到任保数据包。用户通过这个判断知道没有包可以读。当上述条件不成立时,表示接收到新的数据包,用户应该读取数据包;每读取一页数据,就将BNRY加1,直到上述条件成立时,表示所有的数据包已经读完,此时停止读取数据包。 3(网卡的物理地址 在完成对寄存器的初始化后,以在网控制器还不能正确地接收数据包,因为还没有对以太网控 制器的物理地址(即48位的以太网控制器地址)进行设置,以太网控制器还不知道它应该接收什么地址的数据包。要对网卡的物理地址进行设置,就必须知道网卡的物理地址是多少。 RAM地址中的0x0000,0x000B的12字节是网卡的物理地址。网卡的物理地址本应该是6个字节的,这12字节是单双地址重复存储的。0x000B后面的地址存储的是生产厂商的代码和产品标识代码,也是单双地址重复存储的。 7.3.3 Ethernet接口设计实例 常规的网卡设计思路不同的是,在嵌入式系统中,系统的精简一直是个主要的原则。据此原则本例采用RTL8019AS作为网卡芯片,以S3C44B0作为处理器设计设计以太网接口。 在此嵌入式系统中,可以使用RTL8019AS的默认配置和一些管脚作为网卡的初始化方法。这样可以节省配置寄存器,减小嵌入式硬件平台的体积。RTL8019支持即插即用模式和非即插即用模式。在嵌入式系统中,网卡的外设通常是不经常插拔的,所以,为了系统的精简,配置RTL8019为非即插即用模式。有固定的中断,有固定的端口地址,假设端口是0x300(这里的端口是相对于ISA总线来说的端口,对于ARM的总线,需要重新计算地址)。这些配置可以通过RTL8019的外部管脚,在系统上电复位的时候,自动配置起来。 作为一个集成的以太网芯片,数据的发送校验、总线数据包的碰撞检测与避免是由芯片自己完成的,只需要配置发送数据的物理层地址的源地址、目的地址、数据包类型以及发送的数据就可以了。 在RTL8019的初始化程序中已经配置好了接收缓冲区的位置,并且配置好了中断的模式。当有一个正确的数据包到达的时候,RTL8019会产生一个中断信号,在ARM中断处理程序中接收数据。数据的接收比较简单,即通过远端DMA把数据从RTL8019的RAM空间读回ARM中处理。 以太网模块与处理器的接口电路如图7.8所示。 S3C4B0XRTL8019 22pFDATA0-DATA15SD0-SD15 22MHzSA10-SA19 22pF IOCS16BADDR1-ADDR10SA0-SA9 网卡EXINT1INTOTPOUT-隔nGCS5AENTPOUT+RJ45离nOEIORBTPIN-接口变nWEIOWBTPIN+压nRESETRSTDRV器5.1kSMEMRB SMEMWB10nFJP 图7.8 以太网模块与处理器的接口电路 采用nGCS5作为以太网模块的地址使能位,因此,以太网卡映射在系统的bank5上,地址从0x0a000000开始。 #define RTL8019_Base 0x0a000000 //Bank5 #define RTL_Offset_00 0x0000 //寄存器16个 #define RTL_Offset_01 0x0100 #define RTL_Offset_02 0x0200 #define RTL_Offset_03 0x0300 #define RTL_Offset_04 0x0400 #define RTL_Offset_05 0x0500 #define RTL_Offset_06 0x0600 #define RTL_Offset_07 0x0700 #define RTL_Offset_08 0x0800 #define RTL_Offset_09 0x0900 #define RTL_Offset_0a 0x0a00 #define RTL_Offset_0b 0x0b00 #define RTL_Offset_0c 0x0c00 #define RTL_Offset_0d 0x0d00 #define RTL_Offset_0e 0x0e00 #define RTL_Offset_0f 0x0f00 #define RTL_Offset_10 0x1000 //DMA地址,数据读写端口地址 #define RTL_Offset_18 0x1800 //复位地址 #define RTL8019_REG_1 (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_01)) #define RTL8019_REG_2 (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_02)) #define RTL8019_REG_3 (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_03)) #define RTL8019_REG_4 (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_04)) #define RTL8019_REG_5 (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_05)) #define RTL8019_REG_6 (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_06)) #define RTL8019_REG_7 (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_07)) #define RTL8019_REG_8 (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_08)) #define RTL8019_REG_9 (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_09)) #define RTL8019_REG_A (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_0a)) #define RTL8019_REG_B (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_0b)) #define RTL8019_REG_C (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_0c)) #define RTL8019_REG_D (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_0d)) #define RTL8019_REG_E (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_0e)) #define RTL8019_REG_F (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_0f)) #define RTL8019_REG_DMA (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_10)) #define RTL8019_REG_DMA_HW (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_ 10)) #define RTL8019_REG_RST (* (volatile unsigned char *)(RTL8019_Base + RTL_offset_18)) #define DATAPORT RTL8019_REG_DMA #define NE_RESET RTL8019_REG_RST //**************************************************************************** //函数名:SetRegPage () //描述: RTL8019中页面的切换 //返回值:无 //**************************************************************************** void SetRegPage (char pagenumber) { pagenumber<<=6; RTL8019_REG_0=0x22 | pagenumber; } //**************************************************************************** //函数名:Reset() //描述: 热复位函数 //返回值:复位状态 //**************************************************************************** BOOL Reset() { BOOL Ok=0; NE_RESET=0xff; //写入任意值,使RTL8091 Delay(100); if((ISR&0x80)==0) //检测ISR的第7位,判断是否复位成功 Uart_Printf(“网卡复位失败~\n”); else { Uart_Printf(“\n网卡复位成功~\n”); Ok=1; } return(Ok); } //**************************************************************************** //函数名:Init() //描述: 初始化函数 //返回值:复位状态 //**************************************************************************** void Init() { char temp, i; RTL8019_REG_0=0x21; //CR=0x21,STOP|NO_DMA RTL8019_REG_E=0xc9; //DCR数据配置寄存器16位远端数据DMA Temp=NE_RESET; Delay(1); NE_RESET=temp; Delay(100); RTL8019_REG_0=0xe1; //选中第三页 RTL8019_REG_1=0xc0; //9346CR EEM1=EEM0=1 RTL8019_REG_4=0x80; //config1 set IRQ bit RTL8019_REG_1=0x0; //9346CR EEM1=EEM0=0 //停止8019 RTL8019_REG_0=0x21; //CR=0x21,STOP|NO_DMA RTL8019_REG_A=0x0; //清除远程DMA计数器的MSB RTL8019_REG_B=0c0; //清除远程DMA计数器的LSB if(i=0; i<0xfff; i++) //检测ISR的第7位,判断是否复位成功 { Temp=NE_RESET; if(ISR&0x80) { NE_RESET=temp; break; } Delay(200); } if(i==0xfff) //如果超时没有收到复位信号,表示8019硬件有问题 { Uart_Printf(“网卡复位失败~请检查硬件\n”); } RTL8019_REG_D=0xe2; RTL8019_REG_0=0x22; RTL8019_REG_0=0x21; //配置8019 TEMP=RTL8019_REG_0; if((temp&0x21)!=0x21) /测试8019寄存器能否工作 { Uart_Printf(“写8019失败~请检查硬件\n”); return; } RTL8019_REG_E=0x49; //DCR数据配置寄存器16位远端数据DMA RTL8019_REG_B=0; //清除远程DMA计数器的MSB RTL8019_REG_A=0; //清除远程DMA计数器的LSB RTL8019_REG_C=0x04; //RCR RTL8019_REG_D=0x02; //TCR=0x02,开启回环模式 RTL8019_REG_3=0x4c; RTL8019_REG_1=0x4c; //pstarte RTL8019_REG_2=0x80; //pstop RTL8019_REG_7=0xff; //ISR RTL8019_REG_F=0x1; //中断允许 RTL8019_REG_0=0x61; //CR_STOP|CR_NO_DMA|CR_PAGE1 getmac(mac); //初始化物理地址 setmac(mac); InitMar(); //初始化组播地址 RTL8019_REG_7=0x4d; RTL8019_REG_0=0x21; RTL8019_REG_0=0x22; RTL8019_REG_D=0x0; RTL8019_REG_7=0xff; OpenInterrupt(); //设置中断 SetRegPage(0); } (5)通过RTL8019传输数据 RTL8019作为一个集成的以太网芯片,数据的发送校验、总线数据包的碰撞检测与避免是由芯片自己完成的,只需要配置发送数据的物理地址的原地址、目的地址、数据包类型以及发送的数据就可以进行数据发送了。 在RTL8019的初始化程序中已经设置好了接收缓冲区的位置,并且配置好了中断的模式。当有一个正确的数据包到达的时候,RTL8019会产生一个中断信号,在ARM中断处理程序中,接收数据。数据的接收比较简单,即通过远端DMA把数据从RTL8019的RAM空间读回ARM中处理。 7.4 USB接口 由于USB接口技术在最近几年已成为计算机领域发展最快的技术之一,几乎所有的外设都可以借助USB接口轻易地与PC机相连。许多嵌入式系统生产厂商都尝试在自己的平台上应用USB接口技术。因此,掌握USB接口技术的概念、原理以及应用对嵌入式系统设计者来说就是必要的。 7.4.1 USB接口概述 一个USB系统由USB主机、USB设备和USB互连构成。 (1)USB设备 USB设备分为Hub(集线器)和Function(功能)两大类。Hub提供到USB的附加连接点,功能 为主机系统提供附加的性能,如ISDN连接、数字操纵杆或扬声器等。实际上,功能就是可发送和接收USB数据的、可实现某种功能的USB设备。USB设备应具有标准的USB接口。 (2)USB主机 在任一个USB系统中只有一个主机,到主计算机系统的USB接口被称作主控制器。主控制器可采用硬件、固件或软件相结合的方式来实现。Hub集成在主机系统内,向上与主总线(如PCI总线)相连,向下可提供一或多个连接点。 (3)USB互连 USB互连指的是USB设备与主机的连接和通信方式,它包括总线拓扑结构、内层关系、数据模型和USB调度表。 USB总线用来连接各USB设备和USB主机。USB在物理上连接成一个层叠的星形拓扑结构,Hub是每个星的中心,每根线段表示一个点到点的连接,可以是主机与一个Hub或功能之间连接,也可以是一个Hub与另一个Hub或功能之间的连接。 在USB总线上,连接的设备总数理论上可达127个。这种方便的扩展方式,使得大量外设的连接变得非常方便,同时由于可以热插拔,使得USB便携式设备非常受欢迎。 1(USB的电气特性 USB传送信号和电源是通过一种四线的电缆收发,图7.9中的两根线用于信号发送。存在两种数据传输率: VBUSVBUSD+D+ D-D- GNDGND 图7.9 USB的电缆 电缆中包括VBUS、GND两条线,向设备提供电源。VBUS使用+5V电源。USB对电源长度的要求很宽,最长可为几米。通过选择合适的导线长度以匹配指定的IR压降和其他一些特性,如设备能源预算和电缆适应度。为了保证足够的输入电压和终端阻抗,重要的终端设备应位于电缆的尾部。在每个端口都可检测终端是否连接或分离,并区分出高速或低速设备。 2(USB的数据传输类型 在主控制器上,可以连接许多USB设备,这些设备与主机之间有四种可能的通信方式,即同步数据(Isochronous)传输方式、中断数据传输方式(Interrupt)、控制数据传输方式(Control)和批量数据(Bulk)传输方式。根据不同的设备类型和对数据传输的要求,分别使用默认的连接方式。 数据和控制信号在主机和USB设备间的交换存在单向和双向两种通道。USB的数据传送是在主机和某个USB设备的指定端口之间。这种主机和USB设备的端口间的联系称作通道。总的来说,各个通道之间的数据流动是相互独立的。一个指定的USB设备可有许多通道。 对于任何给定的设备进行设置时,一种通道只能支持上述四种通信方式中的一种来进行数据传输。 (1)控制数据传送 当USB设备初次安装时,USB系统软件使用控制数据对设备进行设置,设备驱动程序通过特定的方式使用控制数据来传送,数据传送是无损性的。 (2)批量数据传送 批量数据是由大量的数据组成,如使用打印机和扫描仪时,批量数据是连续的。在硬件级上使用错误检测可以保证可靠的数据传输,并在硬件级上引入了数据的多次传送。此外根据其他一些总线动作,被大量数据占用的带宽可以相应地进行改变。 (3)中断数据传输 中断数据是少量的,且其数据延迟时间也是在有限范围内的。这种数据可由设备在任何时刻发 送,并且以不慢于设备指定的速度在USB上传送。 中断数据一般由事件通告、特征及坐标号组成,只有一个或几个字节。匹配定点设备的坐标即为一例,虽然不需要精确指定的传输率,但USB必须对交互数据提供一个反应时间的最低界限。 (4)同步传输 同步数据的建立、传送和使用是连续且实时的,同步数据是以稳定的速率发送和接收实时的信息,同步数据要使接收者与发送者保持相同的时间安排。除了传输速率,同步数据对传送延迟非常敏感。所以同步通道带宽的确定,必须满足对相关功能部件的取样特性。不可避免的信号延迟与每个端口的可用缓冲区数有关。 3(USB的数据传输原理 在USB结构中,占有主导地位的是主控制器。主控制器要保证所有连接到它上面的数量不同、传输方式不同的设备能够同时正常工作。那么,主控制器到底是如何与这些设备进行通信的呢, USB主控制器使用间隔为1ms的帧来实现数据传输。由于有许多设备都接到了USB上,因此每1ms产生的传输帧是混合的。在几种传输方式数据都存在的情况下,中断传输和同步传输对时间要求高。因此,占用了约90%的总带宽,控制传输占用了约10%的带宽,批量传输对时间要求不高,但数据量大,它使用剩下的可用带宽。各种USB设备就是通过这种基本的帧结构来实现共享USB带宽,实现数据传输的。 在主机端,不同设备的数据传输请求被分成若干个小块,每个小块叫作一次执行(Transaction),由于要保证连接到主机上的设备可以同时工作,因此主机每次从不同设备取一个小块构成一个1ms 帧,然后将整个帧发送到USB总线上。 USB设备最大的特点就是即插即用,之所以能够这样,是因为USB协议规定在主机启动或是USB设备插入系统的时候都要对设备进行配置。这里所说的配置,就是按照USB协议,在USB主机与USB设备之间进行的一系列“问答”过程。一个问答过程是通过主机与USB设备的端点0进行通讯来完成的。USB设备在插入USB端点时,主机都通过默认地址0与设备端点0进行通信。在这个过程中,主机发出一系列试图得到描述符的标准请求,通过这些请求,主机得到所有感兴趣的设备信息,从而知道了设备的情况以及该如何与设备通信。随后主机通过发出地址设置请求为设备设置一个惟一的地址。这样,配置过程就完成了,以后主机就通过为设备设定好的地址与设备通信,而不再使用默认地0。有的时候设置完地址后,可能还要获取一次描述符,然后再设定配置(Set Configuration)之后才算完成了对新插入USB总线设备的配置过程。 4(USB总线协议 USB是一种查询(Polling)总线,由主控制器启动所有的数据传输。USB上所挂连的外设通过由主机调度的(Host-Scheduled)、基于令牌的(Token-Based)协议来共享USB带宽。 大部分总线事务涉及3个包的传输。当主控制器按计划地发出一个描述事务类型和方向、USB设备地址和端点号的USB包时,就开始发起一个事务,这个包被称作“令牌包”(Token Packet),它指示总线上要执行什么事务,寻址的USB设备及数据传送方向。然后,事务源发送一个数据包(Data Packet),或者指示它没有数据要传输。最后,目标一般还要用一个指示传输是否成功的握手包(Handshake Packet)来响应。 主控制器和Hub之间的某些总线事务涉及4个包的传输,这些类型的事务用来管理主机与全/低速设备之间的数据传输。 主机与设备端点之间的USB数据传输模型被称作管道,管道有两种类型:流和消息。消息数据具有USB定义的结构,而流数据没有。管道与数据带宽、传输服务类型、端点特性(如方向性和缓冲区大小)有关。当USB设备被配置时,大多数管道就形成了。一旦设备加电,总是形成一个被称作默认控制管道的消息管道,以使提供对设备配置、状态和控制信息的访问。 5(USB设备开发 USB设备开发的一般步骤如下: (1)根据所要开发的设备的功能需要,确定设备在USB总线上的位置(主机、集线器或节点设备)、传输数据的速度(低速、全速还是高速)以及传输数据的量等,从而确定选择哪一类的USB控制器芯片,并进一步具体决定采用芯片的厂家和型号,然后根据该器件和其他所需芯片进行电路设计。 (2)编写固件程序,其作用是让主机能够识别该设备,并响应主机的各种请求。固件程序的编写可能因为控制芯片的不同而不同。芯片厂商通常都提供例子代码,只要对它稍做修改就可以使用了。 (3)根据所用设备是否为标准USB设备,来决定是否另外编写驱动,还是使用操作系统自带的驱动程序来访问USB设备。如果使用的不是一个标准设备,需要编写专用驱动程序并产生inf文件及编写应用程序。这个inf文件实际是一个文本文件,它使操作系统在检测到该设备时,能够认识它,并与对应的驱动程序取得联系。启动应用程序则可以对设备进行各种操作。同样,芯片厂商也经常提供例子驱动程序和应用程序。 (4)把编写好的固件程序载入USB设备,并将USB设备插入主机总线。Windows应该能够检测到这个设备,并将它作为可辨别的硬件之一加入到设备管理器中,打开应用程序可以对该设备进行指定的操作。 (5)按需要调试和重复以上步骤。 7.4.2 USB接口设计实例 以Philips公司生产的USB接口芯片PDIUSBD12设计S3C4510B的USB接口为实例,介绍USB的工作原理和设计方法。PDIUSBD12是一个具有集成的SIE FIFO存储器、发送器和电压调整器的高性能USB接口芯片,同时还支持DMA传输。 PDIUSBD12所具有的低挂起功耗连同LazyClock输出可以满足使用ACPI、OnNOW和USB电源管理的要求。低的操作功耗可以应用于使用总线供电的外设。 此外它还集成了许多特性,包括SoftConnetTM、GoodLinkTM、可编程时钟输出、低频晶振和终止寄存器集合。所有这些特性都为系统显著节约了成本,同时使USB功能在外设上的应用变得容易。 1(PDIUSBD12的主要特性 (1)符合通用串行总线USB1.1版规范; (2)高性能USB接口器件集成了SIE FIFO存储器、收发器以及电压调整器; (3)符合大多数器件的分类规格; (4)可与任何外部微控制器/微处理实际高速并行接口2MB/s; (5)完全自治的直接内存取DMA操作; (6)集成320字节多结构FIFO存储器; (7)主端点的双缓冲配置增加了数据吞吐量并轻松实现实时数据传送; (8)在批量模式和同步模式下均可实现1MB/s的数据传送速率; (9)具有良好EMI特性的总线供电能力; (10)在挂起时可控制Lazy Clock输出; (11)可通过软件控制与USB的连接; (12)采用GoodLink技术的连接指示器,在通信时使LED闪烁; (13)可编程的时钟频率输出; (14)符合ACPI、OnNOW和USB电源管理的要求; (15)内部上电复位和低电压复位; (16)工业级操作温度-40?,+85?; (17)具有高错误恢复率(>99%)的全扫描设计确保了高品质; (18)双电源操作3.30.3V或扩展的5V电源,范围为3.6,5.5V; , (19)多中断模式实现批量和同步传输。 PDIUSBD12采用28PIN引脚模式(有SO28和TSSOP28两种封装),如图7.10所示。各个引脚功 能如表7.6所示。 128DATA<0>A0 227DATA<1>Vout3.3 326DATA<2>D+ 425DATA<3>D- 524GNDVdd 623DATA<4>XTAL2 722DATA<5>XTAL1 821DATA<6>GL_N 920DATA<7>RESET_N 1019ALEEOT_N 1118CS_NDMACK_N 1217SUSPENDDMREQ 1316CLKOUTWR_N 1415INT_NRD_N 图7.10 PDIUSBD12的引脚 表7.6 PDIUSBD12引脚功能 管脚 符号 类型 描述 1 DATA<0> IO2 双向数据位0 2 DATA<1> IO2 双向数据位1 3 DATA<2> IO2 双向数据位2 4 DATA<3> IO2 双向数据位3 5 GND P 地 6 DATA<4> IO2 双向数据位4 7 DATA<5> IO2 双向数据位5 8 DATA<6> IO2 双向数据位6 9 DATA<7> IO2 双向数据位7 地址锁存使能。在多路地址/数据总线中,下降沿关闭地址信息锁存。10 ALE I 将其固定为低电平用于单地址/数据配置 11 CS_N I 片选(低有效) 12 SUSPEND I,OD4 器件处于挂起状态 13 CLKOUT O2 可编程时钟输出 14 INT_N OD4 中断(低有效) 15 RD_N I 读选通(低有效) 16 WR_N I 写选通(低有效) 17 DMREQ O4 DMA请求 18 DMACK_N I DMA应答(低有效) DMA传输结束(低有效)。EOT_N仅当DMACK_N和RD_N或 WR_N一起激活19 EOT_N I 时才有效 20 RESET_N I 复位(低有效且不同步)。片内上电复位电路,该管脚可固定接Vcc。 21 GL_N OD8 GoodLink LED指示器(低有效) 22 XTAL1 I 晶振连接端1(6MHz) 晶振连接端1(6MHz)。如果采用外部时钟取代晶振,XTAL1,XTAL2应23 XTAL2 O 当悬空。 电源电压(4.0V,5.5V),要使器件工作在3.3V,对Vcc和Vout3.3脚24 Vdd P 都提供3.3V 25 D- A USB D-数据线 26 D+ A USB D+数据线 27 Vout3.3 P 3.3V调整输出。要使器件工作在3.3V,对Vcc和Vout3.3脚都提供3.3V 地址位。A0=1,选择命令指令,A0=0,选择数据。该位在多路地址/数据28 A0 I 总线配置时可忽略,应将其接高电平。 2(典型应用电路 典型应用电路如图7.11所示。 3.3V5VnRESETRESETPDIUSBD12INTREXTINT2 D+D+USB连接器D-D-S3C4510B 3.3V VccRDRD WRWR D7~0D7~0 A0A0 nGCS3CSA22GNDALE 图7.11 PDIUSBD12与S3C44B0接口电路图 3(固件程序的开发 固件程序的主要任务之一是对USB设备上的几个端点进行描述。端点的多少和配置情况由所使用的USB接口控制芯片决定,具体情况可以参考芯片资料。各类控制芯片都会提供一个中断信号与微处理器的中断口相连。当端点接收到数据,或发送数据成功时,都会产生中断。固件程序的任务实际上就是对这些中断进行响应。 中断响应程序对所接收的数据进行 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 处理(端点0遵守标准的数据模式,其他端点则因端点类型的不同而具有不同的数据格式),一般来说,这些数据是主机对设备发出的请求,设备只要做出相应的反应即可。USB接口控制芯片发送完整数据后也会产生中断,这个中断信号告诉与之接口的微处理器,可以继续发送后续的数据了。 USB设备是被动者,而主机则是主动者。一般情况是主机发送请求而USB设备被动响应。因此,USB固件程序的结构一般是基于中断处理的。一般情况下,固件主程序做完必要的初始化工作后,就什么事也不做了,等待USB中断的产生,中断产生后,根据中断请求的类型从相应的端点读取数据,或是向相应的端点发送数据。 PDIUSBD12F固件程序的主要组件如图7.12所示。 主循环发送USB请求读测试Key控制LED和处理USB总线时间等 MAINLOOPC 标准请求厂商请求 CHAP_9.CPROTODMA.C 中断服务程序 ISR.C PDIUSBD12命令接口 D12CI.C 硬件提取层 EPPHAL.C 图7.12 固件程序结构图 编写固件程序最便捷的方法就是参考芯片供应商提供的固件范例程序,在范例的基础上根据自 己的应用需要进行一定的修改。PDIUSBD12的固件设计成完全的中断驱动。当CPU处理前台任务时, USB的传送在后台进行,这就确保了最佳的传送速率和更好的软件结构,同时简化了编程和调试。 后台ISR中断服务程序和前台主程序循环之间的数据交换通过事件标志和数据缓冲区来实现。 USB的固件程序从main函数开始执行,在主函数中,按顺序执行USB设备的各种初始化以及其 他自定义操作,具体步骤如下:初始化休眠模式、远程唤醒和自供电等;初始化拥护设备、定向USB 描述符;使能中断;重列举;主循环,等待USB主机的请求。 void main(void) { DWORD i; WORD offset; DWORD DevDescrLen; DWORD j=0; WORD IntDescrAddr; WORD ExtDescrAddr; Sleep = FALSE;// 禁止休眠模式 Rwuen = FALSE;//禁止远程唤醒 Selfpwr = FALSE;//禁止自供电 GotSUD = FALSE; TD_Init();//初始化用户设备 /*定向USB描述符*/ pDeviceDscr = (WORD)&DeviceDscr; pDeviceQualDscr = (WORD)&DeviceQualDscr; pHighSpeedConfigDscr = (WORD)&HighSpeedConfigDscr; pFullSpeedConfigDscr = (WORD)&FullSpeedConfigDscr; pStringDscr = (WORD)&StringDscr; if((WORD)&DeviceDscr & 0xC000) { /*重定向描述符*/ IntDescrAddr = INTERNAL_DSCR_ADDR; ExtDescrAddr = (WORD)&DeviceDscr; DevDescrLen =(WORD)&uSERdSCR – (WORD)&DeviceDscr + 2; for(i=0;i
本文档为【工作文档7 通信接口设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_180829
暂无简介~
格式:doc
大小:139KB
软件:Word
页数:0
分类:互联网
上传时间:2017-09-18
浏览量:12