DE2-115 以太网通信之一88E1111网卡接收PC数据

想利用手头上的DE2-115 写一个关于以太网通信的驱动,经过了这么多天的实验调试终于有了一些认识。

1、我在观察网卡发送数据与接收数据的过程中发现,我从fpga上的一个网卡发送数据,然后另一个网卡接收数据,接收到的数据前面会有55h这8bit的数据。我从PC上发送数据,用fpga上的网卡接收数据,那么在接收到的数据前面会有55h,55h,55h,55h,55h,55h,55h,5dh这64bit的数据。那么如果55h这8bit数据是PHY发送时自动添加那么从PC上接收到的最后应该是55而不应该是5d。那么只能是网卡在接收的时候自动添加的55h这8bit位。那剩下的56bit应该是自己添加在数据中发送的。

2、我用signaltap ii设置的采样频率是50Mh,而数据的带宽是100Mhz。当我用小兵以太网测试仪设置的发送频率为1000000/次时,发现siganltap ii 中rx_data的数据很久才会变化,其余时刻都是零,但是用led通过对接收数据进行观察时就符合发送的频率,那么signal tap ii 很长时间观察不到数据的情景应该和时钟的设置有关。

3、有一段时间我从PC上发送数据,然后fpga上接收的数据,一段数据的个别位发生错误。等我把板子上两个phy的配置都设置正确时。就能正确的接收数据了。

4、signaltap 接收到的PC数据高四位与第四位颠倒,比如说如果发送的数据是56h 75h 83h 那么接收到的数据就是65h 57h 38h。说明数据在发送的过程中高先发送低四位后发送高四位。

5、88E1111 采用100M ,全双工 能从Pc接收数据的寄存器设置。

a、PHY的物理地址为10000,板子连接JP1的23.

b、读寄存器以及写寄存器。读寄存器主要是为了观察PHY配置是否正确。在调试的过程中正确的读寄存器非常重要。

代码如下

 1 if(flag) begin
 2         case(mdc_num)
 3           0:begin     RST_N<=0;mdio_reg<=mdio_reg+1;if(mdio_reg&32‘hffffffff==32‘hffffffff) begin  RST_N<=1; mdc_num<=1;end               else mdc_num<=0;end
 4           1:begin mdio_reg<=96‘hffff_ffff__585a__0000_ffff_ffff;mdc_num<=2;end //选择page0  copper
 5           2:begin mdc_count<=mdc_count+1;
 6           if(mdc_count<96)begin mdio<=mdio_reg[95]; wr_rd<=1;mdio_reg<=mdio_reg<<1;mdc_num<=2;end
 7                       else begin  mdc_num<=5;mdc_count<=0;end end
11           5:begin mdio_reg<=96‘hffff_ffff__5812_0101_ffff_ffff;mdc_num<=6;end //4 100full duplex,802.3
12           6:begin mdc_count<=mdc_count+1; if(mdc_count<96)begin mdio<=mdio_reg[95]; wr_rd<=1;mdio_reg<=mdio_reg<<1;mdc_num<=6;end
14                       else begin   mdc_num<=9;mdc_count<=0;end end
             9:begin mdio_reg<=96‘hffff_ffff__5826__0400_ffff_ffff;mdc_num<=10;end //9自动主从,multi port device
19           10:begin mdc_count<=mdc_count+1;  if(mdc_count<96)begin mdio<=mdio_reg[95]; wr_rd<=1;mdio_reg<=mdio_reg<<1;mdc_num<=10;end                          else begin  mdc_num<=13;mdc_count<=0;end end
22           13:begin mdio_reg<=96‘hffff_ffff__5842__0068_ffff_ffff;mdc_num<=14;end //16  power up
25           14:begin mdc_count<=mdc_count+1; if(mdc_count<96)begin mdio<=mdio_reg[95]; wr_rd<=1;mdio_reg<=mdio_reg<<1;mdc_num<=14;end                else begin  mdc_num<=17;mdc_count<=0;end end
2        17:begin mdio_reg<=96‘hffff_ffff__5852_9051_ffff_ffff;mdc_num<=18;end //9051
31           18:begin mdc_count<=mdc_count+1;if(mdc_count<96)begin mdio<=mdio_reg[95]; wr_rd<=1;mdio_reg<=mdio_reg<<1;mdc_num<=18;end                  else begin   mdc_num<=19;mdc_count<=0;end end
34           19:begin mdio_reg<=96‘hffff_ffff__5802_a100_ffff_ffff;mdc_num<=20;end
35           20:begin mdc_count<=mdc_count+1;  if(mdc_count<96)begin mdio<=mdio_reg[95]; wr_rd<=1;mdio_reg<=mdio_reg<<1;mdc_num<=20;end                  else begin mdc_num<=21;mdc_count<=0 ;end  end
38           21:begin mdc_count<=mdc_count+1;if(mdc_count<32)begin mdio<=1‘b1; wr_rd<=1;mdc_num<=21;end
46              else begin flag<=0;wr_rd<=0;end  end
47           endcase 

      end
48        else
49             begin
50
51                    case(timenum)
52                          0:begin mdio_reg<=96‘b11111111111111111111111111111111_01101000010001z1_zzzzzzzzzzzzzzzz_11111111111111111111111111111111;timenum<=1;wr_rd<=1;mdc_count<=0;end
53                          1:begin mdc_count<=mdc_count+1; if(mdc_count<48)begin mdio<=mdio_reg[95]; mdio_reg<=mdio_reg<<1;timenum<=1;end else begin wr_rd<=0;timenum<=2;end end
54                           2:begin data1[15]<=mdio_in;timenum<=3;end
55                           3:begin data1[14]<=mdio_in;timenum<=4;end
56                           4:begin data1[13]<=mdio_in;timenum<=5;end
57                           5:begin data1[12]<=mdio_in;timenum<=6;end
58                           6:begin data1[11]<=mdio_in;timenum<=7;end
59                           7:begin data1[10]<=mdio_in;timenum<=8;end
60                           8:begin data1[9]<=mdio_in;timenum<=9;end
61                           9:begin data1[8]<=mdio_in;timenum<=10;end
62                           10:begin data1[7]<=mdio_in;timenum<=11;end
63                           11:begin data1[6]<=mdio_in;timenum<=12;end
64                           12:begin data1[5]<=mdio_in;timenum<=13;end
65                           13:begin data1[4]<=mdio_in;timenum<=14;end
66                           14:begin data1[3]<=mdio_in;timenum<=15;end
67                           15:begin data1[2]<=mdio_in;timenum<=16;end
68                           16:begin data1[1]<=mdio_in;timenum<=17;end
69                          17:begin data1[0]<=mdio_in;mdc_count<=1;timenum<=18;end
70                           18:begin mdc_count<=mdc_count+1;wr_rd<=1;mdio<=1;if(mdc_count==7‘h3f)mdc_count<=0;timenum<=0;  end
71                     endcase
72
75             end 
时间: 2024-12-13 00:56:11

DE2-115 以太网通信之一88E1111网卡接收PC数据的相关文章

第39章 ETH—Lwip以太网通信

第39章     ETH-Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 互联网技术对人类社会的影响不言而喻.当今大部分电子设备都能以不同的方式接入互联网(Internet),在家庭中PC常见的互联网接入方式是使用路由器(Router)组建小型局域网(LAN),利用互联网专线或者调制调解器(modem)经过电话线网络,连接到互联网服务提供商(ISP),由互联

S7-200系列PLC与WINCC以太网通信CP243i的实例

S7-200系列PLC与WINCC以太网通信CP243i的实例 ----选用大连德嘉国际电子www.dl-winbest.cn的CP243i作为连接S7-200的PPI口转以太网RJ45的接口转换器.如下图所示: 一.   硬件连接: 将CP243i的两端分别与S7-200的PPI口和以太网线连接(上图使用的是交叉网线,如果中间加交换机就要用直连网线,注:我们平时用的都是直连型网线) 二.   监控计算机的软件设置: a.OPC—西门子PC_Access的设置: S7-200一般都是通过PC_A

基于tcp/ip以太网通信实现0-5v,4-20ma模拟量AI采集以及模拟量AO输出控制-综科智控

ZKA-XXX-ETH 使 用 说 明 书 [ ]绝密 [ ]NDA [X]公开 版本历史 版本 修订日期 修订人 修订内容 1.0 2014-10-13 综科智控 1.0初版正式发布 1.1 2014-12-07 综科智控 填图 1.2 2015-03-01 综科智控 更新配置 1.3 2015-08-13 综科智控 修正组网图 1.4 2015-09-28 综科智控 增加ZKA型号 1.5 2016-05-22 综科智控 增加附件 1.6 2016-11-01 综科智控 修改组网图 1.7

C#串口通信—向串口发送数据,同步接收返回数据

最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接收返回数据的方法,不使用DataReceived事件.经过测试,可以正常使用(不支持多线程调用). 一.Machine类 1.Machine类有一个静态变量,定义如下: private static SerialPort serialPort = null; 2.向串口发送数据,同步接收返回数据的方

以太网通信

实验以太网通信 实验目标:以太网通信 实验拓扑: 实验步骤: 一.配置计算机IP地址 二.在交换机端口上创建vlan2.3,并将f0/1-2端口加入到vlan2,将f0/3-4端口加入到vlan3中 三.在switch3交换机端口上创建vlan2.3,并将f0/1-2端口加入到vlan2,将f0/3-4端口加入到vlan3中 四.将f0/22-24设置为Trunk模式,创建以太网通道channel-group1 五.将f0/22-24设置为Trunk模式,创建以太网通道channel-group

单片机第12课:串口通信---中断方式--从计算机接收数据

JP3和P0口连接.用中断的方式来接收数据. #include<reg51.h> //声明初始化子函数 void initSer(); void main() { //初始化子函数调用 initSer(); while(1) { //一句话都没有 } } //定义初始化子函数 void initSer() { //定时器工作方式为2 TMOD = 0x20; //波特率9600,SMOD=0 TH1 = 0xfd; TL1 = 0xfd; //启动定时器 TR1 = 1; //串口工作方式1

TCP通信实现对接硬件发送与接收十六进制数据 &amp; int与byte的转换原理 &amp; java中正负数的表示

今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十六进制的字符串转换成字节数组 * * @param hexString * @return */ public static byte[] hexStrToByteArrs(String hexString) { if (StringUtils.isEmpty(hexString)) { retur

微信小程序UDP通信,注意点 接收 onMessage 收到的message是ArrayBuffer缓冲,不能直接输出,要另转String处理

1.WXML 页面代码 <!--index.wxml--> <view class="container"> <view class="usermotto"> <text class="user-motto">{{motto}}</text> </view> <view class="alllightbtn"> <view class=&

stm32RS485串口通信——中断接收发送数据

功能:通过PC机的串口调试助手发送数据给串口A,串口B接收到串口A发送的数据,再由串口B将接收到的数据返回给PC机的串口调试助手. PC->串口A->串口B->PC. 实验平台:stm32f407 /********************************************************************* 本平台具有六个串口: com1  485 com2 com3  232 需一个管脚控制DTU com4 485 com5  调试串口  TTL com6