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]
[SAM7_EMAC.c]
IP-адрес конфигурируется в файле Demo\uIP_Demo_IAR_ARM7\uip\uipopt.h, макросы UIP_IPADDR0, UIP_IPADDR1, UIP_IPADDR2, UIP_IPADDR2. Например, так настраивается адрес 192.168.0.111:
Там же можно сконфигурировать маску сети (макросы 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). |