В статье рассматривается 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\:
[Ссылки]
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. |
Комментарии
RSS лента комментариев этой записи