ABB SD833(3BSC610066R1)
由于我们采用的是二主一从的I2C总线方式,因此防止2个主机同时去操作从机(防冲突)是一个非常重要的问题。带有硬件I2C模块的器件一般是这样的,器件内部有1个总线仲裁器与总线超时定时器:当总线超时定时器超时后指示总线空闲,这时单片机可以发出获取总线命令,总线仲裁器通过一系列操作后确认获取总线成功或失败;超时定时器清零,以后的每一个SCL状态变化对总线所有主机的超时定时器进行清零,以防止它溢出,指示总线正处于“忙”状态,直到一个主机对总线控制结束不再产生SCL脉冲;超时定时器溢出,总线重新回到“空闲”状态。但是目前大多数单片机没有配备硬件I2C模块,而且当2个主机的工作频率相差较大时,超时定时器定时值只能设为较大的值,这样也会影响总线的使用效率。下面介绍一种用软件模拟I2C总线仲裁的方式(I2C读写操作程序的软件模拟十分多见,这里不再多述):用1条握手线A,流程图如图2所示,当A线高电平时,指示总线空闲;当其中一个主机要获取总线控制权时,先查询总线是否空闲,“忙”则退出,空闲则向A线发送一个测试序列(如:1000101011001011),在每次发送位“1”后读取的A线状态。如果读取状态为“0”,马上退出,说明有其它器件已经抢先获取总线;如果一个序列读取的A线状态都正确,则说明已成功获得总线控制权,这时要拉低A线以指示总线“忙”,直到读写高A线,使总线回到“空闲”状态。不同的主机采用不同的测试序列,或产生随机测试序列,测试序列度可以选得长一些,这样可以增加仲裁的可靠性。

流程框图
(3)通信协议
一个可靠通信体系,除了好的硬件电路外,通信协议也至关重要。在单片机系统RAM资源与执行速度都非常有限的情况下,一个简捷有效的协议是非常重要的。下面具体介绍一种比较适用于单片机通信的协议,数据以包的形式传送。数据包结构:
①包头——指示数据包的开始,有利于包完整性检测,有时可省略;
②地址——数据包要传送的目标地址,若只有双机通信或硬件区分地址可以省略;
③包长度——指示整个数据包的长度;
④命令——指示本数据包的作用;
⑤参数——需要传送的数据与参数;
⑥校验——验证数据包的正确性,可以是和校验、异或校验、CRC校验等或者是它们的组合;
⑦包尾——指示数据包的结尾,有利于包完整性检测,有时可省略。
(4)通信流程
首先,要在FRAM里划分好各个区域,各个单片机的参数区、数据接收区等。然后,单片机可以向另一个单片机发送数据包,发送完毕之后通过向握手线B发送1个脉冲通知对方取走数据;接收方读取数据并进行处理后,向FRAM内发送方的数据接收区写入回传数据或通信失败标志,再向握手线B发送1个脉冲回应发送方。表3是单片机1启动1次与单片机2之间的通信的例子。如果需要单片机2发送的话,只需交换一下操作过程即可。
步骤单片机1 单片机2 A线 B线 1 总线空闲总线空闲 1 1 2 获取总线控制权其它操作 0 1 3 向FRAM内单片机2的数据接收区写入一包通信数据其它操作 0 1 4 向B线发送走个负脉冲,通知单片机2,启动超时定时器其它操作 0 负脉冲 5 其它操作响应来自B线的脉冲,读取FRAM内数据接收区的内容(无须获取总线操作) 0 1 6 其它操作对数据进行处理后,向FRAM内单片机1的数据接收区写入回传数据或通信失败标志 0 1 7 其它操作向B线发送1个负脉冲,通知单片机1 0 负脉冲 8 清超时定时器,读取数据区内容。如果失败可以做重发或其它处理;如果成功则拉高A线,释放I2C总线,
1次通信工程结束其它操作 1 1 9 如果超时定时器溢出,说明单片机2没有响应单片机1的通知,可以做重发或故障处理。
ABB FREELANCE 2000 DAI04
ABB Freelance2000 DAI04
ABB Freelance2000 DAI03
ABB Freelance2000 DAO01
Bailey CLC03 COMMAND
DSBC172
DSCS131
DSAI133
DSAI110
DSAI130
DSAI145
DSAI146
DSAI155
DSAI155A
DSAI303
DSAI305
DSAO110
DSAO130
DSAO120
ADSAO301
DS***110
DSAX110
DSAX110A
DSAX452
CS513K02
CS513K04
DI621
DO610
DO630
DSAI130
DSAI145
DSAI146
DSAI155
DSAI155A
DSAO110
DSAO130
DSAO120
DSAO120A
DSAX110
DSAX110A
DSAX452
DSBB120
DSBC172
DSBC173
DSBC173A
DSBC174
DSCS140
DSDI110
DSDI110A
DSDO115
DSDO120
DSDO131
DSDO110
DSDP150
DSDX180
DSDX180A
DSDX452
DSP***52
DSPU131
DSRF185
DSRF186
DSRF199
DSSR170
DSSS171
DSTA001
DSTA001B
DSTA002B
DSTA131
DSTAN013
DSTA002P
DSTC120
DSTC190
DST***06
DST***52
DSTD108
DSTD190
DSTD197
DSTX180
DSDX453
DSAI130
SNSR-104
YPQ201A
Y***7E
YPQ202A
DCU30/7
DS***-111
D***B175
DSBC172
DSCS131
086329-004
DAI01 ABB
DAI04 ABB◆
DAI05 ABB◆
DAO01 ABB◆
DCO01 ABB◆
DCP02 ABB◆
DCP10 ABB◆
DDI01 ABB◆
DDO01 ABB◆
DDO02 ABB◆
DDO03 ABB◆
DFC01 ABB◆
DFE01 ABB◆
DFI01 ABB◆
DFM11 ABB◆
DFP01 ABB◆
DLM01 ABB◆
DPW01 ABB◆
DPW02 ABB◆
DPW03 ABB◆
DRA02 ABB◆
ABB Procontic光纤耦合器(GJV3074379R2)
ABB Procontic文字处理器模块(GJV3074381R101)
ABB Procontic空套管空白槽(GJV3074397R1)的,
ABB Procontic输入/输出单元(ICDG32L1)
ABB Procontic平板的I / O远程单位(ICFC16L1)
ABB Procontic远程单位(ICMK14F1)
ABB Procontic模拟I / O远程单位(ICSA04B5)
ABB Procontic I / O单元 - 为120 Vac(ICSC08L1-120)
ABB Procontic I / O单元 - 230 VAC(ICSC08L1-230)
ABB Procontic I / O单元 - 24 VDC(ICSC08L1 24)
ABB Procontic远程模拟量输入模块(ICSE08A6)
ABB Procontic远程模拟单位 - 24 VDC(ICSE08B5-24.)
ABB Procontic高速计数器(ICSF08D1的),
ABB Procontic二进制输入单位(ICSI08D1-120)
ABB Procontic二进制输入单位(ICSI08D1-230)
ABB Procontic二进制输入单位(ICSI08D1-24)
ABB Procontic二进制输入单位(ICSI08E1-120)
ABB Procontic二进制输入单位(ICSI08E1-230)
ABB Procontic二进制输入单位(ICSI08E1-24)
ABB Procontic二进制输入模块 - 120 VAC(ICSI08E3)
ABB Procontic二进制输入单位 - 230 VAC(ICSI08E4-230)
ABB Procontic二进制输入单位(ICSI16D1-120)
ABB Procontic二进制输入单位(ICSI16D1-230)
ABB Procontic I / O远程单位 - 24 VDC(ICSI16D1 24)
ABB Procontic二进制输入单位(ICSI16E1 -120)
ABB Procontic二进制输入单位(ICSI16E1 -24)
ABB Procontic远程I / O单位 - 24 VDC(ICSK20F1):
ABB Procontic I / O远程单位 - 120VAC(ICSK20F1-120)
ABB Procontic I / O远程单位(ICSK20F1-230)
ABB Procontic模拟I / O远程单位(IC***06A6)
ABB Procontic二进制输出单位230 VAC(ICSO08R1-230)
ABB Procontic输出单位(ICSO08R1-24)
ABB Procontic二进制输入模块 - 24 VDC(ICSO08Y1)
ABB Procontic二进制输出单位230 VAC(ICSO08Y1-230)
ABB Procontic二进制输出单元24 VDC(ICSO08Y1-24)
ABB Procontic I / O远程单位 - 数字输出(ICSO16N1),
ABB Procontic电源连接单元(SACE PR120 / B)
ABB Procontic的模拟输入Expanison模块(XE08B5)
