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

 
 
> AT91SAM7S USB "залипает", время от времени, под настроение))
overloaded
сообщение Oct 25 2009, 21:32
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 17-10-07
Из: Киев
Пользователь №: 31 422



ЮСБ девайс постоянно обменивается парой сотен байт, размер приема и передачи всегда одинаковый.
Период такого обмена выходит от 1мс. Для теста контроллер вообще ничего кроме этого не делает (программа на ПК кстати тоже=) ). Через рендомные промежутки времени (от получаса до 20 часов) передача прекращается и контроллер ждет в функции Write

Код
// Wait for the the first bank to be sent
while ( !(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP) );


а ПК, в свою очередь, где=то внутри функции Read(обмен синхронный). Так продолжается от 5 до 30 секунд, после чего
передача чудесным образом возобновляется. Пробовал таймауты на стороне контроллера.
Слал пакеты неправильной длинны (больше или меньше ожидаемого), все синхронизхируется и возобновляется нормально, но проблема остается.

Пробовал bulkusb.sys+basicUSB чуть доделанный, CDC+ЦДЦ пример из ЮСБ фреймворк(типа на прерываниях), симптомы одни и те же.
Что делать? crying.gif cranky.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Oct 27 2009, 14:32
Сообщение #2


Гуру
******

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



Постоянно работаю с 5.1.2600.2180 и как-то проблем не вижу. Чем наличие или отсутствие ZLP может помешать?
Go to the top of the page
 
+Quote Post
overloaded
сообщение Oct 27 2009, 19:17
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 17-10-07
Из: Киев
Пользователь №: 31 422



Мне мешает тем, что: контроллер прочитал структуру - отправил структуру. Синхронно. И когда приходит ЗЛП вместо структуры непонятно что делать - еще раз читать или как и обычно писать.
Логично было бы еще раз читать, но ЗЛП (кроме просто ложного пакета) может сигнализировать и конец передачи. А в таком случае еще раз читать нельзя т.к. ПК не дождется данных.
Это не то что сильно мешает, просто напрягает то, что на разных ПК по-разному будет.

Но именно проблема ЗЛП к первому посту не относится.. Там просто нет запроса OUT от хоста.. Вот нет и все! (смотрел программным снупером, аппаратного нет).
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 27 2009, 19:41
Сообщение #4


Гуру
******

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



Цитата(overloaded @ Oct 27 2009, 22:17) *
Мне мешает тем, что: контроллер прочитал структуру - отправил структуру. Синхронно.

Вот это, по-моему, и является настоящим источником проблем.

Цитата(overloaded @ Oct 27 2009, 22:17) *
Но именно проблема ЗЛП к первому посту не относится.. Там просто нет запроса OUT от хоста.. Вот нет и все! (смотрел программным снупером, аппаратного нет).

А с другим драйвером (не CDC) не пробовали проверить?
Go to the top of the page
 
+Quote Post
overloaded
сообщение Oct 27 2009, 23:10
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 17-10-07
Из: Киев
Пользователь №: 31 422



Цитата(aaarrr @ Oct 27 2009, 22:41) *
Вот это, по-моему, и является настоящим источником проблем.

А почему? Зачем разрабатывать систему команд если нужна только одна? И скорость с системой команд думаю будет поменьше.. В чем ненадежность и проблемность? Или я не так Вас понял? Какую альтернативу посоветуете и что в ней лучше? И по-идее же доставка гарантирована, поэтому сколько посылаем столько и получаем.. Тогда чем плоха синхронная?

Цитата(aaarrr @ Oct 27 2009, 22:41) *
А с другим драйвером (не CDC) не пробовали проверить?

Пробовал bulkusb.sys из ДДК, но там сниффером не смотрел т.к. очень редко происходит, трудно поймать.. Еще буду пробовать.. Но в любом случае нужно ЦДЦ..
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 27 2009, 23:27
Сообщение #6


Гуру
******

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



Цитата(overloaded @ Oct 28 2009, 02:10) *
Зачем разрабатывать систему команд если нужна только одна?

Ну, если действительно все так просто - одна команда и работа в режиме отравил-принял, то может и нет ничего плохого.
Просто превращать байт-ориентированный интерфейс в пакетный при помощи CDC как-то не комильфо. Хотя я и сам грешен, чего уж там smile.gif
Go to the top of the page
 
+Quote Post
overloaded
сообщение Nov 7 2009, 13:50
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 17-10-07
Из: Киев
Пользователь №: 31 422



Цитата(aaarrr @ Oct 28 2009, 02:27) *
Ну, если действительно все так просто - одна команда и работа в режиме отравил-принял .....

Ну там чуть-чуть по другому.. В пакете несколько интеджеров каждый для разных штук и какбы одновременно можно например половине посылать данные а половине команды(признак команды - старший бит 1, еще несколько бит номер, остальные -параметры..) Ну это не важно счас)

Заметил что при считывании в виндусе пакета физически приходит-то все, но отдается иногда(редко) частями.
Т.е. может прийти 1 байт а за ним все остальные..(при размере конечной точки 64 байта и размере передачи, скажем, 40 байт) Решилось примерно так, хотя непонятные вещи таки остались..
Код
                                        
                    while (ComPortReceivedBytesCnt != ComPortReadLength)
                    {
                        if ((ComPortReadLength - ComPortReceivedBytesCnt) > 0)
                            ComPortReceivedBytesCnt += DevComPort.Read(buf, ComPortReceivedBytesCnt, ComPortReadLength - ComPortReceivedBytesCnt);
                        else
                        {
                            Form1.log_file.Write("Ошибка синхронизации: получено больше данных чем запрашивалось! Порт " + dev_guid, this.ShortName, Form1.log_pShowMsg, Form1.log_pWriteLog);
                            return RWResult.SyncError;
                        }
                        
                    }


И чтоб не плодить темы, хочу поинтересоваться насчет spurious прерывания. Никак не могу избавиться,
очень часто возникает (при некотором правильном подборе количества строчек кода в определенныъ местах)) ) - раз в пару секунд или даже чаще. Варианты и комбинации пробовал разные, не помогает.. Или такая частота возникновения - это нормально? Код:
Код
void disable_stepper_interrupt()
{
    *AT91C_TC2_CCR = AT91C_TC_CLKDIS; // Channel Control Register
    *AT91C_TC2_IDR = AT91C_TC_CPCS;
    *AT91C_AIC_IDCR = (1<<AT91C_ID_TC2);  
    *AT91C_AIC_ICCR = (1<<AT91C_ID_TC2);  // Interrupt Clear Command Register    
}


Комбинации строк пробовал почти все ) Понятно что TC_IDR и CLKDIS лишнее, но другие варианты у меня закончились, пробовал что попало)) И как попытаться (и стоит ли) сделать вызовы пореже?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- overloaded   AT91SAM7S USB "залипает"   Oct 25 2009, 21:32
- - Dron_Gus   Был в исходниках от Atmel глючек - не досылался пу...   Oct 26 2009, 06:54
|- - overloaded   В basicUSB это исправлял, в фреймворк конечно глян...   Oct 26 2009, 12:41
|- - overloaded   Обнаружил, что CDC хост почему-то после OUT пакета...   Oct 27 2009, 00:55
|- - overloaded   usbser.sys версии 5.1.2600.3234 и 5.1.2600.5512 по...   Oct 27 2009, 14:26
|- - aaarrr   Цитата(overloaded @ Nov 7 2009, 16:50) И ...   Nov 7 2009, 15:07
|- - overloaded   Цитата(aaarrr @ Nov 7 2009, 18:07) Вообще...   Nov 7 2009, 16:02
|- - aaarrr   Цитата(overloaded @ Nov 7 2009, 19:02) По...   Nov 7 2009, 16:13
|- - overloaded   Цитата(aaarrr @ Nov 7 2009, 19:13) Просто...   Nov 8 2009, 15:11
- - http   Не подскажете, где можно взять проект BasicUSB? О...   Sep 16 2010, 18:11
|- - prottoss   Цитата(http @ Sep 17 2010, 01:11) Не подс...   Sep 18 2010, 15:33
- - http   Спасибо. Решил разбираться по примеру, который вме...   Sep 19 2010, 16:43


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

 


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


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