目前在对OMAP L138的LWIP网络通讯进行调试,参考的是OMAPL138_StarterWare_1_10_04_01。
使用的是DSP核。
调试中发现,IP地址总是不正确;经调查发现IP地址的起始字节没有按照4字节对齐。
经观察,pBuf指向的ethhdr中,MAC地址共有12字节,再加上2字节的type,共14字节。而ethhdr是4字节对齐的,因此导致后面的IP地址无法按照4字节对齐。
后来发现,ethhdr可以加上ETH_PAD_SIZE = 2字节来进行对齐处理。这样IP地址是对了,但是由于接口层驱动sitaraif.c中并未用到ETH_PAD_SIZ,因此又会引入其他问题。
TI有技术支持工程师说 这个StarterWare的LWIP他们用过,完全没有问题。
这个不知道是不是CCS设置的问题,该如何设置,请各位帮助一下。
另,通过修改pBuf.c里面的pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)函数,进行对齐处理。有时候能够跟主机正常通讯,但是有时候确会出现数据checksum失败的情况。
pBuf.c文件是LWIP的文件,修改也是不太合适。
还是需要请教一下如何配置CCS,直接让程序正常运行。
另,将程序重新编译成ARM内核运行的程序后。
通过ARM运行,在通过MDIO读取PHY的寄存器时,在下面这句中,MDIO_USERACCESS0_GO一直没有被自动清零:
while(HWREG(baseAddr + MDIO_USERACCESS0) & MDIO_USERACCESS0_GO);
连接DSP核,在DSP核中运行一次原来的DSP ENET程序之后,ARM这边能够正常访问PHY。
但是又出现了一个新的问题,ARM的中断无法触发,导致网络访问还是无法正常进行。
另,在Starterware的使用说明中有这么一句话:
TMS470 Tool chain does not support packed attributes. This leads to issues when ethernet applications, built with TMS470 tool chain, are executed on the target. Hence, please do not use/connect ethernet in the demo. This issue is documented in the Known issues section of the release notes
是否就是说因为packed attributes的问题,编译出来的的DSP代码没有办法使用呢?
DSP核编译的时候有这个错误:
#1173-D attribute "__packed__" ignored
fa linag:
回复 Yong Wu1:
请问这个配置在哪里勾选的?
Yong Wu1:
回复 fa linag:
在CCS的项目配置里面