模拟I2C总线多主通信的通用软件包

时间:2022年12月11日

/

来源:海上有个鸽

/

编辑:本站小编

收藏本文

下载本文

以下是小编帮大家整理的模拟I2C总线多主通信的通用软件包,本文共10篇,仅供参考,希望能够帮助到大家。本文原稿由网友“海上有个鸽”提供。

篇1:模拟I2C总线多主通信的通用软件包

引言

I2C是由Philips公司推出的芯片间串行传输总线。它以规范严谨、使用简单灵活、支持的外围器件繁多等特点而被广泛应用。对于不具备I2C接口的主器件(通常指MCU),可利用普通的I/O口来模拟I2C总线,但由于无法解决多主竞争问题而只能应用在单主机系统中。本文提供了一种解决方案,可将模拟I2C总线应用在多主机系统中,实现模拟I2C的多主通信。

(本网网收集整理)

篇2:模拟I2C总线多主通信的通用软件包

在I2C总线系统中,可以有多个主器件节点。当多个主器件节点都企图控制总线时,就会出现多主竞争。这时就需要进行仲裁,裁决的结果只允许其中一个主器件节点成为主控器。而硬件I2C系统之所以支持多主系统,是因为其具有的三个特性:①接口的线“与”逻辑功能;②内部冲突检测电路;③I2C中断和状态处理程序。这使其能够自动完成多主竞争时的时钟同步与总线仲裁,无须用户介入。而在模拟I2C系统中,如果能通过软硬件设计模拟出上述的三个特性,就等于解决了竞争仲裁与同步问题,那么模拟I2C总线就完全可以应用于多主机系统中。

首先,经过理论分析与实验验证,得知并联在一起的MCU的普通I/O口线本身就具有线“与”特性。其次,为了避免主节点在总线繁忙时启动总线而引起的冲突,需要增加一条握手线,即BUSY线来代表总线的忙/闲状态。因为数据线(SDA)和时钟线(SCL)上的信号是变化的,所以不能用它们充当BUSY线。另外,当多个MCU都检测到总线空闲,同时企图控制总线时,将形成多主竞争状态,同样会引起冲突。这时就需要引入时间片,用划分的时间片来决定竞争时各MCU占用I2C总线的优先次序。结合SDA的线“与”特性,检测SDA上是否已经存在启动信号(即SDA是否为0),如果直到相应的时间片结束都没有检测到SDA上的启动信号,自己就可以控制总线。最后,由于模拟系统中没有硬件I2C中断,MCU作为从器件时不知何时开始接收总线上的数据,所以,需要提供一根I2C中断信号线,使MCU在中断程序中处于从接收状态,中断线可以与BUSY线合用。

通过上述分析,利用三根信号线就能模拟出硬件I2C的竞争仲裁过程,实现模拟I2C的多主通信。

2 系统连接示意图

三线模拟I2C总线系统的连接框图如图1所示。

模拟I2C多主系统中,要参与竞争的主器件节点采用三级连接方式,如MCU(A)、MCU(B)、MCU(C);对于外围器件节点如24C64等,因不具备主动控制I2C总线的能力,不会参与总线的竞争,所以仍可采用通用的两线连接方式。三线模拟I2C总线中的时钟线SCL和数据线SDA可由MCU的.任意两个I/O口线模拟;BUSY线因还要充当中断信号线,则必须与MCU的外部中断引脚INT0或INT1连接。

3 时序分析及流程设计

在检测到BUSY=0(忙)时,不会出现竞争;但当检测到BUSY=1(闲)到将BUSY设为0,需要的典型时间为3个机器周期。在这段时间内,别的MCU仍会检测到BUSY=1,也认为总线空闲到企图占用,这时就出现了竞争与冲突。竞争的时间范围为2×3个机器周期。仲裁的方法是为每一个MCU分配一个仲裁时间片,在规定的时间片内MCU反复检测总线中的数据线SDA是否有信号,直到时间片结束。如果没有信号就可马上占用I2C总线,发送起始信号;如果有信号则表示有别的高优先级的MCU要占用,该MCU退出竞争。仲裁时序图如图2所示。

将BUSY设为0后的一段时间规定为仲裁时间。仲裁时间长度为(N-1)×Δt。N为I2C总线上参与竞争的MCU个数;Δt为一个时间片的长度,典型值为4个机器周期。按优先级顺序给MCU分配不同个数的时间片。仲裁时序如图2所示:假设MCU(A)优先级最高,它不必进行时间片测试,在检测到总线空闲时直接发送起始位;MCU(B)优先级为次高,在检测到总线空闲后,它需要等待检测一个时间片周期Δt,在Δt期间内SDA线上没有变化,即等待确

认比它高优先级的MCU(A)不使用总线后,MCU(B)才能占用总线,发送起始信号;MCU(C)优先级最低,它需要测试等待周期2Δt,只有当MCU(A)、MCU(B)都不占用总线时(SDA一直保持为1),MCU(C)才能占用总线发送起始信号。

在实际应用中,还要注意BUSY线所用的中断脚INT0/INT1需初始化为开中断,并设定为下跳沿触发。当各MCU需控制总线进行主发送或主接收时,需先关掉INT0/INT1需初始化为开中断,并设定为下跳沿触发。当各MCU要控制总线进行主发送或主接收时,需先关掉INT0/INT1中断,再检测BUSY线是否为空闲(=1)。若是空闲就将BUSY设为0,进行竞争仲裁,流程图如图3所示。如果在仲裁时间片内SDA始终为1,说明没有高优先级的MCU要占据总线,自己可以发动起始信号控制总线,直到通信结束后,再释放BUSY线将其置为1。此时其它的MCU就只能作为从器件。如果在仲裁时间片内检测到SDA=0,则表明I2C总线已被占用,立刻将自己的BUSY设为1,并打开中断转为从接收,其流程图如图4所示。在中断程序中接收寻址字节,以判明是否呼叫自己。若是,就进行相应的读写操作;若不是,就放弃退出中断程序。注意:为了使总线上的MCU都能检测到I2C上的起始信号,并使从器件能够同步接收,SDA=0的时间要维持一定的宽度,至少应大于9个机器周期。

结语

经实验证明:三线模拟I2C总线解决了多主竞争问题,可方便的应用于多主机系统中,提高了系统的灵活性,也进一步扩大了软件模拟I2C的应用范围,在实际应用中具有一定的使用价值。通用软件包及测试程序请看网站(收集整理)网络补充版。

篇3:模拟I2C总线多主通信的通用软件包

模拟I2C总线多主通信的通用软件包

摘要:本文给出软件模拟I2C总线应用在多主机系统中的解决方案。分析多主竞争出现原因及其时段,结合时序图和流程图阐述竞争仲裁的原理及实现方案,并提供通用软件包,用户可将其应用在实际的系统中。

关键词:模拟I2C总线 多主机系统 通用软件包

引言

I2C是由Philips公司推出的芯片间串行传输总线。它以规范严谨、使用简单灵活、支持的外围器件繁多等特点而被广泛应用。对于不具备I2C接口的主器件(通常指MCU),可利用普通的I/O口来模拟I2C总线,但由于无法解决多主竞争问题而只能应用在单主机系统中。本文提供了一种解决方案,可将模拟I2C总线应用在多主机系统中,实现模拟I2C的多主通信。

1 模拟I2C多主通信的设计原理

在I2C总线系统中,可以有多个主器件节点。当多个主器件节点都企图控制总线时,就会出现多主竞争。这时就需要进行仲裁,裁决的结果只允许其中一个主器件节点成为主控器。而硬件I2C系统之所以支持多主系统,是因为其具有的三个特性:①接口的线“与”逻辑功能;②内部冲突检测电路;③I2C中断和状态处理程序。这使其能够自动完成多主竞争时的时钟同步与总线仲裁,无须用户介入。而在模拟I2C系统中,如果能通过软硬件设计模拟出上述的三个特性,就等于解决了竞争仲裁与同步问题,那么模拟I2C总线就完全可以应用于多主机系统中。

首先,经过理论分析与实验验证,得知并联在一起的.MCU的普通I/O口线本身就具有线“与”特性。其次,为了避免主节点在总线繁忙时启动总线而引起的冲突,需要增加一条握手线,即BUSY线来代表总线的忙/闲状态。因为数据线(SDA)和时钟线(SCL)上的信号是变化的,所以不能用它们充当BUSY线。另外,当多个MCU都检测到总线空闲,同时企图控制总线时,将形成多主竞争状态,同样会引起冲突。这时就需要引入时间片,用划分的时间片来决定竞争时各MCU占用I2C总线的优先次序。结合SDA的线“与”特性,检测SDA上是否已经存在启动信号(即SDA是否为0),如果直到相应的时间片结束都没有检测到SDA上的启动信号,自己就可以控制总线。最后,由于模拟系统中没有硬件I2C中断,MCU作为从器件时不知何时开始接收总线上的数据,所以,需要提供一根I2C中断信号线,使MCU在中断程序中处于从接收状态,中断线可以与BUSY线合用。

通过上述分析,利用三根信号线就能模拟出硬件I2C的竞争仲裁过程,实现模拟I2C的多主通信。

2 系统连接示意图

三线模拟I2C总线系统的连接框图如图1所示。

模拟I2C多主系统中,要参与竞争的主器件节点采用三级连接方式,如MCU(A)、MCU(B)、MCU(C);对于外围器件节点如24C64等,因不具备主动控制I2C总线的能力,不会参与总线的竞争,所以仍可采用通用的两线连接方式。三线模拟I2C总线中的时钟线SCL和数据线SDA可由MCU的任意两个I/O口线模拟;BUSY线因还要充当中断信号线,则必须与MCU的外部中断引脚INT0或INT1连接。

3 时序分析及流程设计

[1] [2]

篇4:按平台模式设计的虚拟I2C总线软件包VIIC

按平台模式设计的虚拟I2C总线软件包VIIC

摘要:VIIC是主方式下的虚拟I2C总线软件包,用于80C51系列单片机的单主系统中。只需两根普通I/O口线就可随时扩展I2C总线外围器件。将VIIC1.0装入程序存储器中,对其中的符号单元赋值后,使用三条通用操作命令就可实现任何I2C总线外围器件的应用程序设计。本文以VIIC为例,介绍应用软件形式的广义平台设计方法,给出VIIC1.0程序文本。按照这一思路,也可移植到其他系列的嵌入式系统中。

关键词:平台模式虚拟I2C总线VIIC应用程序设计

一、I2C总线及其虚拟应用

1. I2C总线应用呼唤平台模式

目前,单片机应用系统的外围扩展已从并行方式为主过渡到以串行方式为主的时代。许多新型外围器件都带有串行扩展接口。通常的串行扩展接口和串行扩展总线有UART的移位寄存器方式、MOTOROLA公司的SPI、NS公司的Microwire、Dallas公司的1Wire和Philips公司的I2C总线等。其中,I2C总线提供了较完善的总线协议、最简单的串行连接方式,并提供了总线操作的状态处理软件包,因而得到了广泛的应用。但厂家并未提供完善的平台模式应用软件包。因此,用户在扩展I2C总线外围器件时,还要在了解I2C总线协议、操作原理的基础上,采用直接方式进行I2C总线外围器件的应用程序设计。迄今为止,许多期刊的文章中还是以这种方式来介绍I2C总线的扩展应用。由于I2C总线协议的复杂性和操作管理的特殊性,从I2C总线结构原理到I2C总线应用的直接设计方式难度较大,使I2C总线推广应用较慢。因此,迫切呼唤推出I2C总线的应用软件平台,使人们不必了解I2C总线就能设计I2C总线应用程序。

2. 广泛使用的主工作方式

I2C总线是1个十分完善的多主系统总线,总线上可以挂接多个MCU,因此有4种工作方式,即主发送、主接收、从发送、从接收。但实际的单片机应用系统绝大多数都是单个MCU系统,只用到I2C总线的主方式,即主发送与主接收。

3. 虚拟I2C总线的广泛需求

目前,有许多外围器件带有I2C总线接口,然而,带有I2C总线接口的MCU只有少数厂家的个别型号,致使I2C总线难以推广。因此,人们便使用MCU通用的I/O口来虚拟I2C总线接口。早期东芝公司在彩电中就在自己的MCU中虚拟I2C总线接口,实现I2C总线外围器件扩展的虚拟应用。

采用虚拟I2C总线后,任何1个厂家的单片机都可以无障碍地使用I2C总线外围器件。同样,虚拟I2C总线的应用也呼唤平台模式。

二、VIIC1.0软件包设计

VIIC1.0是物化形式为软件包文档的广义平台,适合在80C51单片机系列单主系统中应用。

按照广义平台设计内容,VIIC有最佳包容性设计、后归一化设计、前归一化设计、物化设计和应用界面设计。

1.最佳包容性设计

最佳包容性设计是广义平台适用范围的最佳选择性设计。完整的I2C总线有4种操作方式,并且有指定的端口,有地址寄存器(S1ADR)来设定MCU的地址。在VIIC的包容性设计中规定为主方式下的通用I/O口虚拟。规定为主方式后,避免了多主方式下极大难度的总线冲突仲裁处理程序设计,又保证了能满足绝大多数I2C总线扩展应用。采用通用I/O口的虚拟,使用户可随意规定虚拟I2C总线端口,扩大了虚拟I2C总线应用的灵活性。

2.后归一化设计

后归一化设计是确定应用范围的相关设计。VIIC的后归一化设计有:

(1) 应用范围指定为带I2C总线的外围器件扩展;

(2) 所有I2C总线外围器件的操作方式归一化为外围器件N个字节的读写操作;

(3) 总线节点通信方式归一化为SLAW/SLAR节点寻址后的点对点的读写操作。

3.前归一化设计

前归一化设计是从I2C总线协议原理、操作方式、时序规则出发,实现后归一要求的设计。VIIC的前归一化设计有:

(1) 时序的指令模拟即模拟I2C总线操作时序。I2C总线操作的典型时序信号有起始位(STAR)、停止位(STOP)、发送应答位(MACK)、发送非应答位(MNACK)。

(2) 数据传送操作虚拟即模拟I2C数据传送过程。例如,应答位检查(CACK)、发送1个字节数据(WRBYT)、接收1个字节数据(RDBYT)。

(3) 外围器件读写操作虚拟。要求虚拟1个I2C总线读写操作过程(RDNBYT、WRNBYT)。

4.VIIC1.0的结构设计

(1) VIIC1.0的组成。 根据归一化设计,主方式下虚拟I2C总线由下列9个子程序组成: ・ 时序模拟子程序STAR,STOP,MACK,MNACK; ・ 操作模拟子程序CACK,WRBYT,RDBYT; ・ 数据读写子程序RDNBYT,WRNBYT。 由于篇幅所限,本文中省略了VIIC1.0软件包中这9个子程序的虚拟设计方法。需要详细了解的读者可参看文尾参考资料2中7.3节“I2C总线的串行扩展技术”的`有关部分。

(2) 软件包的出口界面 软件包VIIC实现非介入性操作,出口界面是软件包应用时惟一的触及面。VIIC1.0中的出口界面为数据读写子程序 RDNBYT/WRNBYT。

(3) 软件包的符号单元 VIIC中的符号标记有发送数据缓冲区MTD、接收数据缓冲区MRD、传送字节数存放单元NUMBYT以及寻址字节SLAW/SLAR存放单元SLA。这些符号单元都采用了标准I2C总线状态处理软件包中规定的字符标记。

5.应用界面设计

VIIC1.0软件包规定了读写子程序RDNBYT/WRNBYT的惟一出口界面,因此RDNBYT/WRNBYT的调用操作命令,以及满足调用操作的初始化操作的三条命令为VIIC的应用界面,即:

MOV SLA,#SLAR/SLAW ;总线上节点寻址并确定传送方向

MOV NUMBYT,#N ;确定传送字节数N

LCALL RDNBYT/WRNBYT ;读/写操作调用

三、VIIC1.0软件包清单

VIIC1.0软件包清单如下。

①STAR:SETB VSDA;启动I2C总线

SETB VSCL

NOP

NOP

CLR VSDA

NOP

NOP

CLR VSCL

RET

②STOP: CLR VSDA ;停止I2C总线数据传送

SETB VSCL

NOP

NOP

SETB VSDA

NOP

NOP

CLR VSDA

CLR VSCL

RET

③MACK: CLR VSDA ;发送应答位

SETB VSCL

NOP

NOP

CLR VSCL

SETB VSDA

RET

④MNACK: SETB VSDA ;发送非应答位

SETB VSCL

NOP

NOP

CLR VSCL

CLR VSDA

RET

⑤CACK: SETB VSDA ;应答位检查

SETB VSCL

CLR F0

MOV C,VSDA

JNC CEND

SETB F0 CEND: CLR VSCL

RET

⑥WRBYT: MOV R0,#08H ;向VSDA线上发送1个数 ;据字节 WLP: RLC A

JC WR1

AJMP WR0 WLP1: DJNZ R0,WLP

RET WR1: SETB VSDA

SETB VSCL

NOP

NOP

CLR VSCL

CLR VSDA

AJMP WLP1 WR0: CLR VSDA

SETB VSCL

NOP

NOP

CLR VSCL

AJMP WLP1

⑦RDBYT: MOV R0,#08H ;从VSDA线上读取1个数 ;据字节 RLP: SETB VSDA

SETB VSCL

MOV C,VSDA

MOV A,R2

RLC A

MOV R2,A

CLR VSCL

DJNZ R0,RLP

RET

⑧WRNBYT: MOV R3,NUMBYT ;虚拟I2C总线发送N个 ;字节数据

LCALL STA

MOV A,SLA

LCALL WRBYT

LCALL CACK

JB F0,WRNBYT

MOV R1,#MTD WRDA: MOV A,@R1

LCALL WRBYT

LCALL CACK

JB F0,WRNBYT

INC R1

DJNZ R3,WRDA

LCALL STOP

RET ⑨RDNBYT: MOV R3, NUMBYT ;模拟I2C总线接收n个 ;字节数据

LCALL STA

MOV A,SLA

LCALL WRBYT

LCALL CACK

JB F0,RDNBTY RDN: MOV R1,#MRD RDN1: LCALL RDBYT

MOV @R1,A

DJNZ R3,ACK

LCALL MNACK

LCALL STOP

RET ACK: LCALL MACK

INC R1

SJMP RDN1

四、VIIC1.0应用指南

1.适用范围

VIIC1.0适用于80C51系列单主系统中I2C总线外围器件扩展的应用程序设计。由于时序模拟基于6MHz时钟设计,在高速时钟下,可适当增加时序模拟子程序中的空操作指令。

2. 资源占用

VIIC使用了R0,R1,R2,R3,F0,C等资源。

3.符号单元

PVIIC中有许多符号标记,这些符号标记有:

VSDA 虚拟I2C总线数据线;

VSCL虚拟I2C总线时钟线;

SLA寻址字节存放单元;

NUMBYT传送字节数存放单元;

MTD发送数据缓冲区;

MRD接收数据缓冲区。

4.归一化操作命令

不论总线上扩展什么外围器件,都只须使用以下三条指令:

MOV SLA,#SLAW/SLAR

MOVNUMBYT,#N

LCALLWRNBYT/RDNBYT

5.VIIC的装载

由于WRNBYT/RDNBYT都使用长调用命令LCALL,故VIIC1.0可放在程序存储器的任意空间。 图1

6.通用的应用界面

VIIC1.0的应用界面如图1所示。与VIIC1.0有关的只是3条归一化操作命令;与硬件电路相关的是器件地址与引脚地址构成的寻址字节和由器件规定的数据操作格式。

(本网网收集整理)

五、VIIC1.0应用示例

在本文参考文献2中给出了一些基于VIIC软件包的外围串行扩展应用实例。现就带I2C总线接口LED显示驱动器SAA1064扩展8位LED显示电路来示范VIIC1.0的应用。

1.硬件电路与寻址字节

用2片SAA1064扩展的8位LED显示电路如图2(b)所示,图2(a)为SAA的引脚排列图。设80C51用P1.1/P1.0来虚拟SDA/SCL口线。两片SAA1064的ADR引脚分别接地和VCC。SAA1064(1)、(2)的器件地址为0111,引脚地址为000和111,因此它们的寻址字节SLAW/SLAR分别为70H/71H和76H/77H。

2.显示原理与数据操作格式

在I2C总线外围器件的数据手册中,都给出了实现器件功能的数据操作格式,以及实现功能的控制命令与寄存器的管理模式。

(1) SAA1064的数据操作格式 80C51只须对SAA1064进行写操作,便实现了LED的显示驱动控制。SAA1064的写数据操作格式如下:

SSLAWASUBADRACOMAdata1Adata2Adata3AdataAP

只须对SAA1064中首地址为SUBADR的5个寄存器单元中依次写入控制命令COM和4个LED共阴极段码datal~data4,SAA1064的SUBADR=00H。

控制命令COM格式及位功能规定如下:

D7                                                                     D0

――C6C5C4C3C2C1C0

C0   静、动态显示选择。C0=1,动态显示。

C1  显示位1,3暗亮选择。C1=1,选择亮。

C2  显示位2,4暗亮选择。C2=1,选择亮。

C3  测试位。C3=1,所有段点亮。

C4,C5,C6  驱动电流控制位。C4,C5,C6为 “1”时,驱动电流分别为3mA,6mA,12mA;皆为1时输出驱动电流最大,达21mA。

3.应用程序设计

按下列步骤完成图2(b)的8位LED显示程序设计。

(1) 将VIIC1.0装入程序存储器中。

(2) 根据硬件电路及资源分配,将VIIC1.0中的符号单元赋值如下:

VSDA EQU P1.1 ;用P1.1虚拟SDA

VSCL EQU P1.0 ;用P1.0虚拟SCL

SLA EQU 50H ;50H为寻址字节存放单元

NUMBYT EQU 51H ;51H为传送字节数据存放单元

MTD EQU 30H ;30H为发送缓冲区首地址

(3) 8位LED显示子程序设计

这里介绍1个在图2(b)LED显示器上显示“bUAA0706”固定字符的子程序。

根据SAA1064的数据操作格式,点亮4个LED只须依首地址SUBADR顺序送入控制命令COM和4个LED共阴极段选码data1~data4。

设LED驱动电流为18 mA(C6,C5为高电平;C4为低电平)动态显示要求(C2,C1,C0为高电平)故COM=67H。SAA1064(1)显示“0706”的段码依次是7DH,3FH,07H,3FH;SAA1064(2)显示“bUAA”的段码依次为77H,77H,3EH,7CH。因此,SAA1064(1),(2)的数据操作格式具体化为

设显示“bUAA0706”的子程序名为VSAA8。VSAA8的程序清单如下:

VSDA EQU P1.0

VSCL EQU P1.1

SLA EQU 50H

NUMBYT EQU 51H

MTD EQU 30H

VSAA8: MOV 30H,#00H;将SUBADR,COM,LED共 ;阴极段码data1~data4 ;依次装入发送缓冲区

MOV 31H,#67H

MOV 32H,#7DH

MOV 33H,#3FH

MOV 34H,#07H

MOV 35H,#3FH

MOV SLA,#70H;寻址SAA104(1)并为发送 ;状态

MOV NUMBYT,#06H;确定发送字节数

LCALL WRNBYT;调用VIIC1.0中N个字节写 ;入子程序

MOV 30H,#00H;将SUBADR,COM,data1~ ;data4依次装入发送缓冲区

MOV 31H,#67H

MOV 32H,#77H

MOV 33H,#77H

MOV 34H,#3EH

MOV 35H,#7CH

MOV SLA,#76H ; 寻址SAA1064(2)并为发 ;送状态

MOV NUMBYT,#06H ;确定发送字节数

MOV WRNBYT;调用VIIC1.0中N个字节写 ;入子程序

RET

如果要随意显示内存中的8个BCD码,可开辟显示缓冲区DISRAM,设计1个子程序,将显示缓冲区中的8个BCD码转换成共阴极段码再和SUBADR和COM一道送入MTD中,然后使用VIIC1.0的三条操作命令即可。

从上述应用可看出,使用VIIC软件包后,编写应用程序不必了解I2C总线原理、协议和时序,只要了解VIIC的应用操作即可。

篇5:按平台模式设计的虚拟I2C总线软件包VIIC

按平台模式设计的虚拟I2C总线软件包VIIC

摘要:VIIC是主方式下的虚拟I2C总线软件包,用于80C51系列单片机的单主系统中。只需两根普通I/O口线就可随时扩展I2C总线外围器件。将VIIC1.0装入程序存储器中,对其中的符号单元赋值后,使用三条通用操作命令就可实现任何I2C总线外围器件的应用程序设计。本文以VIIC为例,介绍应用软件形式的广义平台设计方法,给出VIIC1.0程序文本。按照这一思路,也可移植到其他系列的嵌入式系统中。

关键词:平台模式虚拟I2C总线VIIC应用程序设计

一、I2C总线及其虚拟应用

1. I2C总线应用呼唤平台模式

目前,单片机应用系统的外围扩展已从并行方式为主过渡到以串行方式为主的时代。许多新型外围器件都带有串行扩展接口。通常的串行扩展接口和串行扩展总线有UART的移位寄存器方式、MOTOROLA公司的SPI、NS公司的Microwire、Dallas公司的1Wire和Philips公司的I2C总线等。其中,I2C总线提供了较完善的总线协议、最简单的串行连接方式,并提供了总线操作的状态处理软件包,因而得到了广泛的应用。但厂家并未提供完善的平台模式应用软件包。因此,用户在扩展I2C总线外围器件时,还要在了解I2C总线协议、操作原理的基础上,采用直接方式进行I2C总线外围器件的应用程序设计。迄今为止,许多期刊的'文章中还是以这种方式来介绍I2C总线的扩展应用。由于I2C总线协议的复杂性和操作管理的特殊性,从I2C总线结构原理到I2C总线应用的直接设计方式难度较大,使I2C总线推广应用较慢。因此,迫切呼唤推出I2C总线的应用软件平台,使人们不必了解I2C总线就能设计I2C总线应用程序。

2. 广泛使用的主工作方式

I2C总线是1个十分完善的多主系统总线,总线上可以挂接多个MCU,因此有4种工作方式,即主发送、主接收、从发送、从接收。但实际的单片机应用系统绝大多数都是单个MCU系统,只用到I2C总线的主方式,即主发送与主接收。

3. 虚拟I2C总线的广泛需求

目前,有许多外围器件带有I2C总线接口,然而,带有I2C总线接口的MCU只有少数厂家的个别型号,致使I2C总线难以推广。因此,人们便使用MCU通用的I/O口来虚拟I2C总线接口。早期东芝公司在彩电中就在自己的MCU中虚拟I2C总线接口,实现I2C总线外围器件扩展的虚拟应用。

采用虚拟I2C总线后,任何1个厂家的单片机都可以无障碍地使用I2C总线外围器件。同样,虚拟I2C总线的应用也呼唤平台模式。

二、VIIC1.0软件包设计

VIIC1.0是物化形式为软件包文档的广义平台,适合在80C51单片机系列单主系统中应用。

按照广义平

[1] [2] [3] [4] [5] [6]

篇6:基于I2C总线的多MCU系统设计发展论文

基于I2C总线的多MCU系统设计发展论文

摘 要:在一些应用系统中常常使用多片MCU协同实现系统功能,为实现多片MCU之间的数据交换,可以应用多端口RAM,但其结构复杂,成本高;而利用I2C总线使多片MCU之间通过RAM实现数据交换,具有结构简单、成本低的优点。介绍一种基于I2C总线的多MCU系统的设计,简要讨论I2C总线的结构、工作原理及多MCU竞争仲裁,给出I2C总线的多MCU系统的设计,实现了多MCU系统在实际中的应用。

关键词: I2C总线; 多MCU系统; P89LPC932; 数据交换

中图分类号: TN915?04 文献标识码: A 文章编号: 1004?373X09?0016?03

Abstract: System functions are implemented by multi?MCU collaborative working in some application systems. Although the multi?port RAM can be applied to achieve data exchange among multiple MCUs, its structure is complex and cost is high. Multi?MCU data exchange can be realized by the method to link I2C bus with RAM, which has the advantages of simple structure and low cost. Design of the multi?MCU system based on I2C bus is introduced. The structure, execution principle, multi?MCU competition and arbitration of I2C bus are discussed briefly. The design of multi?MCU system based on I2C bus is given. The application of multi?MCU system in practice was implemented.

Keywords: I2C; multi?MCU system; P89LPC932; data exchange

0 引 言

随着微电子技术的发展和MCU价格的降低,常常在实际应用中使用多片MCU来协同完成系统功能,以实现更高的性能。在这些系统中多片MCU通过某种方式实现数据交换,其中使用双口或多口E2PROM是一种常见的方法。这种电路结构复杂、成本高,需要软、硬件解决多MCU访问的竞争问题,更重要的是目前许多MCU不支持外部总线,不能扩展外部E2PROM,因此无法使用这种方法。I2C总线是由Philips公司推出的芯片间串行传输总线。它以规范严谨、使用简单灵活、支持的外围器件繁多等特点而被广泛应用。I2C总线具有十分完善的总线协议,在协议的支持下,可以自动处理总线上出现的多MCU访问的竞争。目前的文献通常是介绍I2C总线在单MCU系统中的应用,本文介绍一种利用I2C总线实现多片MCU访问E2PROM,从而实现数据交换的方法。

1 I2C总线工作原理

I2C总线是一种“二线”结构,分别使用“SDA”和“SCL”信号线实现数据传输。I2C总线对与其相连的设备采用软件寻址。每一种器件都有一个特定的7位I2C地址,以便主机了解当前正与其进行通信的器件。这个7位地址的前4位固定,用来指明器件所属类别,如1010表明是串行E2PROM器件。后3位(如A2,A1和A0)通过硬件管脚进行设置来修改器件的I2C地址。表示地址字节的最低1位(R/W)用来指明主控制器向从机发送(写,R/W=0)还是接收(读,R/W=1)来自从机的数据。每个传输过程都是以起始条件开始,停止或重新开始条件结束。每一次数据传送都是由主控制器发起的,如果某一时刻总线上有多个主控器,并且都请求控制总线,这时就要进行总线仲裁处理。一旦一个主控器获得总线控制权,其他主控器必须等待此主控器发送完一个停止条件并将总线释放为“空闲”状态方可重新控制总线。在系统中主控制器通常都由MCU担任。

2 多MCU系统下的I2C总线

I2C总线软、硬件协议十分巧妙,它可以用于构成多MCU系统。当系统中有多个I2C总线接口单片机时,会出现多MCU竞争的复杂状态。I2C总线软、硬件协议以及I2C总线单片机中的SFR保证了多MCU竞争时的协调管理。I2C总线提供的状态处理软件能自动处理总线上出现的26种状态。在使用I2C总线时将这些软件工具在程序存储器中定位,利用这些软件编制出归一化操作命令,用于I2C总线应用程序设计十分简单、方便。

2.1 多MCU竟争仲裁

主机只能在总线空闲的时侯启动传输。两个或多个主机可能在起始条件的最小持续时间内产生一个起始条件,结果在总线上产生一个规定的起始条件。当SCL线是高电平时,仲裁在SDA线发生;这样,在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同,仲裁可以持续多位。它的第一个阶段是比较地址位。如果每个主机都尝试寻址相同的器件,仲裁会继续比较数据位(如果是主机—发送器),或者比较响应位(如果是主机—接收器)。因为I2C总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息。

2.2 主系统的数据传送过程

考虑以下实际应用,系统中有两片单片机,MCU A进行数据采集,并将数据存入E2PROM,MCU B不定时地从E2PROM取出数据(如图1所示)。传输数据的过程如下:

(1) 假设MCU A要发送信息到E2PROM

① MCU A(主机)寻址接收器E2PROM;

② MCU A(主机)发送器发送数据到接收器E2PROM;

③ MCU A终止传输。

(2) 如果MCU B想从器件E2PROM中接收信息

① MCU B(主机)寻址E2PROM(从器件);

② MCU B(主机)从E2PROM(从器件)读数据;

③ MCU B终止传输。

(3) 以上两种情况同时发生时,I2C总线起动总线的竞争仲裁功能

① MCU A或MCU B赢得总线的控制权,掌管总线,竞争失败的微控制器退出总线;

② 赢得总线的控制权的微控制器寻址E2PROM(从器件),并进行数据传输;

③ 赢得总线的控制权的微控制器终止数据传输,竞争失败的微控制器试图掌控总线,从器件寻址,并进行数据传输;

④ 数据传送完毕,总线进入空闲状态。

由上可知,在多MCU系统下的数据传送过程要比单主机系统下复杂得多。但I2C总线软、硬件协议能进行协调管理,保证数据的可靠传输。

3 多MCU系统的具体实现

本应用中选用了两片P89LPC932单片机及一片24系列的E2PROM。P89LPC932中I/O口P1.3和P1.2为复用端口,在用作I2C通信时,P1.3为SDA,P1.2为SCL,在程序中应该设置为开漏方式。电路中为I2C总线的上拉电阻,在具体电路中应适当调整。选择上拉电阻要考虑的因素主要为供电电源、总线上的电容                值和连接器件数。在《I2C总线协议》中规定,在供电电压大于2 V,灌电流为3 mA时,输出低电平不高于0.4 V。在本电路中供电电压为(3±0.3) V。,因而上拉电阻的最小值为Ω。上拉电阻的取值不能过大,因为上拉电阻R与总线上的电容值C构成的RC电路的时间常数,影响了总线从高电平到低电平的过渡时间,因而影响了通信速率。在快速模式中,SDA,SCL信号从低到高的过渡时间应该不大于300 ns,P89LPC932端口输出电容为15 pF,因而上拉电阻的最大值为kΩ。在电路中取值为5 kΩ。

由于P89LPC932单片机中带有内部RC振荡源,在电路中省略了一般51单片机所需要的晶振,因而电路比较简单。其硬件电路如图2所示。

4 多MCU系统下的软件设计

I2C总线的通信都是由主机发起的`。具体为主机发送起始条件,然后发送要操作的从机地址和读写命令。在收到从机应答后,进行相应操作。软件设计主要包括主机的寄存器的设置及读写子程序的设计。

4.1 P89LPC932单片机I2C寄存器的设置

LPC932单片机微功耗51内核,内部集成了I2C总线,支持400K高速模式,既可作I2C总线上的主控器件,也可作I2C总线上的从器件。LPC900单片机的I2C总线通过以下6个特殊功能寄存器实现接口:I2CON(I2C控制寄存器?0D8H)、I2DAT(数据寄存器?0DAH)、I2STAT(状态寄存器?0D9H)、I2ADR(地址寄存器?0DBH)、I2SCLH(占空比寄存器高字节?0DDH)、I2SCLLSCL(占空比寄存器低字节?0DCH)。

I2C地址寄存器在处于主模式时,该寄存器的内容无效。I2C状态寄存器是一个8位只读寄存器,它包含了I2C接口的状态代码,最低3位总是为0,I2C一共有26种可能的状态。

4.2 多MCU系统下的程序设计

按照I2C总线的规范,I2C总线数据传送可分为主发送、主接收、从发送、从接收4种方式。在多MCU模式下有主发送、主接收2种方式。每种方式都有典型的传送过程,这些数据传送都是由一些状态码标记的总线状态处理过程组成,因此I2C总线上的一个完整的数据传送是由多个I2C中断状态处理程序来完成的。每出现一个新的状态,就会产生一次I2C中断,然后进入该总线的中断处理程序,处理完毕中断返回再等待一次新的中断及状态处理直至结束。注意以下所说的主机可以是两片MCU中的任一片,而从机指的是I2C器件。

I2C总线的数据操作过程及总线状态处理是在标准软件包的支持下完成,无须用户介入,用户可以通过查询I2C总线的状态寄存器就可了解总线的处理状态,从而做相应的处理。程序设计流程图如图3所示。

I2C通信程序设计要点如下:

(1) 每次通信的起始条件和停止条件均由主机发起,从机只是负责监听主机信号。起始条件和停止条件是通过置位I2CON中的STA和STO位达到的。

(2) 当主机获得总线,成功发送启动条件后,地址和数据的发送是通过写数据寄存器I2DAT达到的。

(3) 每次发送地址和数据后应该查询状态寄存器I2STAT检查数据发送状态以进行下一步动作。

(4) 每次通信完毕后主机和从机均应该释放总线。

程序设计过程中值得注意的是:读写过程中从器件的地址是变化的,写过程中E2PROM的地址是0A0H,读过程中E2PROM的地址是0A1H。

5 结 语

本应用以两片MCU通过I2C总线共享一个存储器,实现了I2C总线多MCU机应用系统的设计,电路设计简单,易于扩展,具有较强的实用性。虽然本文是以MCS51内核单片机LPC932为例实现的,并且系统中仅两片MCU,但实际上任何带有I2C总线接口的多片MCU都可使用该方法。

参考文献

张洪刚,苑秉成,徐瑜,等.基于FPGA和SD卡的水声信号高速采集与存储系统设计.电子器件,,32(1):208?212.

肖堃,闫杰,靳文平.基于TMS320F28335的无人机机载智能接口卡设计.机械制造,,51(590):17?20.

篇7:基于CAN总线的多ECU通信平台设计

基于CAN总线的多ECU通信平台设计

摘要:介绍CAN总线及其通信协议J1939,并设计基于CAN总线的多ECN通信平台的硬件结构;阐述节点ECN通信的软件设计方法,在仿真试验的条件下实现数据通信的功能。试验表明平台运行稳定可靠。

关键词:CAN总线 ECN J1939协议 通信平台

引言

随着集成电路和单片机在汽车上的广泛应用,现代汽车上的电子控制器的数量越来越多,常见的有发动机的电子燃油喷射装置、防抱死制动装置(ABS)、安全气囊装置、电动门窗装置、主动悬架等。电控系统的增加虽然提高了轿车的动力性、经济性和舒适性,但随之增加的复杂电路也降低了汽车的可靠性,增加了维修的难度。从布线角度分析,传统的电子气系统大多采用点对点的单一通信方式,相互之间少有联系,这样必然造成宠大的布线系统。因此,一种新的概念――汽车上电子控制器局域网络CAN,也就应运而生。为使不同厂家生产的零部件能在同一辆汽车上协调工作,必须制定标准。按照ISO有关标准,CAN的拓扑结构为总线式,因此称为CAN总线。CAN总线被设计作为汽车环境中的微控制器通信,在车载各电子控制装置ECN之间交换信息,在车载各电子控制装置ECN之间交换信息,形成汽车电子控制网络。

控制器局域网CAN(Controller Area Network)是一种多主方式的串行通信总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。CAN在汽车上的应用,具有很多行业标准或者是国际标准,比如国际标准化组织(ISO)的ISO11992、ISO11783以及汽车工程协会(Society of Automotive Engigeers)的SAE J1939。CAN总线已经作为汽车的一种标准设备列入汽车的整车设计中。

图1

1 CAN总线特点及其通信协议

1.1 CAN总线简介

CAN通信协议规定了4种不同的帧格式,即数据帧、远程帧、错误帧和超载帧。基于以下几条基本规则进行通信协调:总线访问、仲裁、编码/解码、出错标注和超裁标注。CAN遵从OSI模型。按照OSI基准模型只有三层:物理层、数据链路层和哀告层,但应用层尚需用户自己定义。CAN总线作为一种有效支持分布式控制或实时控制的串行通信网络,应用范围遍及从高速网络到低成本的多线路网络。如:CAN在汽车中的发动机控制部件、ABS、抗滑系统等应用中的位速率可高达1Mbps。同时,它可以廉价地用于交通运载工具电器系统中,例如电气窗口、灯光聚束、座椅调节等,以替代所需要的硬件连接。其传输介制裁为双绞线,通信速率最高可达1Mbps/40m,直接传输距离最远可达10km/5kbps,挂接设备数最多可达110个。CAN为多主工作方式,通信方式灵活,无需站地址等节点信息,采用非破坏性总线仲裁技术,满足实时要求。另外,CAN采用短帧结构传输信号,传输时间短,具有较强的抗干扰能力。

CAN总线与其它通信协议的不同之处主要有两方面:一是报文传送不包含目标地址,它是以全网广播为基础,各接收站根据报文中反映数据性质的标识符过滤报文,其特点是可在线上网下网、即插即用和多站接收;另外一个方面就是特别强化了数据安全性,满足控制系统及其它较高数据要求系统的需求。

1.2 J1939通信协议

J1939协议是在CAN总线通信协议2.0B(29标识符)之上具体实现了应用层,是SAE为重载卡车和客车制定的通信协议;以CAN 2.0B为基础,物理层标准与ISO11898规范兼容并采用符合该规范的CAN控制器及收发器。J1939协议将CAN标识符划分为如下几个部分:优先级(P)、数据页(PGN)、协议数据单元(PDU)格式、PDU特定域(PS)和源地址(SA)。J1939/71应用层文档定义了车辆控制的各种参数及命令的PGN。

(本网网收集整理)

由此可见,J1939与CAN通信协议的区别在于29位标识符(ID),数据场相同。J1939将CAN的29位标识符(或称辨识别)进行了详细的物理定义。通过PDU将CAN标准格式封装为J1939协议格式。PDU信息帧又由优先权P、保留位R、数据页DP、协议数据单元PF、扩展单元PS、源地址SA和数据场DATA七个部分组成,即CAN的29位标识符加上数据。

2 总体设计

2.1 汽车电控网络结构

汽车内ECU之间的数据传输特征主要差别在于数据传输频率,例如发动机高速运行时,进行的是高频数据传输,每隔几ms就传输1次;而在低速运行时,进行的是低频数据传输,每隔几十ms乃至几百ms才传输1次。然而为了满足实时性要求,就要求汽车内每个控制单元尽可能实现汽车公共数据共享,但又由于每个控制单元对实时性的要求是因为数据的更新速率和控制周期不同而不同的。这就要求其数据交换网是基于优先权竞争的模式,

且本身具有较高的通信速率。CAN总线正是为满足这些要求而设计的。CAN已有国际标准,即高速场合的'ISO11898和用于低速场合的ISO11519-3。

通常的汽车网络结构采用多条不同速率的总线分别连接不同类型的节点,并使用网关服务器来实现整车的信息共享和网络管理。若按照美国汽车工程师协会(SAE)车辆网络委员会标准SAE J2057,将汽车数据传输网划分为三类。这里可用图1简单说明。其中网关是汽车内部通信的核心,通过它可以实现在CAN总线上信息的共享以及实现汽车内部的网络管理和故障诊断功能;将各个数据总线上的信息反馈到仪表板总成上的显示屏上,驾驶者通过仪表板上的信息就可以知道各个电控装置是否正常工作了。

2.2 通信平台硬件设计

在设计中,主控芯片CPU选用51系列的单片机。CAN通信控制器执行完整的CAN协议,完成通信功能,包括信息缓冲和接收滤波,故CAN控制器选用Philips的SJA1000。选用PCA82C250作为CAN总线的收发器,PCA82C250是CAN协议控制器和物理总线之间的接口,在运行环境中具有抗瞬变、抗射频和抗电磁干扰性能,内部的限流电路具有电路短路时对传送输出级进行保护的功能。传输介质采用屏蔽电费,在测控节点与介质之间加入光耦电路,以提高总线接口的抗干扰能力。图2为通信平台硬件框图,图3为控制器与收发器连接接口。

为进一步提高系统的可靠性,需要考虑到系统的冗余设计。由于汽车环境恶劣且干扰因素较多,在CAN_H和CAN_L信号线与地线之间分别并联了两个电容,滤去噪声,使信号传输平稳。双屏蔽电费可设两套,在两套介质上同时进行信息传输。接收方只用一个介质,在冗余和非冗余段的连接临界点进行总线切换。

2.3 软件设计

简单地说,本通信平台所要实现的功能就是,使各个节点(ECU)通过CAN总线实现相互通信,发送接收命令、信息等,并实现数据的共享,从而提高各自的控制性能和运行效率。汽车上CAN数据总线的每个节点(ECU)都有自己的地址和名称相对应。ECU地址指出了数据传送的目的地,而其名称则标识了ECN的基本功能。节点连续监视着总线上发出的各种数据。当所收到的数据地址值与自身地址吻合时,该节点就获得令牌。在通信规约中,唯一获得令牌的该节点有权发送数据,以防止两个或两个以上的节点同时传输数据引起混乱。同时每一个节点都有机会得到令牌,完成数据传输。

本软件设计是基于Keil C语言编写的。程序主要由主模块、中断处理模块及数据通信模块等组成,如图4所示。

图4

主模块完成对硬件初始化、寄存器的配置、SJA1000初始化等;中断处理模块包括数据中断的发送、接收、错误处理及报警处理等;数据通信模块完成数据的请求、发送、接收等。

当一个节点A发送数据请求报文(远程帧),向另外一个节点B请求报文(应答帧)时,节点B接收到请求后,经过判别,而后发送数据(应答帧)。由于数据请求没有数据场,所以相对数据帧长度小很多。经分析验证之后与节点B收到的数据相同,请求数据程序得到验证。

结语

在现代汽车的设计中,CAN总线已经成为构建汽车网络的一种趋势;而汽车网络作为直接与汽车内部各个ECU连接并负责命令的传递、数据的发送及共享,其可靠性和稳定性与整车的性能紧密相关。本文的设计开发是在基于试验条件下搭建的仿真平台,节点之间的通信是通过对等的CAN通信节点进行的。试验表明其运行性能稳定可靠,但实用化仍需要进一步的研究和改进,且程序的通信处理能力、纠错和容错能力有待进一步的提高。

篇8:基于CAN总线的多ECU通信平台设计

基于CAN总线的多ECU通信平台设计

摘要:介绍CAN总线及其通信协议J1939,并设计基于CAN总线的多ECN通信平台的硬件结构;阐述节点ECN通信的软件设计方法,在仿真试验的条件下实现数据通信的功能。试验表明平台运行稳定可靠。

关键词:CAN总线 ECN J1939协议 通信平台

引言

随着集成电路和单片机在汽车上的广泛应用,现代汽车上的电子控制器的数量越来越多,常见的有发动机的电子燃油喷射装置、防抱死制动装置(ABS)、安全气囊装置、电动门窗装置、主动悬架等。电控系统的增加虽然提高了轿车的动力性、经济性和舒适性,但随之增加的复杂电路也降低了汽车的可靠性,增加了维修的难度。从布线角度分析,传统的电子气系统大多采用点对点的单一通信方式,相互之间少有联系,这样必然造成宠大的布线系统。因此,一种新的概念――汽车上电子控制器局域网络CAN,也就应运而生。为使不同厂家生产的`零部件能在同一辆汽车上协调工作,必须制定标准。按照ISO有关标准,CAN的拓扑结构为总线式,因此称为CAN总线。CAN总线被设计作为汽车环境中的微控制器通信,在车载各电子控制装置ECN之间交换信息,在车载各电子控制装置ECN之间交换信息,形成汽车电子控制网络。

控制器局域网CAN(Controller Area Network)是一种多主方式的串行通信总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。CAN在汽车上的应用,具有很多行业标准或者是国际标准,比如国际标准化组织(ISO)的ISO11992、ISO11783以及汽车工程协会(Society of Automotive Engigeers)的SAE J1939。CAN总线已经作为汽车的一种标准设备列入汽车的整车设计中。

图1

1 CAN总线特点及其通信协议

1.1 CAN总线简介

CAN通信协议规定了4种不同的帧格式,即数据帧、远程帧、错误帧和超载帧。基于以下几条基本规则进行通信协调:总线访问、仲裁、编码/解码、出错标注和超裁标注。CAN遵从OSI模型。按照OSI基准模型只有三层:物理层、数据链路层和哀告层,但应用层尚需用户自己定义。CAN总线作为一种有效支持分布式控制或实时控制的串行通信网络,应用范围遍及从高速网络到低成本的多线路网络。如:CAN在汽车中的发动机控制部件、ABS、抗滑系统等应用中的位速率可高达1Mbps。同时,它可以廉价地用于交通运载工具电器系统中,例如电气窗口、灯光聚束、座椅调节等,以替代所需要的硬件连接。其传输介制裁为双绞线,通信速率最高可达1Mbps/40m,直接传输距离最远可达10km/5kbps,挂接设备数最多可达110个。CAN为多主工作方式,通信方式灵活,无需站地址等节点信息,采用非破坏性总线仲裁技术,满足实时要求。另外,CAN采用短帧结构传输信号,传输时间短,具有较强的抗干扰能力。

CAN总线与其它通信协议的不同之处主要有两方面:一是报文传送不包含目标地址,它是以全网广播为基础,各接收站根据报文中反映数据性质的标识符过滤报文,其特点是可在线上网下网、即插即用和多站接收;另外一个方面就是特别强化了数据安全

[1] [2] [3]

篇9:一种实现载波监听多点接入/冲突检测的多主RS485总线

一种实现载波监听多点接入/冲突检测的多主RS485总线

摘要:提出了一种附加硬件设备,配合软件实现了RS485总线上的载波监听多点接入/冲突检测协议。满足了系统的稳定性和可靠性,并且提高了系统的实时性。

关键词:RS485总线半双工载波监听多点接入/冲突检测

智能仪表和现场总线的出现标志着工业控制领域网络时代的到来,成为工业控制的主流。目前国际上已经出现了多种现场总线和相应的通信协议,但是其系统造价对于许多中小型应用仍显过高。而RS485总线以其构造简单、造价低廉、可选芯片多、便于维护等特点在众多工业控制系统中得到应用。

1RS485总线及现有工作方式的特点

RS485总线以双绞线为物理介质,工作在半双工的通信状态下[1],即同一时刻,总线上只能有一个节点成为主节点而处于发送状态,其他所有节点必须处于接收状态。如果同一时刻有两个以上的节点处于发送状态,将导致所有发送方的数据发送失败,即所谓总线冲突。为了避免总线冲突,RS485总线具有以下特点:

以工作模式来说,一般的RS485总线工作在主从模式下。整个通信总线系统由一个主节点、若干个从节点组成,由主节点不断地轮流查询从节点是否有通信需求。如果有则将总线控制权交给某一从节点,从节点发送完毕后立刻交还总线控制权。另外还有一种“轮主轮从”的工作方式,即让总线控制权在各个节点间以类似令牌环的方式传递[3],得到控制权的节点成为主节点,其它节点成为从节点。一个节点在发送完数据的同时,将总线控制权交给相邻的节点,而这个节点在处理完本节点的通信需求后再把控制权向下传递。令牌环式的RS485工作方式如图1所示。

从通信节点来讲,RS485总线上的节点必须具备将自己的驱动器切换到高阻态的功能?眼1?演,以便在发送完数据后不会对总线状态造成影响。这种驱动器实行发送态―高阻态切换的一个影响是?押从发送数据完毕到设备切换为高阻态,需要一个转换延迟。这个转换延迟是2线制通信中一个很重要的参数。这个时间不能太短,否则发出的字符的最后一部分因为尚未在总线上建立起来而导致丢失。同时这个时间也不能太长,否则在发送端还未转为高阻态时其他设备已经开始发送数据,会导致总线冲突。因此2线制RS485总线上的主设备必须知道所有从设备的反应时间,并保证在从设备反应之前把驱动器设为高阻态,以接收从设备的数据。常用设备的转换延迟是当前波特率发送一个字节的时间。

以上为适应RS485总线的特殊之处而采用的工作方式也引入了一些不足。首先,上面提到的两种总线工作方式在很多对实时性、可靠性要求高的工业控制场合有较大的局限性。主要原因是主从式总线的从节点无发起通信的权利,相互之间的通信需要通过主节点中转。而“轮主轮从”总线上的各个节点由于等待总线控制权的时间未知,实时性也无法保证。同时,如果主从式的主节点或者是“轮主轮从”式的获取令牌的节点出现故障,整个总线的工作将瘫痪,风险过于集中。其次,对驱动器实行“发送态―高阻态”切换以及考虑切换延迟等要求使编程变得复杂。在上电瞬间、CPU损坏或者是程序跑飞的情况下,还需要考虑复杂的故障保护等问题[2],否则将容易引起总线故障。

2RS485总线上CSMA/CD的实现

为了解决各个节点主动获取总线控制权的问题,人们想到了利用监听总线状态的方式实现总线控制权的本地判断和获取,也就是CSMA/CD协议实际上做的工作[3].即所有节点在发送前监听总线上是否有其他节点在发送数据,如果有,就暂时不发送。另外在发送数据的同时,边发送边监听,如果监听到冲突则冲突双方都停止发送。这样做,既能保证每一个节点都具有发起通信的权利,又能尽量减少发生总线冲突的机会,提高整个系统的吞吐量。

已有的一种实现方法[4]是将总线接收器的输出端反相后接到CPU的.外部中断管脚,如图2所示。用触发中断的方式判断总线上是否有数据传输,同时结合定时器中断判断总线是否空闲。如果总线空闲,就获得总线控制权,发送数据;然后用监听自己发送数据的办法判断是否发生总线冲突。该方法解决了总线控制权分配的时延问题,但是需要使用至少4个管脚(INT0、RXD、TXD、驱动器使能管脚),并且占用外部中断和内部定时器中断,需要利用软件监听发送的数据避免总线冲突。系统资源耗费较多,编程复杂,在一些场合的应用也有局限性。本文在以上方法的基础上提出了一种利用硬件监听总线状态的方法,真正实现CSMA/CD协议。同时减少了系统资源的占用率,简化了总线冲突的判断。另外实现了驱动器的无延迟自动切换,进一步提高了系统的实时性。该系统工作稳定、可靠,并且大大提高了通信的实时性,特别适合实时分布式控制的场合。

2.1系统框图

系统由总线状态判断逻辑、驱动器自动切换逻辑两部分组成,如图3所示。系统资源只占用CPU的3个管脚:RXD、TXD、总线状态指示脚,不占用任何中断。在软件实现方面由于采用了硬件判断总线状态而变得非常简单,只需要对标准的232通信程序做微小修改即可。

2.2总线状态判断逻辑

该电路由双RS485总线接收器构成,两个接收器的输出相与后得到总线状态信号。偏置电阻网络的对称形式使得在总线没有被驱动的情况下,两条总线的电平相等。总线状态判断逻辑如图4所示。由于接收器的两个接入点电平不同,所以当总线处于高阻状态或者总线被短路时,两个接收器都是高电平输出,总线状态为高电平。因为A、B线通过6.8kΩ电阻分别接入两个接收器的不同接收端,所以当总线出现任何一个确定的逻辑状态时,都将引起其中一个接收器的输出变为低电平,这样总线状态就变为低电平,表明总线被占用。经过理论计算和EWB仿真,该网络从A、B点看接入阻抗为12.2kΩ,恰好满足RS485协议的接收器输入阻抗要求。

2.3驱动器无延迟自动切换逻辑

为了实现驱动器的无延迟自动切换,TXD信号反相后接到驱动器使能,而驱动器输入直接接地,如图5所示。这样处理使驱动器只在数据为0时打开,把数据0发出去。而当数据为1或者无数据时立刻关闭,缩短了切换时间。但是这样做,使得数据1无法被正常发送出去。为使串行数据能被正确地接收,有两个办法产生数据中的1.第一个办法,使用总线判断电路中的正向接收器的输出端?穴OUT+?雪作为RXD信号,该信号在总线空闲、开路和短路时输出逻辑1,并且与RXD信号同相。第二个办法,使用类似MAX3080自带故障保护(fail-safe)功能的芯片作为接收器。MAX3080将接收器的触发门限电压从-200mv――+200mv调整为-200mv――-50mv,也能够在总线空闲、开路和短路时输出逻辑1.如果总线上的每一个节点都使用这些方法,那么所有节点都可以实现驱动器无延迟自动切换而不必担心数据中的1不能被正确接收。

2.4软件的实现

发送数据方面,只需将标准串口函数putc封装成一个函数RS485PutString()发送数据即可。在RS485PutString()函数中,能够方便地实现各种总线状态判断策略,甚至是CSMA/CD协议,实现载波监听,边发送边监听。也可以在此函数的基础上进行诸如定义不同数据包的实时性级别、定义总线超时判断等高级编程。

该函数的主要流程如图6.

判断总线状态就是简单地读取总线状态判断电路的输出,高为空闲,低为总线已被占用。为了减少误判,通常在判断总线状态为空闲后还要继续判断一段时间,具体的总线状态判断策略要根据通信协议进行调整。

如果判断总线空闲,即可进行数据发送。在发送过程中可以方便地继续读取总线状态以进行边发送边监听的冲突检测。一旦发现冲突发生,发送方放弃本次数据传输而转入强化冲突流程(继续发送几个0x00以使各方都确认发生了总线冲突),然后再进入总线侦听流程。以往的RS485总线冲突检测处理机制是通过对自己所发送的数据进行监听接收,然后比较接收到的数据与发送的数据是否相符,判断是否发生总线冲突,在软件实现上比较复杂。而本系统的冲突检测非常简单:发送完一个字节就读取一次总线状态指示管脚的状态,如果发现总线被占用,就是发生了总线冲突。

接收程序方面,因为接收器常开,所以仍然可以使用串行接收器的中断服务程序,将接收到的数据放入缓冲区,然后由命令解释程序处理接收到的命令。本质上与RS232的串口通信程序完全一样,只是如果接收器是常开的话,在自己发送数据时,要记住将串行接收器中断关闭,发送完毕后再打开,以避免运行不必要的中断服务程序。

另外,还可以结合驱动器和总线状态判断逻辑对总线进行开路和短路的检测/报警。具体说就是某一个节点使能总线驱动器,然后判断总线状态,如果仍然显示总线空闲,说明总线短路或者总线到总线状态判断逻辑之间开路了。

2.5存在的不足之处

该方法中的总线状态判断逻辑对逻辑0状态的要求比较高,需要B线电平比A线高约1.1V才能得到低电平。如果采用总线判断电路中的正向接收器的输出端(OUT+)作为RXD信号,就会因为对逻辑0的要求而不满足RS485的-200mV门限电平标准。若采用另一个具有故障保护功能的接收器并联的话,固然能满足-200mV门限电平标准,但整个节点的输入阻抗将降低到6kΩ。

以上不足之处都在于无法完全满足标准RS485总线标准,但在特定条件下是不会影响工作效果的。例如阻抗虽然

降低了,但是当节点数不超过16时,是能够很好地工作的。

实验表明,这种实现了CSMA/CD的多主式RS485总线工作稳定,可靠性高,大大提高了实时性。特别适合于强调实时性的分布式控制系统,能够方便地实现点与点之间的控制信息实时交换。

篇10:一种实现载波监听多点接入/冲突检测的多主RS485总线

一种实现载波监听多点接入/冲突检测的多主RS485总线

摘要:提出了一种附加硬件设备,配合软件实现了RS485总线上的载波监听多点接入/冲突检测协议。满足了系统的稳定性和可靠性,并且提高了系统的实时性。

关键词:RS485总线 半双工 载波监听多点接入/冲突检测

智能仪表和现场总线的出现标志着工业控制领域网络时代的到来,成为工业控制的主流。目前国际上已经出现了多种现场总线和相应的通信协议,但是其系统造价对于许多中小型应用仍显过高。而RS485总线以其构造简单、造价低廉、可选芯片多、便于维护等特点在众多工业控制系统中得到应用。

1 RS485总线及现有工作方式的特点

RS485总线以双绞线为物理介质,工作在半双工的通信状态下[1],即同一时刻,总线上只能有一个节点成为主节点而处于发送状态,其他所有节点必须处于接收状态。如果同一时刻有两个以上的节点处于发送状态,将导致所有发送方的数据发送失败,即所谓总线冲突。为了避免总线冲突,RS485总线具有以下特点:

以工作模式来说,一般的RS485总线工作在主从模式下。整个通信总线系统由一个主节点、若干个从节点组成,由主节点不断地轮流查询从节点是否有通信需求。如果有则将总线控制权交给某一从节点,从节点发送完毕后立刻交还总线控制权。另外还有一种“轮主轮从”的工作方式,即让总线控制权在各个节点间以类似令牌环的方式传递[3],得到控制权的节点成为主节点,其它节点成为从节点。一个节点在发送完数据的同时,将总线控制权交给相邻的节点,而这个节点在处理完本节点的通信需求后再把控制权向下传递。令牌环式的RS485工作方式如图1所示。

从通信节点来讲,RS485总线上的节点必须具备将自己的驱动器切换到高阻态的功能?眼1?演,以便在发送完数据后不会对总线状态造成影响。这种驱动器实行发送态―高阻态切换的一个影响是?押从发送数据完毕到设备切换为高阻态,需要一个转换延迟。这个转换延迟是2线制通信中一个很重要的参数。这个时间不能太短,否则发出的字符的最后一部分因为尚未在总线上建立起来而导致丢失。同时这个时间也不能太长,否则在发送端还未转为高阻态时其他设备已经开始发送数据,会导致总线冲突。因此2线制RS485总线上的主设备必须知道所有从设备的反应时间,并保证在从设备反应之前把驱动器设为高阻态,以接收从设备的数据。常用设备的转换延迟是当前波特率发送一个字节的时间。

以上为适应RS485总线的特殊之处而采用的工作方式也引入了一些不足。首先,上面提到的两种总线工作方式在很多对实时性、可靠性要求高的工业控制场合有较大的局限性。主要原因是主从式总线的从节点无发起通信的权利,相互之间的.通信需要通过主节点中转。而“轮主轮从”总线上的各个节点由于等待总线控制权的时间未知,实时性也无法保证。同时,如果主从式的主节点或者是“轮主轮从”式的获取令牌的节点出现故障,整个总线的工作将瘫痪,风险过于集中。其次,对驱动器实行“发送态―高阻态”切换以及考虑切换延迟等要求使编程变得复杂。在上电瞬间、CPU损坏或者是程序跑飞的情况下,还需要考虑复杂的故障保护等问题[2],否则将容易引起总线故障。

2 RS485总线上CSMA/CD的实现

为了解决各个节点主动获取总线控制权的问题,人们想到了利用监听总线状态的方式实现总线控制权的本地判断和获取,也就是CSMA/CD协议实际上做的工作[

[1] [2] [3]

基于USB总线通信数据采集器的设计与实现

用多块多网格方法数值模拟三维粘性流动

下载模拟I2C总线多主通信的通用软件包(推荐10篇)
模拟I2C总线多主通信的通用软件包.doc
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
最新范文更多
    热门文章
      猜你喜欢
      点击下载本文文档