SPI Ethernet Library
ENC28J60 - это автономный контроллер Ethernet со стандартным последовательным периферийным интерфейсом (SPI). Он предназначен для использования в качестве сетевого интерфейса Ethernet для любого контроллера, оснащенного SPI.
ENC28J60 соответствует всем спецификациям IEEE 802.3. Он включает в себя ряд схем фильтрации пакетов для ограничения входящих пакетов. Он также обеспечивает внутренний DMA-модуль для быстрой передачи данных и аппаратной поддержки вычислений контрольной суммы IP. Связь с контроллером хоста осуществляется через два вывода прерываний и SPI со скоростью передачи данных до 10 Мбит / с. Два выделенных контакта используются для индикации светодиодной линии и сетевой активности.
Эта библиотека предназначена для упрощения обработки базового оборудования (ENC28J60). Он работает с любыми ARM с интегрированным SPI и более 4 Кбайт памяти ROM. Частота от 38 до 40 МГц рекомендуется получать от 8 до 10 МГц часов SPI, иначе ARM должен быть синхронизирован по тактовому выходу ENC28J60 из-за его силиконовой ошибки в аппаратных средствах SPI. Если вы попытаетесь снизить тактовую частоту ARM, может возникнуть проблема с загрузкой или пропуском платы.
Библиотека SPI Ethernet поддерживает:
- IPv4 протокол.
- ARP запросы.
- ICMP эхо-запросы.
- UDPзапросы.
- TCP запросы (без стека, без обновления пакета).
- ARP клиент с кешем.
- DNS клиент.
- UDP клиент.
- DHCP клиент.
- пакетная фрагментация не поддерживается.
- Глобальная переменная библиотеки SPI_Ethernet_userTimerSec используется для отслеживания времени для всех клиентских реализаций (ARP, DNS, UDP и DHCP). Пользователь несет ответственность за увеличение этой переменной каждую секунду в своем коде, если используется какой-либо из клиентов.
- Для продвинутых пользователей есть блок __EthEnc28j60Private.mpas в папке Uses компилятора с описанием всех подпрограмм и глобальных переменных, относящихся к пользователю, реализованных в библиотеке SPI Ethernet.
- Соответствующий аппаратный SPI-модуль должен быть инициализирован перед использованием любой из подпрограмм библиотеки SPI Ethernet. См. также SPI Library.
- Для MCU с несколькими модулями SPI их можно инициализировать, а затем переключить с помощью процедуры SPI_Set_Active ().
Дерево зависимостей библиотеки
Внешние зависимости библиотеки SPI Ethernet
Stellaris
Внешние зависимости o Следующие переменные должны быть определены во всех проектах с использованием библиотеки SPI Ethernet: f Библиотека Ethernet SPI | Описание: | Примеры: |
---|---|---|
var SPI_Ethernet_CS : sbit; sfr; external; |
ENC28J60 chip select pin. | var SPI_Ethernet_CS : sbit at GPIO_PORTA_DATA.B0; |
var SPI_Ethernet_RST : sbit; sfr; external; |
ENC28J60 reset pin. | var SPI_Ethernet_RST : sbit at GPIO_PORTA_DATA.B1; |
var SPI_Ethernet_CS_Direction : sbit; sfr; external; |
Direction of the ENC28J60 chip select pin. | var SPI_Ethernet_CS_Direction : sbit at GPIO_PORTA_DIR.B0; |
var SPI_Ethernet_RST_Direction : sbit; sfr; external; |
Direction of the ENC28J60 reset pin. | var SPI_Ethernet_RST_Direction : sbit at GPIO_PORTA_DIR.B1; |
MSP432
Следующие переменные должны быть определены во всех проектах с использованием библиотеки SPI Ethernet: | Описание: | Примеры: |
---|---|---|
var SPI_Ethernet_CS : sbit; sfr; external; |
ENC28J60 chip select pin. | var SPI_Ethernet_CS : sbit at DIO_P6OUT.B0; |
var SPI_Ethernet_RST : sbit; sfr; external; |
ENC28J60 reset pin. | var SPI_Ethernet_RST : sbit at DIO_P6OUT.B1; |
var SPI_Ethernet_CS_Direction : sbit; sfr; external; |
Direction of the ENC28J60 chip select pin. | var SPI_Ethernet_CS_Direction : sbit at DIO_P6DIR.B0; |
var SPI_Ethernet_RST_Direction : sbit; sfr; external; |
Direction of the ENC28J60 reset pin. | var SPI_Ethernet_RST_Direction : sbit at DIO_P6DIR.B1; |
STM32
Следующие переменные должны быть определены во всех проектах с использованием библиотеки SPI Ethernet: | Описание: | Примеры: |
---|---|---|
var SPI_Ethernet_CS : sbit; sfr; external; |
ENC28J60 chip select pin. | var SPI_Ethernet_CS : sbit at GPIOB_ODR.B0; |
var SPI_Ethernet_RST : sbit; sfr; external; |
ENC28J60 reset pin. | var SPI_Ethernet_RST : sbit at GPIOB_ODR.B1; |
CEC1x02
Следующие переменные должны быть определены во всех проектах с использованием библиотеки SPI Ethernet: | Описание: | Примеры: |
---|---|---|
var SPI_Ethernet_CS : sbit; sfr; external; |
ENC28J60 chip select pin. | var SPI_Ethernet_CS : sbit at GPIO_OUTPUT_PIN_146_bit; |
var SPI_Ethernet_RST : sbit; sfr; external; |
ENC28J60 reset pin. | var SPI_Ethernet_RST : sbit at GPIO_OUTPUT_PIN_027_bit; |
Следующие переменные должны быть определены во всех проектах с использованием библиотеки SPI Ethernet: | Описание: | Примеры: |
---|---|---|
function SPI_Ethernet_UserTCP(var remoteHost : array[4] of byte, remotePort : word, localPort : word, reqLength : word) var flags: TEthPktFlags) : word; |
Обработчик запросов TCP. | Обратитесь к примеру библиотеки в нижней части этой страницы для реализации кода. |
function SPI_Ethernet_UserUDP(var remoteHost : array[4] of byte, remotePort : word, destPort : word, reqLength : word, var flags: TEthPktFlags) : word; |
Обработчик запросов UDP. | Обратитесь к примеру библиотеки в нижней части этой страницы для реализации кода. |
Библиотечные процедуры
- SPI_Ethernet_Init
- SPI_Ethernet_Enable
- SPI_Ethernet_Disable
- SPI_Ethernet_doPacket
- SPI_Ethernet_putByte
- SPI_Ethernet_putBytes
- SPI_Ethernet_putString
- SPI_Ethernet_putConstString
- SPI_Ethernet_putConstBytes
- SPI_Ethernet_getByte
- SPI_Ethernet_getBytes
- SPI_Ethernet_UserTCP
- SPI_Ethernet_UserUDP
- SPI_Ethernet_setUserHandlers
- SPI_Ethernet_getIpAddress
- SPI_Ethernet_getGwIpAddress
- SPI_Ethernet_getDnsIpAddress
- SPI_Ethernet_getIpMask
- SPI_Ethernet_confNetwork
- SPI_Ethernet_arpResolve
- SPI_Ethernet_sendUDP
- SPI_Ethernet_dnsResolve
- SPI_Ethernet_initDHCP
- SPI_Ethernet_doDHCPLeaseTime
- SPI_Ethernet_renewDHCP
SPI_Ethernet_Init
Прототип |
procedure SPI_Ethernet_Init(mac: ^byte; ip: ^byte; fullDuplex: byte); |
---|---|
Описание |
Это процедура модуля MAC. Он инициализирует контроллер ENC28J60. Эта функция внутренне разделена на 2 части, чтобы помочь компоновщику при нехватке памяти. Параметры контроллера ENC28J60 (параметры, не упомянутые здесь, установлены на значение по умолчанию):
|
Параметры |
|
Возвращает |
Ничего. |
Требует |
Перед использованием этой функции необходимо определить внешние зависимости библиотеки от верхней части страницы. |
Пример |
Stellaris// mE ehternet NIC pinout var SPI_Ethernet_Rst : sbit at GPIO_PORTA_DATA.B0; SPI_Ethernet_CS : sbit at GPIO_PORTA_DATA.B1; SPI_Ethernet_Rst_Direction : sbit at GPIO_PORTA_DIR.B0; SPI_Ethernet_CS_Direction : sbit at GPIO_PORTA_DIR.B1; // end ethernet NIC definitions const SPI_Ethernet_HALFDUPLEX = 0; const SPI_Ethernet_FULLDUPLEX = 1; var myMacAddr : array[6] of byte; // my MAC address myIpAddr : array[4] of byte; // my IP addr ... myMacAddr[0] := 0x00; myMacAddr[1] := 0x14; myMacAddr[2] := 0xA5; myMacAddr[3] := 0x76; myMacAddr[4] := 0x19; myMacAddr[5] := 0x3F; myIpAddr[0] := 192; myIpAddr[1] := 168; myIpAddr[2] := 1; myIpAddr[3] := 60; SPI1_Init(); SPI_Ethernet_Init(myMacAddr, myIpAddr, SPI_Ethernet_FULLDUPLEX); MSP432// mE ehternet NIC pinout var SPI_Ethernet_Rst : sbit at DIO_P6OUT.B0; SPI_Ethernet_CS : sbit at DIO_P6OUT.B1; SPI_Ethernet_Rst_Direction : sbit at DIO_P6DIR.B0; SPI_Ethernet_CS_Direction : sbit at DIO_P6DIR.B1; // end ethernet NIC definitions const SPI_Ethernet_HALFDUPLEX = 0; const SPI_Ethernet_FULLDUPLEX = 1; var myMacAddr : array[6] of byte; // my MAC address myIpAddr : array[4] of byte; // my IP addr ... myMacAddr[0] := 0x00; myMacAddr[1] := 0x14; myMacAddr[2] := 0xA5; myMacAddr[3] := 0x76; myMacAddr[4] := 0x19; myMacAddr[5] := 0x3F; myIpAddr[0] := 192; myIpAddr[1] := 168; myIpAddr[2] := 1; myIpAddr[3] := 60; SPI1_Init(); SPI_Ethernet_Init(myMacAddr, myIpAddr, SPI_Ethernet_FULLDUPLEX); STM32// mE ehternet NIC pinout var SPI_Ethernet_Rst : sbit at GPIOB_ODR.B0; SPI_Ethernet_CS : sbit at GPIOB_ODR.B1; // end ethernet NIC definitions const SPI_Ethernet_HALFDUPLEX = 0; const SPI_Ethernet_FULLDUPLEX = 1; var myMacAddr : array[6] of byte; // my MAC address myIpAddr : array[4] of byte; // my IP addr ... myMacAddr[0] := 0x00; myMacAddr[1] := 0x14; myMacAddr[2] := 0xA5; myMacAddr[3] := 0x76; myMacAddr[4] := 0x19; myMacAddr[5] := 0x3F; myIpAddr[0] := 192; myIpAddr[1] := 168; myIpAddr[2] := 1; myIpAddr[3] := 60; SPI3_Init_Advanced(_SPI_FPCLK_DIV16, _SPI_MASTER or _SPI_8_BIT or _SPI_CLK_IDLE_LOW or _SPI_FIRST_CLK_EDGE_TRANSITION or _SPI_MSB_FIRST or _SPI_SS_DISABLE or _SPI_SSM_ENABLE or _SPI_SSI_1, @_GPIO_MODULE_SPI3_PB345); SPI_Ethernet_Init(myMacAddr, myIpAddr, SPI_Ethernet_FULLDUPLEX); CEC1x02// mE ehternet NIC pinout var SPI_Ethernet_Rst : sbit at GPIO_OUTPUT_PIN_027_bit; SPI_Ethernet_CS : sbit at GPIO_OUTPUT_PIN_146_bit; // end ethernet NIC definitions const SPI_Ethernet_HALFDUPLEX = 0; const SPI_Ethernet_FULLDUPLEX = 1; var myMacAddr : array[6] of byte; // my MAC address myIpAddr : array[4] of byte; // my IP addr ... myMacAddr[0] := 0x00; myMacAddr[1] := 0x14; myMacAddr[2] := 0xA5; myMacAddr[3] := 0x76; myMacAddr[4] := 0x19; myMacAddr[5] := 0x3F; myIpAddr[0] := 192; myIpAddr[1] := 168; myIpAddr[2] := 1; myIpAddr[3] := 60; SPI0_Init_Advanced(1000000,_SPI_MSB_FIRST,_SPI_SAMPLE_DATA_FALLING_EDGE OR _SPI_CLK_IDLE_LOW); SPI_Ethernet_Init(myMacAddr, myIpAddr, SPI_Ethernet_FULLDUPLEX); |
Примечания |
Нет. |
SPI_Ethernet_Enable
Прототип |
procedure SPI_Ethernet_Enable(enFlt : byte); |
||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Описание |
Это процедура модуля MAC. Эта процедура обеспечивает соответствующий сетевой трафик на модуле ENC28J60 с помощью его принимающих фильтров (одноадресная, многоадресная, широковещательная, crc). Конкретный тип сетевого трафика будет включен, если установлен соответствующий бит входного параметра этой процедуры. Таким образом, одновременно можно включить более одного типа сетевого трафика. Для этой цели предопределенные константы библиотеки (см. Таблицу ниже) могут быть ORed для формирования соответствующего входного значения. Эта расширенная фильтрация, доступная в модуле ENC28J60, такая как Pattern Match, Magic Packet и Hash Table, не может быть включена этой процедурой. Кроме того, все фильтры, кроме CRC, включенные с этой подпрограммой, будут работать в режиме OR, что означает, что пакет будет принят, если любой из разрешенных фильтров примет его. Эта процедура изменяет конфигурацию фильтра приема на лету. Это никоим образом не будет препятствовать включению / отключению логики приема / передачи или любой другой части модуля ENC28J60. Модуль ENC28J60 должен быть правильно настроен с помощью процедуры SPI_Ethernet_Init. |
||||||||||||||||||||||||||||||||||||
Параметры |
|
||||||||||||||||||||||||||||||||||||
Возвращает |
Ничего. |
||||||||||||||||||||||||||||||||||||
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
||||||||||||||||||||||||||||||||||||
Пример |
SPI_Ethernet_Enable(_SPI_Ethernet_CRC or _SPI_Ethernet_UNICAST); // включить проверку CRC и одноадресный трафик
|
||||||||||||||||||||||||||||||||||||
Примечания |
Эта расширенная фильтрация, доступная в модуле ENC28J60, такая как Pattern Match, Magic Packet и Hash Table, не может быть включена этой процедурой. Кроме того, все фильтры, кроме CRC, включенные с этой подпрограммой, будут работать в режиме OR, что означает, что пакет будет принят, если любой из разрешенных фильтров примет его. Эта процедура изменяет конфигурацию фильтра приема на лету. Это никоим образом не будет препятствовать включению / отключению логики приема / передачи или любой другой части модуля ENC28J60. Модуль ENC28J60 должен быть правильно настроен с помощью процедуры SPI_Ethernet_Init. |
SPI_Ethernet_Disable
Прототип |
procedure SPI_Ethernet_Disable(disFlt : byte); |
||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Описание |
Это процедура модуля MAC. Эта процедура отключает соответствующий сетевой трафик на модуле ENC28J60 с помощью его фильтров приема (одноадресная, многоадресная, широковещательная, crc). Конкретный тип сетевого трафика будет отключен, если установлен соответствующий бит входного параметра этой процедуры. Таким образом, одновременно можно отключить несколько типов сетевого трафика. Для этой цели предопределенные константы библиотеки (см. Таблицу ниже) могут быть ORed для формирования соответствующего входного значения. |
||||||||||||||||||||||||||||||||||||
Параметры |
|
||||||||||||||||||||||||||||||||||||
Возвращает |
Ничего. |
||||||||||||||||||||||||||||||||||||
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
||||||||||||||||||||||||||||||||||||
Пример |
SPI_Ethernet_Disable(_SPI_Ethernet_CRC or _SPI_Ethernet_UNICAST); // disable CRC checking and Unicast traffic |
||||||||||||||||||||||||||||||||||||
Примечания |
Расширенная фильтрация доступна в модуле Эта процедура изменяет конфигурацию фильтра приема на лету. Это никоим образом не будет препятствовать включению / отключению логики приема / передачи или любой другой части модуля |
SPI_Ethernet_doPacket
Прототип |
function SPI_Ethernet_doPacket() : byte; |
---|---|
Описание |
Это процедура модуля MAC. Он обрабатывает следующий полученный пакет, если таковой существует. Пакеты обрабатываются следующим образом:
|
Параметры |
Нет. |
Возвращает |
|
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
while true do
begin
...
SPI_Ethernet_doPacket(); // обрабатываемые принятые пакеты
...
end;
|
Примечания |
SPI_Ethernet_doPacket необходимо вызывать как можно чаще в коде пользователя. |
SPI_Ethernet_putByte
Прототип |
procedure SPI_Ethernet_putByte(v : byte); |
---|---|
Описание |
Это процедура модуля MAC. Он хранит один байт в адресе, указанном текущим указателем записи ENC28J60 (EWRPT). |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var data : byte; ... SPI_Ethernet_putByte(data); // put an byte into ENC28J60 buffer |
Примечания |
Нет. |
SPI_Ethernet_putBytes
Прототип |
procedure SPI_Ethernet_putBytes(ptr : ^byte; n : word); |
---|---|
Описание |
Это процедура модуля MAC. Он хранит запрошенное количество байтов в ОЗУ ENC28J60, начиная с текущего местоположения указателя записи ENC28J60 (EWRPT). |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var
buffer : array[17] of byte;
...
buffer := 'mikroElektronika';
...
SPI_Ethernet_putBytes(buffer, 16); // помещает массив RAM в буфер ENC28J60
|
Примечания |
Нет. |
SPI_Ethernet_putConstBytes
Прототип |
procedure SPI_Ethernet_putConstBytes(const ptr : ^byte; n : word); |
---|---|
Описание |
Это процедура модуля MAC. Он хранит запрошенное количество const-байтов в ОЗУ ENC28J60, начиная с текущего местоположения указателя записи ENC28J60 (EWRPT). |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
const
buffer : array[17] of byte;
...
buffer := 'mikroElektronika';
...
SPI_Ethernet_putConstBytes(buffer, 16); // помещает массив констант в буфер ENC28J60
|
Примечания |
Нет. |
SPI_Ethernet_putString
Прототип |
function SPI_Ethernet_putString(ptr : ^byte) : word; |
---|---|
Описание |
Это процедура модуля MAC. Он сохраняет целую строку (исключая нулевое завершение) в |
Параметры |
|
Возвращает |
Количество байтов, записанных в |
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var buffer : string[16]; ... buffer := 'mikroElektronika'; ... SPI_Ethernet_putString(buffer); // put a RAM string into ENC28J60 buffer |
Примечания |
Нет. |
SPI_Ethernet_putConstString
Прототип |
function SPI_Ethernet_putConstString(const ptr : ^byte) : word; |
---|---|
Описание |
Это процедура модуля MAC. Он хранит целую строку const (исключая нулевое завершение) в ОЗУ ENC28J60, начиная с текущего местоположения указателя записи ENC28J60 (EWRPT). |
Параметры |
|
Возвращает |
Количество байтов, запиываемых в |
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
const
buffer : string[16];
...
buffer := 'mikroElektronika';
...
SPI_Ethernet_putConstString(buffer); // помещает константную строку в буфер ENC28J60
|
Примечания |
Нет. |
SPI_Ethernet_getByte
Прототип |
function SPI_Ethernet_getByte() : byte; |
---|---|
Описание |
Это процедура модуля MAC. Он извлекает байт с адреса, на который указывает текущий |
Параметры |
Нет. |
Возвращает |
Байт читается из |
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var
buffer : byte;
...
buffer := SPI_Ethernet_getByte(); // читает байт из буфера ENC28J60
|
Примечания |
Нет. |
SPI_Ethernet_getBytes
Прототип |
procedure SPI_Ethernet_getBytes(ptr : ^byte; addr : word; n : word); |
---|---|
Описание |
Это процедура модуля MAC. Он извлекает эквивалентное количество байтов из ОЗУ ENC28J60, начиная с заданного адреса. Если в качестве параметра адреса передано значение 0xFFFF, чтение начнется с текущего местоположения указателя чтения ENC28J60 (ERDPT). |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var buffer: array[16] of byte; ... SPI_Ethernet_getBytes(buffer, 0x100, 16); // read 16 bytes, starting from address 0x100 |
Примечания |
Нет. |
SPI_Ethernet_UserTCP
Прототип |
function SPI_Ethernet_UserTCP(var remoteHost : array[4] of byte; remotePort, localPort, reqLength : word; var flags: TEthPktFlags) : word; |
---|---|
Описание |
Это процедура TCP-модуля. Он внутренне называется библиотекой. Пользователь обращается к запросу TCP с помощью некоторых подпрограмм SPI_Ethernet_get. Пользователь помещает данные в буфер передачи, используя некоторые из подпрограмм SPI_Ethernet_put. Функция должна возвращать длину в байтах ответа TCP, или 0, если есть Ничего для передачи. Если нет необходимости отвечать на запросы TCP, просто определите эту функцию с возвратом (0) в качестве одного оператора. |
Параметры |
|
Возвращает |
|
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
Эта функция внутренне вызывается библиотекой и не должна вызываться по коду пользователя. |
Примечания |
Исходный код функции снабжен соответствующими примерами проектов. Код должен быть настроен пользователем для достижения желаемого ответа. |
SPI_Ethernet_UserUDP
Прототип |
function SPI_Ethernet_UserUDP(var remoteHost : array[4] of byte; remotePort, destPort, reqLength : word; var flags: TEthPktFlags) : word; |
---|---|
Описание |
Это процедура модуля UDP. Он внутренне называется библиотекой. Пользователь обращается к запросу UDP с помощью некоторых подпрограмм SPI_Ethernet_get. Пользователь помещает данные в буфер передачи, используя некоторые из подпрограмм SPI_Ethernet_put. Функция должна возвращать длину в байтах ответа UDP или 0, если ничего не передать. Если вам не нужно отвечать на запросы UDP, просто определите эту функцию с помощью return (0) как одного оператора. |
Параметры |
|
Возвращает |
|
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
Эта функция внутренне вызывается библиотекой и не должна вызываться по коду пользователя. |
Примечания |
Исходный код функции снабжен соответствующими примерами проектов. Код должен быть настроен пользователем для достижения желаемого ответа. |
SPI_Ethernet_setUserHandlers
Прототип |
procedure SPI_Ethernet_setUserHandlers(TCPHandler : ^TSPI_Ethernet_UserTCP; UDPHandler : ^TSPI_Ethernet_UserUDP); |
---|---|
Описание |
Устанавливает указатели на реализацию функций пользовательского TCP и UDP-обработчика, которые автоматически вызывается библиотекой SPI Ethernet. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
SPI_Ethernet_UserTCP and SPI_Ethernet_UserUDP have to be previously defined. |
Пример |
SPI_Ethernet_setUserHandlers(@SPI_Ethernet_UserTCP, @SPI_Ethernet_UserUDP); |
Примечания |
Since all libraries are built for SSA, SSA restrictions regarding function pointers dictate that modules that use SPI_Ethernet_setUserHandlers must also be built for SSA. |
SPI_Ethernet_getIpAddress
Прототип |
function SPI_Ethernet_getIpAddress() : ^byte;
|
---|---|
Описание |
Эта процедура должна использоваться, когда DHCP-сервер присутствует в сети для получения назначенного IP-адреса. |
Параметры |
Нет. |
Возвращает |
Указатель на глобальную переменную, содержащую IP-адрес. |
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var ipAddr : array[4] of byte; // user IP address buffer ... memcpy(ipAddr, SPI_Ethernet_getIpAddress(), 4); // fetch IP address |
Примечания |
Пользователь должен всегда копировать IP-адрес из места RAM, возвращаемого этой процедурой, в собственный буфер IP-адреса. В любом случае эти места не должны изменяться пользователем! |
SPI_Ethernet_getGwIpAddress
Прототип |
function SPI_Ethernet_getGwIpAddress() : ^byte;
|
---|---|
Описание |
Эта процедура должна использоваться, когда DHCP-сервер присутствует в сети для получения назначенного IP-адреса шлюза. |
Параметры |
Нет. |
Возвращает |
Указатель на глобальную переменную, содержащую IP-адрес шлюза. |
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var gwIpAddr : array[4] of byte; // user gateway IP address buffer ... memcpy(gwIpAddr, SPI_Ethernet_getGwIpAddress(), 4); // fetch gateway IP address |
Примечания |
Пользователь должен всегда копировать IP-адрес из местоположения ОЗУ, возвращаемого этой процедурой, в собственный буфер IP-адреса шлюза. В любом случае эти места не должны изменяться пользователем! |
SPI_Ethernet_getDnsIpAddress
Прототип |
function SPI_Ethernet_getDnsIpAddress() : ^byte;
|
---|---|
Описание |
Указатель на глобальную переменную, содержащую IP-адрес DNS. |
Параметры |
Нет. |
Возвращает |
Указатель на глобальную переменную, содержащую IP-адрес DNS. |
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var dnsIpAddr : array[4] of byte; // user DNS IP address buffer ... memcpy(dnsIpAddr, SPI_Ethernet_getDnsIpAddress(), 4); // fetch DNS server address |
Примечания |
Пользователь должен всегда копировать IP-адрес из местоположения ОЗУ, возвращаемого этой процедурой, в собственный DNS-адрес DNS-адреса. В любом случае эти места не должны изменяться пользователем! |
SPI_Ethernet_getIpMask
Прототип |
function SPI_Ethernet_getIpMask() : ^byte;
|
---|---|
Описание |
Эта процедура должна использоваться, когда DHCP-сервер присутствует в сети, чтобы получить назначенную маску подсети IP. |
Параметры |
Нет. |
Возвращает |
Указатель на глобальную переменную, содержащую маску подсети IP. |
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var IpMask : array[4] of byte; // user IP subnet mask buffer ... memcpy(IpMask, SPI_Ethernet_getIpMask(), 4); // fetch IP subnet mask |
Примечания |
Пользователь должен всегда копировать IP-адрес из места ОЗУ, возвращаемого этой процедурой, в свой собственный буфер маски подсети IP. В любом случае эти места не должны изменяться пользователем! |
SPI_Ethernet_confNetwork
Прототип |
procedure SPI_Ethernet_confNetwork(var ipMask, gwIpAddr, dnsIpAddr : array[4] of byte);
|
---|---|
Описание |
Настраивает сетевые параметры (маску подсети IP, IP-адрес шлюза, IP-адрес DNS), когда DHCP не используется. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var ipMask : array[4] of byte; // network mask (for Пример : 255.255.255.0) gwIpAddr : array[4] of byte; // gateway (router) IP address dnsIpAddr : array[4] of byte; // DNS server IP address ... gwIpAddr[0] := 192; gwIpAddr[1] := 168; gwIpAddr[2] := 20; gwIpAddr[3] := 6; dnsIpAddr[0] := 192; dnsIpAddr[1] := 168; dnsIpAddr[2] := 20; dnsIpAddr[3] := 100; ipMask[0] := 255; ipMask[1] := 255; ipMask[2] := 255; ipMask[3] := 0; ... SPI_Ethernet_confNetwork(ipMask, gwIpAddr, dnsIpAddr); // set network configuration Параметры |
Примечания |
Вышеуказанные параметры сети должны быть установлены этой процедурой только в том случае, если модуль DHCP не используется. В противном случае DHCP переопределит эти параметры. |
SPI_Ethernet_arpResolve
Прототип |
function SPI_Ethernet_arpResolve(var ip : array[4] of byte; tmax : byte) : ^byte; |
---|---|
Описание |
This is ARP module routine. It sends an ARP request for given IP address and waits for ARP reply.
If the requested IP address was resolved, an ARP cash entry is used for storing the configuration.
ARP cash can store up to 3 entries. For ARP cash structure refer to |
Параметры |
|
Возвращает |
|
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var IpAddr : array[4] of byte; // IP address ... IpAddr[0] := 192; IpAddr[0] := 168; IpAddr[0] := 1; IpAddr[0] := 1; ... SPI_Ethernet_arpResolve(IpAddr, 5); // get MAC address behind the above IP address, wait 5 secs for the response |
Примечания |
Службы Ethernet не останавливаются, пока эта процедура ожидает ответа ARP. В течение этого времени входящие пакеты будут обработаны нормально. |
SPI_Ethernet_sendUDP
Прототип |
function SPI_Ethernet_sendUDP(var destIP : array[4] of byte; sourcePort, destPort : word; pkt : ^byte; pktLen : word) : byte; |
---|---|
Описание |
Это процедура модуля UDP. Он отправляет UDP-пакет в сети. |
Параметры |
|
Возвращает |
|
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var IpAddr : array[4] of byte; // remote IP address ... IpAddr[0] := 192; IpAddr[0] := 168; IpAddr[0] := 1; IpAddr[0] := 1; ... SPI_Ethernet_sendUDP(IpAddr, 10001, 10001, 'Hello', 5); // send Hello message to the above IP address, from UDP port 10001 to UDP port 10001 |
Примечания |
Нет. |
SPI_Ethernet_dnsResolve
Прототип |
function SPI_Ethernet_dnsResolve(var host : string; tmax : byte) : ^byte; |
---|---|
Описание |
This is DNS module routine. It sends an DNS request for given host name and waits for DNS reply.
If the requested host name was resolved, it's IP address is stored in library global variable
and a pointer containing this address is returned by the routine. UDP port |
Параметры |
|
Возвращает |
|
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
var remoteHostIpAddr : array[4] of byte; // user host IP address buffer ... // SNTP server: // Zurich, Switzerland: Integrated Systems Lab, Swiss Fed. Inst. of Technology // 129.132.2.21: swisstime.ethz.ch // Service Area: Switzerland and Europe memcpy(remoteHostIpAddr, SPI_Ethernet_dnsResolve('swisstime.ethz.ch', 5), 4); |
Примечания |
Службы Ethernet не останавливаются, пока эта процедура ожидает ответа DNS. В течение этого времени входящие пакеты будут обработаны нормально. |
SPI_Ethernet_initDHCP
Прототип |
function SPI_Ethernet_initDHCP(tmax : byte) : byte; |
---|---|
Описание |
Это процедура модуля DHCP. Он отправляет запрос DHCP для сетевых параметров (IP, шлюз, DNS-адреса и маску подсети IP) и ожидает ответа DHCP. Если запрошенные параметры были успешно получены, их значения хранятся в глобальных переменных библиотеки. Эти параметры можно извлечь, используя соответствующие процедуры доступа к библиотеке IP:
Порт UDP |
Параметры |
|
Возвращает |
|
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
... SPI_Ethernet_initDHCP(5); // get network configuration from DHCP server, wait 5 sec for the response ... |
Примечания |
Службы Ethernet не останавливаются, пока эта процедура ожидает ответа DNS. В течение этого времени входящие пакеты будут обработаны нормально. When DHCP module is used, global library variable |
SPI_Ethernet_doDHCPLeaseTime
Прототип |
function SPI_Ethernet_doDHCPLeaseTime() : byte; |
---|---|
Описание |
Это процедура модуля DHCP. Он заботится о времени аренды IP-адреса, уменьшая счетчик библиотеки времени аренды в мире. Когда это время истечет, пришло время связаться с сервером DHCP и возобновить аренду. |
Параметры |
Нет. |
Возвращает |
|
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
while true do begin ... if (SPI_Ethernet_doDHCPLeaseTime() <> 0) then begin ... // it's time to renew the IP address lease end; end; |
Примечания |
Нет. |
SPI_Ethernet_renewDHCP
Прототип |
function SPI_Ethernet_renewDHCP(tmax : byte) : byte; |
---|---|
Описание |
Это процедура модуля DHCP. Он отправляет запрос на продление срока аренды IP-адреса на сервер DHCP. |
Параметры |
|
Возвращает |
|
Требует |
Модуль Ethernet должен быть инициализирован. См. также SPI_Ethernet_Init. |
Пример |
while true do begin ... if (SPI_Ethernet_doDHCPLeaseTime() <> 0) then begin SPI_Ethernet_renewDHCP(5); // it's time to renew the IP address lease, with 5 secs for a reply end; ... end; |
Примечания |
Нет. |