Dima1060 0 24 ноября, 2015 Опубликовано 24 ноября, 2015 · Жалоба У меня от старого проекта оставались включенные прерывания SMBuS и внешнее, но на ножках ничего не было. Удалил лишнее, сделал прерывание от UART высшего приоритета - заработало! Alexashka, большое спасибо! Получается странный эффект: если несколько раз включить и выключить передачу данных, в какой то момент что-то зависает и после очередного включения прибор не проходит энумерацию. В диспетчере устройств все нормально. Когда данные по UART не передаю такого эффекта добиться не удалось. Посмотрел, заканчивается все вроде корректно, после команды "Стоп" данные уже не идут, запросов данных тоже нет. То есть "Стоп" вроде как корректно обрабатывается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 24 ноября, 2015 Опубликовано 24 ноября, 2015 · Жалоба Проверьте нет ли циклов каких в прерывании УАРТ, каких нибудь while() в котором может подвиснуть. Энумерация очень быстро проходит, если девайс во время не отвечает, то хост вполне может его не подключить.А вообще что значит "чтото зависает"? Под отладчиком смотрели? Где при этом находится программа? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dima1060 0 24 ноября, 2015 Опубликовано 24 ноября, 2015 · Жалоба Проверьте нет ли циклов каких в прерывании УАРТ, каких нибудь while() в котором может подвиснуть. Энумерация очень быстро проходит, если девайс во время не отвечает, то хост вполне может его не подключить.А вообще что значит "чтото зависает"? Под отладчиком смотрели? Где при этом находится программа? Нет, в прерываниях циклов нет. Под отладчиком смотрел, довел прибор до такого кризиса, остановил пару раз отладчик - все время натыкался на main, проверяет условия, которые там крутятся. Смотрел в USB Trace, после попытки подключиться отправляет кучу запросов по нулевому ендпойнту, все запросы помечены как успешные... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 25 ноября, 2015 Опубликовано 25 ноября, 2015 · Жалоба По Вашему описанию трудно что-либо понять. после очередного включения прибор не проходит энумерацию Какого включения, куда? Одни догадки. Вы его в хост подтыкаете, а силабс при этом имеет собственное питание или как? Процедура подключения к хосту самопальная? Когда я делал USB линк на F320, питание было от USB и проблем не возникало -каждый втык - рестарт программы, заново процедура подключения, до окончания подключения (пока не выставится флаг что USB подключен и сконфигурирован) никаких действий с моей стороны не предпринимается. Может Вы чтото пытаетесь слать до того, как полностью закончится процедура конфигурирования и это нарушает ее. Вообщем опишите более подробно что, куда, зачем и как... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dima1060 0 25 ноября, 2015 Опубликовано 25 ноября, 2015 · Жалоба Нет, если перетыкать в USB, то все нормально. Я имею ввиду, когда управляю с ПК. С энумерацией я наверно Вас запутал, энумерация же при включении происходит. При нажатии кнопки "Старт" тестовой программы, перед тем как эту команду отправить выполняется некая функция Enum(), в описании которой сказано, что она возвращает список поддерживаемых устройств. Я посмотрел в USB Trace - эта функция запрашивает дескрипторы. Я сравнил логи для случая когда все нормально и когда происходит ошибка. Сначала там идет запрос дескриптора устройства, потом запрос строкового дескриптора, потом еще один строковый. Дескрипторы, естественно, одинаковые, данные идут одни и те же. После отправки каждого дескриптора идет еще какой то запрос, который отправляет на хост два байта. После отправки дескриптора устройства и первого строкового дескриптора эти двухбайтовые запросы у меня совпадают. А вот после отправки второго строкового дескриптора эти двухбайтовые запросы разные. При удачном старте - всегда 12 03 Вот лог из USB Trace Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dima1060 0 25 ноября, 2015 Опубликовано 25 ноября, 2015 · Жалоба как я понял это 80 - запрос к устройству 6 - тип запроса (получить дескриптор) 3 - тип дескриптора (строковый дескриптор) 3 - индекс дескриптора. Вот это не понял что такое. Индексы передаются в дескрипторе устройства вроде 9 и 4 - идентификатор языка 2 и 0 - кол-во данных в поле данных этого запроса при удачном старте 12 03, а при неудачном - другие числа Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 25 ноября, 2015 Опубликовано 25 ноября, 2015 · Жалоба Т.е. силабс отправляет в УСБ чтото не то? Первое что приходит на ум -проблема с целостностью УСБ буфера. Вообщем в Вашем самом приоритетном прерывании нужно исключить любую возможность обращения к FIFO USB и вообще к регистрам USB. Так и не понял каким образом реализованы обработчики системных запросов USB. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dima1060 0 25 ноября, 2015 Опубликовано 25 ноября, 2015 · Жалоба Т.е. силабс отправляет в УСБ чтото не то? Первое что приходит на ум -проблема с целостностью УСБ буфера. Вообщем в Вашем самом приоритетном прерывании нужно исключить любую возможность обращения к FIFO USB и вообще к регистрам USB. Так и не понял каким образом реализованы обработчики системных запросов USB. В общем да, отправляет что-то не то. Самое приоритетное прерывание - это UART, там я USB не трогаю. В main отправляю данные по USB. Обработчики запросов...там кода много, могу конечно прикрепить у меня строковый дескриптор был xdata code const BYTE /*xdata*/ String3Desc[STR3LEN+2] = { STR3LEN, 0x03, 'S', 0, 'N', 0, '-', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0 }; //end of String3Desc я его сделал code const, как остальные не понимаю почему, но вроде перестало сбиваться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 26 ноября, 2015 Опубликовано 26 ноября, 2015 · Жалоба у меня строковый дескриптор был xdata я его сделал code const, как остальные не понимаю почему, но вроде перестало сбиваться Посмотрите после глюка значение дескриптора в памяти xdata -возможно гдето вылезаете за границы массива и затираете свой дескриптор. Если это так, то c code const проблема скорей всего не исчезнет, а проявится потом в другом месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dima1060 0 26 ноября, 2015 Опубликовано 26 ноября, 2015 · Жалоба Посмотрите после глюка значение дескриптора в памяти xdata -возможно гдето вылезаете за границы массива и затираете свой дескриптор. Если это так, то c code const проблема скорей всего не исчезнет, а проявится потом в другом месте. не совсем понял, что это значит? памяти не хватает? Keil разве об этом не должен предупредить? У меня сейчас в проекте Keil насчитал Program Size: data=103.5 xdata=447 code=4148 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 26 ноября, 2015 Опубликовано 26 ноября, 2015 · Жалоба не совсем понял, что это значит? памяти не хватает? Keil разве об этом не должен предупредить? Не о том я. Вот Вы определили массив X[10] на 10 элементов, а потом пишете по номеру X[11] -Кейл об этом ничего не скажет. Ошибки в работе тоже может не быть - зависит от того, что расположено следом за этим массивом. У меня такое довольно часто происходит :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dima1060 0 30 ноября, 2015 Опубликовано 30 ноября, 2015 · Жалоба Не о том я. Вот Вы определили массив X[10] на 10 элементов, а потом пишете по номеру X[11] -Кейл об этом ничего не скажет. Ошибки в работе тоже может не быть - зависит от того, что расположено следом за этим массивом. У меня такое довольно часто происходит :( Может быть. Что там в USB буферах делается я не знаю. А вот в моей системе передачи из двух буферов размер указателей никак не контролируется Хочется, честно говоря, перейти на обычный кольцевой буфер. Но он будет крамсать пакеты, отправлять неполные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dima1060 0 30 декабря, 2015 Опубликовано 30 декабря, 2015 · Жалоба Скажите пожалуйста, кто-нибудь работал в среде Silicon Laboratories IDE ? Есть какие то преимущества перед Keil? Еще у них новую программу видел Simplicity Studio, но это как я понял какой то сборник программ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться