Программирование ARM FreeRTOS: работа с сетью TCP/IP Ethernet на макетной плате Olimex SAM7-EX256 Thu, March 28 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

FreeRTOS: работа с сетью TCP/IP Ethernet на макетной плате Olimex SAM7-EX256 Печать
Добавил(а) microsin   

В статье рассматривается FreeRTOS V6.0.5, пример работы с сетью TCP/IP (WEB-сервер из FreeRTOS605\Demo\uIP_Demo_IAR_ARM7) на макетной плате Olimex SAM7-EX256 (микроконтроллер AT91SAM7X256, контроллер Ethernet KS8721BL).

Когда я запускал FreeRTOS, то по неопытности столкнулся с многочисленными трудностями. Дело в том, что в последней версии FreeRTOS V6.0.5, которую я скачал [1], был пример под макетную плату Atmel AT91SAM7X-EK и среду разработки IAR 5.50. Пришлось найти и установить IAR 5.50, после этого проект начал компилироваться и работать в отладчике. Но теперь выяснилось, что на макетной плате Olimex SAM7-EX256 этот пример работает не полностью - TCP/IP сеть не работала.

Поиск по Интернету позволил мне найти другой пример SAM7_EX256_FreeRTOSV4.0.zip [2], специально заточенный под плату Olimex SAM7-EX256. Этот пример был старый (FreeRTOS V4.4.0), и для IAR 4.40 - скомпилировать его не получилось. Нашел lwIP_Demo_olimex.zip для компилятора Rowley [2], там был бинарник. Бинарник прошил, и выяснил, что сеть заработала. Стало ясно, что макетная плата Olimex SAM7-EX256 исправна, и запустить сеть на ней можно, нужно только подправить исходники примера uIP_Demo_IAR_ARM7 от FreeRTOS V6.0.5.

Начал разбираться. Проверил сигналы, которыми соединены AT91SAM7X256 и чип контроллера Ethernet KS8721BL. По назначению сигналов подключение абсолютно идентично как для DM9161AE (макетная плата Atmel AT91SAM7X-EK), так и для KS8721BL (макетная плата Olimex SAM7-EX256). Следовательно, различие должно быть только в коде (наверняка в инициализации). Анализ разницы в модуле SAM7_EMAC.c проектов [1] и [2] позволил установить, что нужно задать другой адрес чипа  AT91C_PHY_ADDR и поправить код prvProbePHY, чтобы проверялся другой ID, соответствующий чипу KS8721BL. Вот исправления в заголовке mii.h и модуле SAM7_EMAC.c:

[mii.h]

 ...
/* PHY ID */
#define MII_DM9161_ID 0x0181b8a0 /* used on the Atmel/IAR evaluation board */
#define MII_AM79C875_ID 0x00225540 /* 0x00225541 */
#define MII_KS8721_ID 0x00221610 /* used on the Olimex board */

/* select the PHY address: 31 on Atmel board, 1 on Olimex board */
#define AT91C_PHY_ADDR 1
//#define AT91C_PHY_ADDR 31

[SAM7_EMAC.c]

  ...

if( ( ( ulPHYId1 << 16 ) | ( ulPHYId2 & 0xfff0 ) ) != MII_KS8721_ID/*MII_DM9161_ID*/ )
  ...

IP-адрес конфигурируется в файле Demo\uIP_Demo_IAR_ARM7\uip\uipopt.h, макросы UIP_IPADDR0, UIP_IPADDR1, UIP_IPADDR2, UIP_IPADDR2. Например, так настраивается адрес 192.168.0.111:

#define UIP_IPADDR0     192U
#define UIP_IPADDR1     168U
#define UIP_IPADDR2     0U
#define UIP_IPADDR3     111U

Там же можно сконфигурировать маску сети (макросы UIP_NETMASK0, UIP_NETMASK1, UIP_NETMASK2, UIP_NETMASK3) и адрес шлюза по умолчанию (макросы UIP_DRIPADDR0, UIP_DRIPADDR1, UIP_DRIPADDR2, UIP_DRIPADDR3). Можно поменять и MAC-адрес (макросы UIP_ETHADDR0, UIP_ETHADDR1, UIP_ETHADDR2, UIP_ETHADDR3, UIP_ETHADDR4, UIP_ETHADDR5).

Работу примера можно увидеть в браузере, если ввести http:\\192.168.0.111\:

FreeRTOS-www-server01.png FreeRTOS-www-server02.png FreeRTOS-www-server03.png FreeRTOS-www-server04.png FreeRTOS-www-server05.png

[Ссылки]

1. FreeRTOS Real Time Kernel (RTOS) site:sourceforge.net - различные версии FreeRTOS. Я скачивал FreeRTOS V6.0.5, и брал оттуда пример uIP_Demo_IAR_ARM7 (IAR 5.50).
2. Рабочий пример SAM7_EX256_FreeRTOSV4.0.zip (IAR 4.40), специально под плату SAM7-EX256. Пример для компилятора Rowley, тоже под макетную плату Olimex lwIP_Demo_olimex.zip - там есть бинарник.
3. Исправленный пример uIP_Demo_IAR_ARM7 FreeRTOS V6.0.5 (IAR 5.50), работающий как на макетной плате Atmel AT91SAM7X-EK, так и на макетной плате Olimex SAM7-EX256. Тип макетной платы переключается макроопределением OLIMEX_SAM7_EX256. Если макроопределение задано (в свойствах проекта, препроцессор, или директивой #define), то проект настроен на чип KS8721BL (макетная плата Olimex SAM7-EX256), а если не задано, то на чип DM9161AE (макетная плата Atmel AT91SAM7X-EK). В архиве - полностью FreeRTOS V6.0.5 и документация Using the FreeRTOS Real Time Kernel - A Practical Guide_opened.pdf.
4. FreeRTOS Quick Start Guide site:freertos.org - руководство по быстрому старту в виде видео (Getting Started... -> Quick Start Guide + Videos). RTOS Implementation site:freertos.org - качественная документация - подробно расписана архитектура RTOS, её реализация, описаны примеры. Real Time Application Design Tutorial site:freertos.org - примеры дизайна Real Time Application с использованием FreeRTOS для маленьких встроенных систем.
5. FreeRTOS: практическое применение, часть 1 (управление задачами) - русскоязычная документация по использованию и применению FreeRTOS (перевод [4]).
6. Переведенная на русский язык документация Doxygen по библиотеке uIP.

 

Комментарии  

 
0 #1 Oleg 15.09.2010 21:44
Спасибо! Отлично работает! Пришлось,правда , помучаться с положением перемычки PHY_PD (убрать совсем).
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page