ROM搜索过程只是一个简单的三步循环程序:读一位、读该位的补码 、写入一个期望的数据位。总线主机在 ROM的每一位上都重复这样的三步循环程序。 当完成某个器件后,主机就能够知晓该器件的 ROM信息。剩下的设备数量及其 ROM代码通过相同的过即可获得。 下面的ROM搜索过程实例假设四个不同的器件被连接至同一条总线上,它们的 ROM代码如下所示:
ROM1 00110101…
ROM2 10101010…
ROM3 11110101…
ROM4 00010001…
具体搜索过程如下:
1 、主机发出复位脉冲,启动初始化序列。从机设备发出响应的应答脉冲;
2 、接着主机在总线上发出ROM搜索命令 ;
3 、 主机从总线上准备读入一个数据位,这时,每个响应设备分别将 ROM代码的第一位输出到单总线上。ROM1 和ROM4 输出 0 至总线,而ROM2 和ROM3 输出 1 至总线。线上的输出结果将是所有器件的逻辑”与“ ,所以,主机从总线上读到的将是 0 。接着, 主机开始读另一位,即每个器件分别输出 ROM代码中第一位的补码,此时,ROM1 ROM4 输出 1至总线,而ROM2 和ROM3 输出 0 至总线 。这样,主机读到的该位补码还是 0 。主机由此判定,总线上有些器件的ROM代码第一位为0, 有些则为1;
两次读到的数据位具有以下含义:
00 在该位处存在设备冲突;
01 在该位处所有器件为0;
10 在该位处所有器件为1;
11 单总线不存在任何设备;
4、 主机写入 0,从而禁止了 ROM2 和ROM3 响应余下的搜索命令 ,仅在总线上留下了 ROM1和ROM4;
5 、主机再执行两次读操作 ,依次收到 0 和1,这表明 ROM1 和ROM4 在ROM代码的第二位都是0 ;
6 、接着主机写入0,在总线上继续保持ROM1 和ROM4 ;
7 、主机又执行两次读操作,收到两个 0, 表明所连接的设备的 ROM代码在第三位既有 0,也有1;
8 、主机再次写入 0 ,从而禁止了 ROM1 响应余下的搜索命令,仅在总线上留下了 ROM2;
9 、主机读完 ROM4 余下的 ROM数据位。这样就完成了第一次搜索,并找到了位于总线上的第一个设备;
10、重复执行第1 至第7 步,开始新一轮的ROM搜索命令;
11、 主机写入1 ,使ROM4 离线,仅在总线上留下ROM1;
12 、主机读完 ROM1 余下的 ROM数据,这样就完成了第二次的 ROM搜索,找到了第二个ROM代码 ;
13 、重复执行第1 至第3 步开始新一轮的ROM搜索命令
14、主机写入 1 这次禁止了 ROM1 和ROM4 响应余下的搜索命令 仅在总线上留下了 ROM2和ROM3 ;
15 、主机又执行两次读操作时隙读到两个0 ;
16、 主机写入0 ,这样禁止了ROM3 ,而留下了ROM2; 17 、主机读完 ROM2 余下的 ROM数据,这样就完成了第三次的 ROM搜索,找到了第三个ROM代码;
18、 重复执行第13至第15步,开始新一轮的ROM搜索命令;
19 、主机写入1 这次禁止了ROM2 而留下了ROM3;
20 、主机读完 ROM3 余下的 ROM数据,这样就完成了第四次的 ROM搜索,找到了第四个ROM代码;
说明 : 每次搜索 ROM操作,主机只能找到某一个单总线器件的 ROM代码,所需要的最短时间为: 960 us+(8+3 64) 61 us=13.16ms ; 所以主机能够在1秒之内读出75个单总线的ROM 代码。
声明:资料供同学们学习使用
|