Есть самодельная плата с Cyclone IV + 88E1111, соединены через GMII/RGMII (разведены все 8 линий, т.е. можно выбрать GMII или RGMII).
Что работает:
Работает
приём (вижу в Signal Tap правильные посылки и байты).
Работает copper line loopback - на сетевой карте ПК вижу отправленные пакеты продублированы - это работает платка и 88E1111 возвращает пакеты в целости.
Стало быть линия ПК-PHY работает, до ПЛИС данные долетают.
А вот какая проблема: не отправляет! Вообще!
MAC interface loopback если включить - отправка есть а обратно не прилетает, собственно как и из линии...
Кварц стоит на 25 МГц от материнской платы выдернул - чтобы уж точно кварц подходил - ведь в материнке же он работал! Да и у меня вроде работает. Говорят может не отправлять если кварц неподходящей стабильности.
Пошел я дальше: сделал Nios 2 процессор в этой ПЛИСине, сделал программно "serial management interface" и выкачал через MDC/MDIO регистры. Они у меня получились такие:
Код
00: 0x0000 = 0000_0000_0000_0000
01: 0x796D = 0111_1001_0110_1101
02: 0x0141 = 0000_0001_0100_0001
03: 0x0CC2 = 0000_1100_1100_0010
04: 0x0DE1 = 0000_1101_1110_0001
05: 0xCDE1 = 1100_1101_1110_0001
06: 0x000D = 0000_0000_0000_1101
07: 0x2001 = 0010_0000_0000_0001
08: 0x43D7 = 0100_0011_1101_0111
09: 0x0F00 = 0000_1111_0000_0000
10: 0x7C00 = 0111_1100_0000_0000
11: 0x0000 = 0000_0000_0000_0000
12: 0x0000 = 0000_0000_0000_0000
13: 0x0000 = 0000_0000_0000_0000
14: 0x0000 = 0000_0000_0000_0000
15: 0x3000 = 0011_0000_0000_0000
16: 0x0068 = 0000_0000_0110_1000
17: 0xAC40 = 1010_1100_0100_0000
18: 0x0000 = 0000_0000_0000_0000
19: 0x0000 = 0000_0000_0000_0000
20: 0x0C71 = 0000_1100_0111_0001 <- младшая единичка говорит что передатчик включен (1 = Transmitter Enable)
21: 0x0000 = 0000_0000_0000_0000
22: 0x0000 = 0000_0000_0000_0000
23: 0x0000 = 0000_0000_0000_0000
24: 0x4100 = 0100_0001_0000_0000
25: 0x0000 = 0000_0000_0000_0000
26: 0x000A = 0000_0000_0000_1010
27: 0x808F = 1000_0000_1000_1111
28: 0x0000 = 0000_0000_0000_0000
29: 0x0000 = 0000_0000_0000_0000
30: 0x0000 = 0000_0000_0000_0000
31: 0x0000 = 0000_0000_0000_0000
Код
int main()
{
int stage = 0;
while(true)
{
if(stage == 0)
{
printf("!!!\n\r", stage);
smi_write(0, 0, 0x0040);
smi_write(0, 20, 0x0C71);
unsigned char r0 = smi_read(0, 0);
smi_write(0, 0, r0 & (1<<15));
}
for(int reg = 0; reg < 32; reg++)
{
unsigned short data = smi_read(0, reg);
printf("%02d: 0x%04X = ", reg, data);
print_bin2(data, 16);
printf("\n\r");
}
printf("----- %d\n\r", stage);
for(int i = 0; i < (ALT_CPU_CPU_FREQ / 5); i++);
stage++;
if(stage > 10) stage = 0;
}
return 0;
}
Тут много кто с этим PHY работает (88E1111), какие вы регистры настраиваете и какими значениями?
Меня интересует режим только 1 гигабит, без возможности 10/100, по
меди 4 пары.
Сообщение отредактировал AVR - May 16 2016, 18:22