Недавно начал глючить один из контроллеров термодатчиков на зеркале БТА: поработает минут 5, а потом начинает засорять шину (буквально флудит, не давая никому влезть) широковещательными командами "начать измерение температуры" (непонятно, с чего вообще эта дичь возникла). Вот, сел вчера радикально так заменил код USB на новый (о котором недавно писал), выкинул поддержку UART (ну его нафиг: больно тормозной). Сегодня поменял немного протокол, заменил базовый адрес идентификаторов на 0x680 (чтобы не пересечься случайно с какой-нибудь железкой на CANopen). Пока отлаживал, придумал еще несколько команд для удобства (в т.ч. "заткнись!" - чтобы контроллер ничего в шину не писал, пока разрешения не получит). Сам по себе USB-протокол оставил тем же, что и был (только запретил уже "широковещательные" команды). Как и раньше, если контроллер не находится в режиме "сниффера", реагирует лишь на посылки по его ID (а идентификатор равен 0x680 + номер, который перемычками на плате установили - от 0 до 15). Мастер (с номером 0) по умолчанию в роли "сниффера" выступает (чтобы и с другими устройствами в шине через него можно было общаться).
Поеду завтра на гору, перепрошью все шесть контроллеров. Заодно попытаюсь "глюкавого" найти - если он физически глючит, нужно будет заменить. Хотя, странно это: работает себе несколько минут, а потом вдруг начинается…
Репозиторий с кодом.