Нам понадобится:
- Atmel Software Framework — распространяемая под странным образом модифицированной BSD лицензией библиотека, реализующая удобный уровень индирекции при работе с переферией микроконтроллеров Atmel. Мы ей воспользуемся для работы через SPI. Внутри библиотеки весьма красивый код, понятный API и гора документации, исполненной в doxygen. Поэтому, основываясь на чувстве прекрасного, будем её использовать.
- ec28j60driver — драйвер для ENC28J60, реализует высокоуровневые функции работы с Ethernet путем обмена через SPI. Возьмем этот, потому-что написан он не левой пяткой и был достаточно легко портирован для работы с Atmel Software Framework. (см. ветку asf)
- lwIP — легковесный стек TCP/IP. Он отсылает или принимает Ethernet-пакеты через драйвер устройства и дальше разбирается что-же там внутри пришло. На сайте присутствует куча примеров.
Настройки для lwIP следующие:
lwoptions.h:
#define MEM_LIBC_MALLOC 1 #define MEMP_MEM_MALLOC 1 #define MEM_ALIGNMENT 4
cc.h:
#define BYTE_ORDER LITTLE_ENDIAN
Стиль программирования приложений, определяемый использованием RAW API библиотеки lwIP, через 5 минут создает полное ощущение, что ты пишешь gen_server на erlang, но последний почему-то кривой, неудобный и недоделанный.
Далее в таблице приводится размер кода прошивки, получаемый при различных вариантах конфигурации:
config | -O3 | -Os |
---|---|---|
TCP/IP + DHCP + DEBUG(printf) | 96k | 82k |
TCP/IP + DHCP | 54k | 40k |
TCP/IP | 45k | 36k |
UDP/IP + SNMP | 54k | 43k |
UDP/IP | 28k | 24k |
Как-то так оно и работает.