在配套给的ETH-GMA例程中,我在上面添加了UIP协议栈,出现了接收的时候内容是准确的,但是多了几个字节。发送的时候内容是完全错误。判定发送完和接收完的标志位在哪里可以定义呢?看了贵公司提供的子程序库,好像没有明确相关定义。
顶一下,有人知道吗
您好,
收数据多几个字节可以看一下是否是MAC帧的校验,单片实际收到数据可能会和wireshark中抓包有几个字节的差距
代码中两个判断寄存器的标志位是底层完成发送,实际代码业务逻辑上层收发是根据enable_send来控制的,是一个比较简单的发送逻辑。
发送数据的DMA地址必须是在RAMX范围内的数据,目前代码实际控制缓冲区建议修改发送和接收描述符数量宏定义来实现:
感谢贵公司的回复。问一下例程里边的接收完成中断,是接收完一帧数据还是接收完全部数据才把enable_send置0x03。
还有想问一下,CH565的RAMX是可以配置成32/64/96KB的,我配置了相关寄存器#define SZ_RAMX 0x00018000,但编译窗口显示RAMX还是32KB。
我看了下驱动例程中的enable_send这个全局变量仅仅只是为了让主循环中的发送能进行下去的一个,可以认为是用户自定义的标志位,实际使用中可以删去的。你可以一直调用发送函数发送数据,因为处理器所做的也只是把你的数据挂到发送队列上,当R32_ETH_DMACHTBAR这个寄存器的值等于你刚才写数据的缓冲区时,才表示MAC正在发送这帧数据。一般情况下你不用管发送完成中断,你的发送频率一般不会超过MAC的发送能力。
RAMX的大小确实是可以配的,不过是在LD文件里配的。记得下载时在ISP工具上勾选对应的硬件配置。
感谢回复,RAMX大小以及改成96KB。有个问题想请假一下,CH565demo板上的以太网接口芯灯,要怎么去配置,才会在有数据收发的时候亮起来。
您好,网口灯是PHY芯片控制的。
只需要我们正确配置PHY,正常建立链接之后网口灯就能正常亮灭