您好:
我最近在调试SRIO口,我想问下,在做External forwarding back test 测试中,多个SRIO设备的设备号如何设置的?如何设为8bit,可以随意指定吗,这里DSP0_SRIO_BASE_ID=0xA0,DSP1_SRIO_BASE_ID=0xB0,那设备之间是如何知道的?怎么指定从dsp0发到dsp1然后在回到dsp0的?
这些变量的意思是做啥的:srio_cfg.device_ID_routing_config= dsp1_device_ID_routing_config,KeyStone_SRIO_match_ACK_ID(2, DSP1_SRIO_BASE_ID, 2);
谢谢您的回答!
Allen35065:
建议看一下SRIO协议,SRIO协议支持8bit地址域或16bit地址域,两个设备要通信应保持在相同地址域,设备ID不能相同。
match ACK ID是一个SRIO握手的流程,细节部分应参考SRIO协议。
hongkun zhang1:
回复 Allen35065:
谢谢您的回答,这个协议我看过了,我的意思是我没找到他们各自设置自己设备ID的地方,比如现在dsp0的port0端口要做SRIO_EXTERNAL_FORWARD_BACK,那么首先要做几个事情,指定自己的设备ID,从哪个端口发出去,这里是prot0,链路模式1x还是其他,速度,等等,最关键的是要指定他要发到什么地方去,这里是dsp1的设备上去,我没看到的就是他没指定远端的设备ID啊?
上面的握手传入的参数是本地port和远方port,这就算建立了联系了吗?但是他还是没有指定远方设备ID啊?所以我问了这个KeyStone_SRIO_match_ACK_ID函数的作用。
最后,这个例程中所有srio参数都用的一个srio_cfg变量,这两个核之间不对对此产生冲突吗?
谢谢您的回答!
chen yi xue:
回复 hongkun zhang1:
发包的DEST不再config部分,而是在响应的LSU寄存器或者PKT_message 的描述符里面
你可以把SRIO系统当作是以个局域网系统来看,每个电脑通信时的目标IP不是保存在自己设备中的,而是由高层给出的,在这里我们可以看作是预定一好的DEVICE_ID拓扑,Srio并不考虑上层给的ID是否能用,它只是照着个ID来组包然后发出去(如果没有ID对应的设备直接丢弃就好了),你需要注意的是接收方是否设置了这个包的SRC_ID的接收规则,在BBR(Base_routing_register)里面配置。
以上~~
觉得答得不错就给个赞吧
hongkun zhang1:
回复 chen yi xue:
首先非常感谢您的回答
我现在就想做一个这个测试,那么对于DSP1来讲,和我的问题相关的主要配置就两个:
srio_cfg.device_ID_routing_config= dsp1_device_ID_routing_config;
srio_cfg.PktForwardingEntry_cfg = DSP1_PktForwarding_Cfg;
其中,dsp1_device_ID_routing_config的值是这样的:
SRIO_Device_ID_Routing_Config dsp1_device_ID_routing_config[]={ /*idPattern idMatchMask routeMaintenance*/ {DSP1_SRIO_BASE_ID+0, 0xFFFF, 1}, {DSP1_SRIO_BASE_ID+1, 0xFFFF, 1}, {DSP1_SRIO_BASE_ID+2, 0xFFFF, 1}, {DSP1_SRIO_BASE_ID+3, 0xFFFF, 1}, {DSP1_SRIO_BASE_ID+4, 0xFFFF, 1}, {DSP1_SRIO_BASE_ID+5, 0xFFFF, 1}, {DSP1_SRIO_BASE_ID+6, 0xFFFF, 1}, {DSP1_SRIO_BASE_ID+7, 0xFFFF, 1},};
DSP1_PktForwarding_Cfg的值是这样的:
SRIO_PktForwarding_Cfg DSP1_PktForwarding_Cfg[]={ /*forwarding ID 8 up*/ /* forwarding ID 8 lo */ /*forwarding ID 16 up*/ /*forwarding ID 16 lo*/ /*outport */ {DSP0_SRIO_BASE_ID+0, DSP0_SRIO_BASE_ID+1, DSP0_SRIO_BASE_ID+0, DSP0_SRIO_BASE_ID+1, 2}, {DSP0_SRIO_BASE_ID+2, DSP0_SRIO_BASE_ID+2, DSP0_SRIO_BASE_ID+2, DSP0_SRIO_BASE_ID+2, 2}, {DSP0_SRIO_BASE_ID+3, DSP0_SRIO_BASE_ID+3, DSP0_SRIO_BASE_ID+3, DSP0_SRIO_BASE_ID+3, 3}, {DSP0_SRIO_BASE_ID+4, DSP0_SRIO_BASE_ID+7, DSP0_SRIO_BASE_ID+4, DSP0_SRIO_BASE_ID+7, 3}};
对这两个结构体能否稍作解释呢?谢谢
chen yi xue:
回复 hongkun zhang1:
点回复我才能看到哦
第一个应该是配置收到id的接受规则,具体没看协议也不清楚
第二个是配置转发模式的 设定了转发的ID和这些转发包输出的port(根据port会走到不同的设备里面而图中是4x 所以只有port0),
hongkun zhang1:
回复 chen yi xue:
我点的就是回复你啊,虽然我还是有些疑问,但是非常感谢您的回答。如果方便的话可否加一下QQ,以后有机会请教呢?谢谢,1311462326
hongkun zhang1:
回复 chen yi xue:
谢谢!