Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отправка пакетов через свитч RTL8305
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Fast Ethernet/Gigabit Ethernet/FibreChannel
shev77
Есть SoC под Linux со встроенным Ethernet портом, и кроме того, по интерфейсу MII, подключен свитч RTL8305.
Открывается сокет SOCK_RAW или SOCK_DGRAM и через него отправляются пакеты.
256 пакетов - пауза, 256 пакетов - пауза и т. д.

Со встроенным портом - нет проблем, я вижу все отправляемые пакеты.
С того который через свитч идут пакеты с номерами:
с 00 по 09,
с 41 по 4A,
с 82 по 8B,
с C3 по CC.
Т. е. десять пакетов проходят потом 50 не проходят.
sendto - ошибок не возвращает.
Подскажите куда копать? Спасибо.

int eth_Open()
{
int result = -1;

ether_fd = socket (AF_PACKET, SOCK_DGRAM, htons(ETH_P_ALL));

ether_haddr.sll_family = AF_PACKET;
ether_haddr.sll_protocol = htons(ETH_P_ALL);
ether_haddr.sll_ifindex = ethatpifc_fd;

ether_haddr.sll_addr[0] = 0x00;
ether_haddr.sll_addr[1] = 0x10;
ether_haddr.sll_addr[2] = 0xC6;
ether_haddr.sll_addr[3] = 0xA5;
ether_haddr.sll_addr[4] = 0xEB;
ether_haddr.sll_addr[5] = 0x68;
ether_haddr.sll_halen = 6;

result = 0;
return result;
}

int eth_Send(unsigned char *buffer, int len)
{
int result = -1;

if ((ether_fd != -1) && (buffer != NULL) && (len > 0))
{
result = sendto(ether_fd, buffer, len, 0, (struct sockaddr *)&ether_haddr, sizeof(ether_haddr));
}
if (result == -1)
{
printf("eth_Send.c/sendto() ERR returns %d (%d/%s)\r\n", result, errno, strerror(errno));
}
else result = 0;

return result;
}
Rst7
Давайте схему и процедуру конфигурирования RTL через MDI (если есть). Будем смотреть, похоже, что что-то не так c Flow Control
shev77
О! Спасибо, что не молчите!!!

Значит так я делаю вот что:
for (phy = 0; phy <= 4; phy++) {
ethatp_IfcReadExtPhyReg(phy, MII_BMCR, &reg_val);
reg_val &= (~(EPHY_AUTONEGOTIATE | EPHY_100MBIT | EPHY_FULLDUPLEX));
reg_val |= EPHY_FULLDUPLEX;
ethatp_IfcWriteExtPhyReg(phy, MII_BMCR, reg_val);
}
отключаю AUTONEGOTIATE для всех портов, ставлю скорость 10.

ethatp_IfcWriteExtPhyReg(6, 22, 0x8F3F);

и кроме того пишу волшебное число 0x8F3F (это было еще до меня) в регистр 22 для PHY 6 это как я понимаю для того порта, куда подключен процессор.
даташит я прикрепил (на самом деле RTL8306).
Схему вышлю чуть позже.
shev77
Цитата(Rst7 @ Jul 30 2008, 14:58) *
Давайте схему и процедуру конфигурирования RTL через MDI (если есть). Будем смотреть, похоже, что что-то не так c Flow Control

Спасибо, уважаемый Rst7 за ценное замечание, все заработало!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.