Добрый день Столкнулся с проблемой, у которой не могу понять причину.
Разрабатывается устройство на STM32L151CB. Среда разработки IAR если важно. Для связи с верхним уровнем реализован USB. На USB реализован и работает CDC по которому бегает modbus протокол. 3 конечные точки: EP1 - для служебных запросов CDC протокола EP2 - прием данных по USB от хоста EP3 - отправка данных по USB хосту
Что бы не ждать производство и не терять время проект был начат на отладочной плате STM32L-DISCOVERY. На плате запаян STM32L151RC что в сущности тоже самое что и в конечном устройстве но в другом корпусе и с более большой памятью программ.
Проблема заключается в следующем. На отладочной плате все хорошо работает, потерь нет, скорость устраивает. В Wireshark вижу все пакеты USB без ошибок и с корректными данными. Верхний софт тоже видит все данные из modbus протокола.
Переносим проект на конечное устройство изменив в настройках проекта тип процессора. И в отладчике и в Wireshark вижу начальный обмен по 0 точке USB. Все данные корректные и совпадают с пакетами отладочной платы. COM порт в системе появляется и работает. Отправляем из программы windows на этот порт пакеты modbus. Пакеты видно в отладчике и Wireshark. Пакеты корректные. А вот дальше происходит нечто странное. При отправке данных хостом EP2 эти данные видит. Программа формирует ответ и отправляет его через EP3. EP3 отправляет эти данные только 1 первый раз и больше работать не желает. При повторных запросах от хоста EP2 видит данные всегда. Но EP3 больше работать не желает. Причем на отладочной плате этот проект работает без проблем.
Что посмотреть и в какую сторону хотя бы копать?
Спасибо.
Сообщение отредактировал Zeal0t - Sep 1 2017, 06:38
|