系统探测(exploration)和初始化
1 介绍
探测和初始化RapidIO系统有一些基本的方法,最简单的方法是定义系统各部件的上电状态,这样,各设备能对系统其余部分的有关通讯方面的知识有足够的了解,这通常是在系统boot期间,从串行ROM或类似的器件中将初始化信息读出并以此初始化所有设备,这种方法非常适合于那些不变的静态系统以及对boot有严格时间要求的系统。第二种方法是在BOOT时由一个处理器来探测和配置系统,这可能导致比较长的boot时间,但是这么做更灵活,可支持那些即插即用经常改变的系统。
2 Boot代码存取
在大部分RapidIO应用中,系统初始化要求有用于探测和初始化器件的软件,系统初始化通常由一个处理器或一组处理器来执行,处理器的boot代码可以放在本地ROM里,也可以在一个远程代理器件那里,因为系统还没有初始化,这时,如果boot代码存放在远程代理器件那儿,我们需要一个特殊的方法让处理器通过一个还没有初始化的系统来存取到boot代码。
在复位之后,处理器通常向一个固定的地址发出代码存取请求,在处理器和RapidIO架构之间的代理硬件要求能够接收这个请求,自动将它映射成NREAD交易,这个交易以一个适当的地址偏移被映射到一个专用的器件ID上以便发现Boot代码。在处理器和存放有boot ROM的代理器件之间的所有器件应该有个缺省状态,都会将这个NREAD交易路由到Boot ROM器件,并把其响应路由回处理器。存有boot代码的代理器件的器件ID是0xFE(0x00FE),处理器缺省器件ID是从0x00开始,逐渐增加,顺序分配的。因为需要取boot代码的的都HOST,而HOST是系统设计的时候就确定的,其ID也是设计时就是这么分配好了。
图2-1显示了带有boot ROM系统的一个例子,boot ROM存在一个代理器件上,在处理器和代理之间的交换器件的缺省路由状态应该是将所有对器件ID为0xFE的请求路由到代理器件,并将从代理那儿获得所有的响应包返回给处理器。这意味着交换机必须知道取boot代码的处理器的器件ID,处理器的器件ID是从0x00开始的。对于图2-2的例子,系统处理器缺省器件ID为0x00,交换机的缺省状态是路由器件ID=0x00到port 2。
一旦处理器能开始运行boot代码,它就开始执行系统余下的探测和初始化。
3 探测和初始化
作为一个例子,算法仅考虑一个简单系统:仅一个处理器负责这个系统的探测和初始化,我们称这个处理器为Host,探测和初始化过程也是基于一定的规则,部件和系统设计者应该遵从这个规则。
7.3.1 探测和初始化规则
- Host应该能够“到达”它负责初始化的所有代理器件,这可能要求一些机制能够产生第三方交易以达到那些不是透明可见的器件。
- 由代理和交换器件产生的维护响应应该送到收到维护请求的那个端口。例如,一个器件实现了一个5端口的交换,系统Host发布一个维护读请求给交换器件,它在输入端口3收到这一请求,随后产生这个维护读请求的响应,交换芯片必须将它路由到它的输出端口3,即使交换芯片可能缺省配置成路由响应到非端口3(当