Project

General

Profile

Работа с Ethernet (Си) » History » Version 8

krufter_multiclet, 04/22/2013 12:03 PM

1 1 krufter_multiclet
h1. Работа с Ethernet (Си) 
2 4 krufter_multiclet
3 4 krufter_multiclet
Рассмотрим простой пример по отправке одного пакета с заданным IP-адресом в виде широковещательной рассылки.
4 4 krufter_multiclet
Но сначала заметим, что настройка микросхемы, реализующей физический уровень Ethernet происходит программно.
5 4 krufter_multiclet
6 4 krufter_multiclet
На Си реализованы функции записи и чтения в регистры микросхемы, реализующей физический уровень Ethernet.
7 5 krufter_multiclet
8 5 krufter_multiclet
1) Функция записи в регистры PHY
9 5 krufter_multiclet
10 5 krufter_multiclet
<pre>
11 5 krufter_multiclet
void mdio_wr(int phy_addr, int reg, int data)
12 5 krufter_multiclet
</pre> 
13 5 krufter_multiclet
14 5 krufter_multiclet
phy_addr - адрес микросхемы PHY (по умолчанию 0x00)
15 5 krufter_multiclet
reg - номер регистра
16 5 krufter_multiclet
data - значение для установки в регистр
17 5 krufter_multiclet
18 5 krufter_multiclet
2) Функция чтения регистра PHY
19 5 krufter_multiclet
20 5 krufter_multiclet
<pre>
21 5 krufter_multiclet
int mdio_rd(int phy_addr, int reg)
22 5 krufter_multiclet
</pre>
23 5 krufter_multiclet
24 5 krufter_multiclet
phy_addr - адрес микросхемы PHY (по умолчанию 0x00)
25 5 krufter_multiclet
reg - номер регистра
26 5 krufter_multiclet
Функция возвращает 32 разрядное значение регистра
27 6 krufter_multiclet
28 6 krufter_multiclet
29 6 krufter_multiclet
Перейдём непосредственно к рассмотрению примеров отправки и приёма пакетов.
30 6 krufter_multiclet
31 7 krufter_multiclet
h2. а) Передача пакета по Ethernet
32 6 krufter_multiclet
33 8 krufter_multiclet
Перед передачей пакета необходимо учесть, что области размещения дескрипторов передачи и приёма должны быть выравнены на 1 килобайт.
34 8 krufter_multiclet
35 8 krufter_multiclet
 
36 6 krufter_multiclet
37 6 krufter_multiclet
38 6 krufter_multiclet