реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> sam9xe MMU EMAC uIP
taoga
сообщение Aug 12 2011, 18:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Здравствуйте!
Модифицировал простой работающий на at91sam9xe-ek пример basic-emac-uip-helloworld-project из IAR 6, добавил поддержку d-cache и i-cache. После чего он частично перестал работать. Функция EMAC_Poll() возврашает код "нет принятых данных". Ниже вывод программы в терминале:
CODE
PreInitMMU
InitMMU - done.
-- Basic EMAC uIP Project 1.7-rc1 --
-- AT91SAM9XE-EK
-- Compiled: Aug 11 2011 14:49:07 --
- MAC 0:45:56:78:9a:bc
- Host IP 192.168.0.201
- Router IP 192.168.0.77
- Net Mask 255.255.255.0
-I- ** Valid PHY Found: 0
-I- AutoNegotiate complete
P: Link detected
P: clock time initialize - TC0
P: APP Init ... hello-world


Код проекта в приложении:
Прикрепленный файл  at91sam9xe_ek_basic_emac_uip_helloworld_prj.rar ( 470.7 килобайт ) Кол-во скачиваний: 75


Помогите разобраться!
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 12 2011, 19:45
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вы буферы EMAC не закэшировали ли часом?
Go to the top of the page
 
+Quote Post
taoga
сообщение Aug 13 2011, 05:16
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Цитата(aaarrr @ Aug 12 2011, 23:45) *
Вы буферы EMAC не закэшировали ли часом?

Пробовал перемещать буферы и дескрипторы Rx Tx в некэшируемую область, не помогло.
Что еще есть в emac, macb что нужно переместить в некэшируюмую область?
Go to the top of the page
 
+Quote Post
taoga
сообщение Aug 15 2011, 10:29
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Цитата(aaarrr @ Aug 12 2011, 23:45) *
Вы буферы EMAC не закэшировали ли часом?

Переделал проект basic-emac-project, чтобы избавиться от uIP.
Проблема та-же: после включения MMU, d-cache перестают приниматься/передаваться данные.
Область памяти в которой располагаются дескрипторы и буферы чтения/записи EMAC не кэшируется.

EMAC_Handler постоянно вызывается.
Не устанавливается бит EMAC_RX_OWNERSHIP_BIT.

Выкладываю basic-emac-project проект полностью.
Прикрепленный файл  basic_emac_project.rar ( 2.63 мегабайт ) Кол-во скачиваний: 73
Go to the top of the page
 
+Quote Post
taoga
сообщение Aug 16 2011, 09:56
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Цитата(taoga @ Aug 15 2011, 14:29) *
EMAC_Handler постоянно вызывается.
Не устанавливается бит EMAC_RX_OWNERSHIP_BIT.

Уточняю: Один раз выполняется условие в EMAC_Handler():
Код
if (( (AT91C_BASE_EMAC->EMAC_ISR & AT91C_BASE_EMAC->EMAC_IMR) & AT91C_EMAC_RCOMP) || (AT91C_BASE_EMAC->EMAC_RSR & AT91C_EMAC_REC)) {
        printf("RX packet\n\r");
        rxStatusFlag = AT91C_EMAC_REC;
...

и дальше в статистике сохраняется, что был установлен бит OVR регистра EMAC_RSR, т.е.
выполняется это условие:
Код
if (AT91C_BASE_EMAC->EMAC_RSR & AT91C_EMAC_OVR) {
            rxStatusFlag |= AT91C_EMAC_OVR;
            EmacStatistics.rx_ovrs++;
        }

Далее EMAC_Handler() вызывается "вхолостую" нет ни приема, ни передачи.

Такая ситуация возникает, когда включаются d-cache, i-cache, mmu.
Может быть я неправильно задал таблицу трансляции или буферы остались кэшируемыми?
Если я все сделал правильно куда дальше "копать"?

Сообщение отредактировал IgorKossak - Aug 16 2011, 12:33
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 16 2011, 10:21
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(taoga @ Aug 16 2011, 13:56) *
Может быть я неправильно задал таблицу трансляции или буферы остались кэшируемыми?

Ну, на вид правильно.

Цитата(taoga @ Aug 16 2011, 13:56) *
Если я все сделал правильно куда дальше "копать"?

Трясти надо. Попробуйте инвалидировать кэш перед обращениям к дескрипторам/буферам из программы.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Aug 16 2011, 15:52
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Надеюсь область периферии не забыли тоже объявить как некешируемую?
Go to the top of the page
 
+Quote Post
taoga
сообщение Aug 16 2011, 16:42
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Цитата(sergeeff @ Aug 16 2011, 19:52) *
Надеюсь область периферии не забыли тоже объявить как некешируемую?

Не забыл.
Получается, что не устанавливается флаг EMAC_RX_OWNERSHIP_BIT в дескрипторах буферов приема,
или EMAC_Poll() не застает установленных флагов EMAC_RX_OWNERSHIP_BIT.
Дескрипторы буферов приема передачи то-же помещены в некэшируемую область как и собственно буферы.
Увеличивал количество буферов приемных до 64-х, но результат тот-же.
Затык где-то в EMAC драйвере.
В примерах FreeRTOS есть EMAC драйвер для sam7x, я этот пример собрал для sam9, но он не заработал.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Aug 16 2011, 20:00
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



1. Если честно, то так как вы инициализируете таблицу TTB ни без поллитры, ни с поллитрой не понять. В ecos есть хороший пример, как это внятно сделатъ.

2. Затем я бы перепроверил, действительно ли буфера и прочее попали в некешируемую область.

3. Внимателъно проверить правильно ли инициализирована структура дескриптора.
Прикрепленные файлы
Прикрепленный файл  at91rm9200_misc_mmu.zip ( 5.71 килобайт ) Кол-во скачиваний: 38
 
Go to the top of the page
 
+Quote Post
taoga
сообщение Aug 17 2011, 04:13
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Цитата(sergeeff @ Aug 17 2011, 00:00) *
1. Если честно, то так как вы инициализируете таблицу TTB ни без поллитры, ни с поллитрой не понять. В ecos есть хороший пример, как это внятно сделатъ.

Большей частью этот код результат работы нескольких человек с этого форума. Таблицы оформлены в коде таким образом для хранения во внутренней flash контроллера at91sam9xe.
Код инициализации mmu, i-cache, d-cache работает, проверено.
Я переносил буферы SPI для работы с PDC в некэшируемую область SRAM, после чего обмен по SPI с исп. PDC заработал.
Go to the top of the page
 
+Quote Post
taoga
сообщение Aug 22 2011, 07:22
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Цитата(sergeeff @ Aug 17 2011, 00:00) *
2. Затем я бы перепроверил, действительно ли буфера и прочее попали в некешируемую область.


Здравствуйте!
Сегодня вышел на работу, перепроверил еще раз таблицы трансляции, нашел ошибку.
Изменил icf, адреса сегментов таблиц, но не поменял адрес таблицы второго уровня в коде.
Мои изменения за беспокойство! Всем спасибо!
Добавляю работающий код (к проекту basic-emac...).
Прикрепленный файл  const_flash.rar ( 1.9 килобайт ) Кол-во скачиваний: 85
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Aug 22 2011, 07:52
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(taoga @ Aug 22 2011, 10:22) *
Здравствуйте!
Сегодня вышел на работу, перепроверил еще раз таблицы трансляции, нашел ошибку.
Изменил icf, адреса сегментов таблиц, но не поменял адрес таблицы второго уровня в коде.
Мои изменения за беспокойство! Всем спасибо!
Добавляю работающий код (к проекту basic-emac...).
Прикрепленный файл  const_flash.rar ( 1.9 килобайт ) Кол-во скачиваний: 85


А вспомните, как вы первый раз ответили насчет проверенных-перепроверенных таблиц? Руками заполненная таблица в 4096 байт постоянный потенциальный источник проблем.
Go to the top of the page
 
+Quote Post
taoga
сообщение Aug 22 2011, 18:24
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Цитата(sergeeff @ Aug 22 2011, 11:52) *
А вспомните, как вы первый раз ответили насчет проверенных-перепроверенных таблиц? Руками заполненная таблица в 4096 байт постоянный потенциальный источник проблем.

Мои извинения за беспокойство! Всем спасибо!
Go to the top of the page
 
+Quote Post
taoga
сообщение Aug 26 2011, 18:03
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Здравствуйте!
Заменил uIP на lwIP 1.3.2. За основу взял простой пример
Прикрепленный файл  tcpecho_raw.rar ( 3.58 килобайт ) Кол-во скачиваний: 85

Как и раньше не использую SDRAM и соответственно в настройках lwIP все по минимуму. Получил скорость 1,7 Мбайт/сек.
Пока не смог модифицировать проект для передачи потока данных от микроконтроллера в ПК.
В связи с этим вопрос: Почти все примеры для TCP из lwIP используют методику запрос/ответ, т.е. на запрос с ПК возвращается порция данных. Как сделать, что-бы на запрос началась непрерывная передача данных? Как правильно использовать tcp_write не из callback функций, т.е. чтобы контроллер выступал инициатором передачи данных?
Go to the top of the page
 
+Quote Post
taoga
сообщение Sep 5 2011, 09:45
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Цитата(taoga @ Aug 26 2011, 22:03) *
Здравствуйте!
Заменил uIP на lwIP 1.3.2. За основу взял простой пример
Прикрепленный файл  tcpecho_raw.rar ( 3.58 килобайт ) Кол-во скачиваний: 85

Как и раньше не использую SDRAM и соответственно в настройках lwIP все по минимуму. Получил скорость 1,7 Мбайт/сек.
Пока не смог модифицировать проект для передачи потока данных от микроконтроллера в ПК.
В связи с этим вопрос: Почти все примеры для TCP из lwIP используют методику запрос/ответ, т.е. на запрос с ПК возвращается порция данных. Как сделать, что-бы на запрос началась непрерывная передача данных? Как правильно использовать tcp_write не из callback функций, т.е. чтобы контроллер выступал инициатором передачи данных?

Исправил ошибки, все заработало, без оптимизации lwip с драйверами Atmel. Lwip 1.3.1, raw TCP/IP без FreeRtos. Данные "заталкиваю" в стек из основного цикла программы.

Для размера сегмента:
512 байт - скорость 7 Мбайт/сек.
1024 байт - 10 Мбайт/с.

Больше не экспериментировал, т.к. в проекте не используется SDRAM. Все буферы в SRAM.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01476 секунд с 7
ELECTRONIX ©2004-2016