以太网&&lwip移植调试记录7.1之前

来源:互联网 发布:python asyncio 编辑:程序博客网 时间:2024/05/16 10:31

6月26日:

1、  板子焊好之后,准备调试电压监测仪软件以太网部分。

2、  由于电压监测仪二次板上硬件只有以太网,故将涉及其他硬件的初始化和任务全部关掉,最后只剩默认参数初始化,和232串口、以太网口的任务。否则每当涉及到spi或i2c读外部芯片时会死掉。

3、  程序中以太网没有加入现有规约列表,我在portInitialize()中的最后自己创建了以太网规约任务task_create(&gTaskEnet,enetStk, sizeof(enetStk),Ethernet_Cac_Run, PRI_PROT_TASK, NULL,"ENET");

4、  进入ETH_Init(),以太网时钟配置和模式配置都在最后的stellarisif_init()中有,这里注释掉。以太网LED灯配置完以后管脚输出高电平,电路中是上拉配置,所以不能亮,需要通过Ethernet MAC LED Encoding (MACLED)寄存器配置LED的具体功能。

5、  进入tcpip_init,经调试,需要设置以下宏,TCPIP_MBOX_SIZE= 16,TCPIP_THREAD_STACKSIZE= 1024(一开始设为256,后来调试出现问题,怀疑是协议栈函数层次较深,栈冲破,改为512后当时好了,后来又出现相同问题,最后改为1024)。目前没问题。

6、  进入lwIPPrivateInit,再进入stellarisif_init,初始化结束。

7、  进入规约任务Ethernet_Cac_Run,建立连接结构netconn_new,给tcpip_thread发消息,调用do_newconn -----pcb_new----tcp_new,创建tcp的pcb块。

8、  进入ConnectHost,进行netconn_bind,给tcpip_thread发消息,do_bind----tcp_bind,绑定ip和端口,成功。

9、  进入netconn_connect,总是返回连接超时错误。连接失败。

 

疑问

1、  TCPIP_THREAD_PRIO = 1,是否需要修改?

2、  TCPIP_MBOX_SIZE = 16,是我自己设置的。应该按照什么设置?

3、  lwIPInterruptTask任务的优先级 =1,是否需要修改?

4、  以太网初始化之后,示波器测量以太网TXON和TXOP管脚,总是间隔出现一堆脉冲。由于TXON和TXOP上拉成3.3v,所以这些脉冲的偏置电压是3.3v。

5、  经过隔离变压器之后,TX+、TX-都变成类似正弦波的波形。且正弦波上依然存在上述的脉冲。

 

 

准备用lm3s9b96dk示例测试。

上拉电阻是否有问题测试。

 

 


6月27日:

1、  使用不带操作系统的UDP工程,这个工程是LM3S8962上的。但是好像和9b96没什么区别。进入连接时,最后调用了low_level_transmit,这是最底层的函数。向MACDATA寄存器写数,先写到FIFO中。然后将MACTR寄存器中的使能发送位置1。但是用示波器网口外测量波形看不到数,还是昨天的一堆脉冲。

2、  我在上面得发数函数中作临时修改,数据变为0x55555555,外部函数添加while(1),还是测不到波形输出。

3、  回到昨天电压监测仪的工程,调用do_connect---- tcp_connect,建立连接需要想外发数,调用tcp_output----- tcp_output_segment----- ip_output----- ip_output_if,再下面就要调用ip_output_if_opt,但是前提IP_OPTIONS_SEND=1,即LWIP_IGMP = 1,需要把LWIP_UDP置1,最后调用netif->output,即初始化赋予的etharp_output。(昨天的数没发出去?)

4、  明天重新调试电压监测程序。

5、  明天可以先用PC机软件向板子发数,看看板子上接收到得波形是什么样子的。

 

 

疑问:

1、  经过隔离变压器之后的波形有时很奇怪,出现不规则波形。有时网线碰一下,波形就变化。与网线固定程度有关?

2、  把以太网口的初始化和任务全部关掉,以太网口管脚还是存在间断的一组脉冲,怀疑和硬件有关系?隔离变压器?

 

 

 

6月28日:

1、  针对昨天第5条做实验。用PC机软件向板子发数,软件提示没有连接对象,发送失败。分析原因,可能是在协议层没连接成功之前是不可以进行数据通信的。将软件设置成自发自收模式,软件显示收到数,但是网线上量不到波形。

2、  现在原因基本上是底层驱动,下面我先初始化以太网口,初始化结束后,不进入lwip规约任务,直接调用9B96的MAC层库函数向外发数,看9b96管脚是否有波形。

3、  第一次实验,在初始化、使能以太网口之后,调用EthernetPacketPut,返回值是发送的数据数目,函数返回值正确,但是以太网口还是测不到数据。脉冲依然存在。

4、  上面用的是示例的初始化函数,我自己根据芯片资料重新写一个简单的以太网口初始化,不带任务,只是以太网外设初始化,然后向外发数,看看是否能测到波形。测试结果管脚上没有数据。

 

 

疑问:

1、  可能是程序初始化不正确。

2、  可能是外部硬件电路有问题。想把隔离变压器去掉,再试试。

 

 

 

 

 

6月29日晚

1、  这次用的是以前的板子,没有任何以太网外部硬件。

2、  使能以太网发送中断,这个中断表明存放在TX FIFO的包已被成功发送。

3、  发数过程描述如下:先等待MACTR寄存器的NEWTX位变为0,NEWTX=1表示当前还有数据没发送完。然后往FIFO中填数据。最后将MACTR寄存器的NEWTX位置1。经过调试,可以检测到NEWTX确实被置为了1,并且保持了一段时间,这段时间是发送数据的时间。

4、  再调试,可以进入以太网中断服务程序,且获取当前以太网中断状态返回值正确。返回TXEMP对应标志,表示The packet wastransmitted and that the TX FIFO is empty。

5、  测量波形,与之前一样的效果。改变数据内容,改变发送间隔时间,波形没有显著变化。

6、  芯片资料中有LOOPBACK模式介绍,涉及MII接口,需要配置。

疑问:

1、  我的波形测量点是9B96的以太网两个输出端口。我用表笔的地接电源地,表笔头接TXON(或者TXOP)。不知道这样测量是否正确。

2、  我不确定这样的脉冲波形是否就是以太网特有的。

 

 

 

6月30日

1、  今天看资料,在双绞线链路上,如果没有数据传输,链路并不是一直空闲,而是不断的互相发送一种频率较低的脉冲信号,任何具有双绞线接口的以太网卡都能识别这种信号,如果再插入一些频率更低的脉冲,这些脉冲称为快速链路脉冲FLP(Fast Link Pulse),两端设备也能识别。于是,可以利用FLP进行少量的数据传输,达到自动协商的目的。这可能就是之前示波器测量出来的脉冲。

2、  根据9B96芯片资料中以太网控制器原理框图显示,以太网控制器与外界的数据收发过程要经过一个MIDX模块,这个MIDX模块的使用又和自协商、MII寄存器的配置有关系。之前测不到波形可能是因为自协商过程没有成功或者MII控制寄存器没有配置,导致内部数据从发送FIFO出去了,但是经过MDIX后却没有从管脚出来。

3、  自动协商是建立在双绞线以太网的一种底层机制上的,如果协商通过,网卡就把链路置为激活状态,可以开始传输数据了。如果不能通过,则该链路不能使用。

4、  那么就有两种解决方法,A、不使用自协商,将9b96设置成与PC机相同的固定传输模式,PC机的传输模式是什么呢?B、使用自协商,想办法使自协商(握手)过程成功。

5、  芯片资料显示,以太网控制器支持IEEE 802.3 标准中第28 条的自协商功能,可以在铜线电缆上执行10/100Mbps的操作。这个功能可以通过寄存器设置来使能。  复位后,自协商功能默认开启,MR0寄存器的ANEGEN位为高。软件可以通过写ANEGEN位禁止自协商功能。在自协商过程中MR4寄存器的内容通过快速链路脉冲编码发送给PHY的连接方。一旦自协商结束,MR31 寄存器的SPEED位就反映实际的速度。MR31寄存器的AUTODONE位指示自协商完成。通过置位MR0寄存器中的RANEG位也可重启自协商。

 

 

看资料的疑问:

1、  芯片资料显示,为了使MII接口正确工作,内部时钟必须被向下分频,使频率从系统时钟变为一个不大于2.5MHz的频率。以太网初始化时需要重新配时钟吗?

2、  在100BASE-TX应用中,收发器采用5类非屏蔽双绞线(Cat-5 UTP);在10BASE-T应用中,收发器采用 3 类非屏蔽双绞线(Cat-3 UTP),5类线是否兼容3类线?即现在一般用的5类线、超5类线是否支持10BASE-T应用?

3、  芯片资料中P924,MDI/MDI -X配置的检测函数我们的工程应该用不到。

4、  我们配置的是MAC层的中断,没有配置PHY层的中断,PHY层的中断与MR29寄存器相关,比如自协商结束会触发PHY层中断。但是可以通过读MR29来知道是哪个中断。



总结:基本处于完全不会调状态,以太网的调试方法和串口的调试方法不一样,后来才知道。