Other Parts Discussed in Thread:TMDSSK3358, AM3359
板子是官方的TMDSSK3358,跑的裸机,连接路由器能把路由器发出的任意数据包接收到,CPSW的统计寄存器组能正确统计到网络上的所有数据包,很多数据包能被CPSW转发到我定义的接收缓存中,从以上来看,是不是能很明确的说明:
1 我的EMAC模块时钟配置应该是没问题的吧?
2能接收到,说明接收描述符的配置是正确的吧?至少配置的大方向应该没错吧?目前我是测试,不区分数据,只要路由器或者路由器连接的PC有数据发出来,都会被CPSW统计到。
我的数据发送,目前在AM3359的千兆网寄存器CPSW_CPDMA的DMA状态寄存器DMASTATUS中没有任何报错,发送完数据中断状态寄存器的标志位都能被置位,所以我觉得应该还有哪个寄存器没有配置正确,但一时又看不出应该是哪里
不知道TI那边有没有对sitara系列千兆网这块的单独的文档资料参考下
Nancy Wang:
请参考PSDK的例程。可以测试一下回环,如果可以的话说明emac部分配置应该是没有问题的。
software-dl.ti.com/…/index_device_drv.html
,
user18914063:
OK了,是寄存器配置的缘故,ALE地址寻找引擎寄存器组的PORTCTL0–5里面,我用的端口是0和1,就把PORTCTL0和1的PORT_STATE设置为3:允许转发,然后发送就可以了,能用转包程序wireshark看到我发出的包了,网口灯一直闪烁
,
Nancy Wang:
感谢分享!
,
user18914063:
TI有没有关于sitara系列千兆网口里面ALE这个模块功能的专门的文档之类的资料啊,目前虽然硬件上都打通了,但数据收发还是有些问题,感觉主要问题在ALE这个模块功能上面,相关功能好多地方理解不清,感觉ALE应该是个类似数据包过滤的功能吧。我现在遇到的问题主要是:
1在MDIO中断里面检测到网线插上后,在此中断里面发出一个DHCP的Discover包,然后路由器回应了该包,说明发送没有问题,MDIO中断也没有问题,如果我关掉接收中断,只保留这个MDIO中断,不停的拔掉网线在插上的话,3359会不停的发这个数据包出来,抓包软件观察结果是数据包完全正确。
2网口接收中断接收到这个路由器回应的数据包后,如果系统处于调试模式的自由运行状态,则一进接收中断,系统就跑飞,我判断进了接收中断,是因为接收中断里面有个点亮LED的语句,进中断后LED亮了。如果在接收中断里面打断点,则系统不停的进这个接收中断然后在断点处停下来,有时候会连续进很多次后就不在进接收中断,不管有没有数据发过来,系统也没有跑飞
3针对问题2,我为了判断是中断本身配置的问题,还是网口那边的配置问题,就用了另外一个板子(和3359没任何关系的一个单片机开发板子),不经路由器,将此板和3359板子用网线直接连接,然后不停的给3359发数据,结果就是3359的接收中断能很好的运行,对应的LED不停闪烁,然后在接收中断里面打断点,发现发过来的数据都被正确接收到了
目前主要就是问题2一直不能得到解决,不知道哪里的问题,只是暂时怀疑是ALE模块的配置
,
Nancy Wang:
sitara系列的没有看到除了TRM之外的文档有关于ALE的讲解,我在另一个型号的手册上看到有关于ALE的模块的讲解,可以参考看一下。
www.ti.com.cn/…/sprugv9d.pdf
根据3中断配置部分应该没有问题,我看到您再以下帖子中已经贴出MDIO的中断,能否将接受中断也贴出来一下。
e2echina.ti.com/…/202848
连接路由器不打断点的时候是只进一次中断就会跑飞吗?
,
user18914063:
连接路由器不打断点的时候是只进一次中断就会跑飞吗?
是的,只进了一次中断,然后就跑飞了
以下是接收中断,比较简单
void EtherNet_RX_ISR(void)
{Uint32 Rxn_CP;
INTCRegs->CTRL.bit.NewIRQAgr= 1;//允许下一个新的IRQ中断产生CPDMA_Regs->EOI_VECTOR.bit.VECTOR = 1;//写入接收中断结束向量1Rxn_CP = STATERAM_Regs->RXn_CP[0];STATERAM_Regs->RXn_CP[0] = Rxn_CP;//写入接收完成指针Init_ReceiveDescriptor();//初始化接收描述符LED4 = ~LED4;//闪烁LED,指示接收中断正常
}
,
Nancy Wang:
请跟进以下帖子,谢谢!
e2e.ti.com/…/3695630