Всем привет, столкнулся с проблемой при работе с шиной CAN. По непонятной мне причине возникают кривые пакеты у которых в EOF доминантные биты (нули), должны быть всегда рецессивные (единицы). Кто нибудь может пояснить при каких обстоятельствах такое может происходить?

Комментарии: 19

  1. Dmytro

    А что за девайс/девайсы?

    • Anton

      Девайсов там 3 + усбкан в компьютер... девайсы на stm32.

      • Shtolcman

        А откидывать по одному и смотреть, что получится не выйдет? Хотя у тебя ж Id каждого девайса должны быть

  2. Dmytro

    Чет я немного не догоняю эту картинку. DLC должен же быть 4 бита, почему в идентификаторе по факту распознано не то что там передано? https://en.wikipedia.org/wiki/CAN_bus#Base_frame_format

    • Shtolcman

      А параметры сниффера правильно установлены?

      • Dmytro

        Покажите захват этим же сниффером, но когда все передается "правильно"

      • Anton

        Да все правильно, насколько я помню CAN вставляет 0 если перед ним идет много 1 и наоборот, вставляет 1 если перед ним много нулей. Эти биты не влияют на передаваемые данные.

        • Dmytro

          Точно после 5 одинаковых бит должен быть один обратный

          • Anton

            Когда все правильно :)

          • Shtolcman

            Так он же вроде аппаратно отбрасывается

            • Dmytro

              Собственно, проблема начинается еще с ACK delimeter бита - Он должен быть всегда рецесивным (1) Да, он даже другим цветом помечен)

              • Anton

                Верно

                • Dmytro

                  а лог. анализатор пассивный, он ничего не передает? ACK бит там, к примеру

                  • Anton

                    Пассивный Но на всякий случай попробовал отключить, проблему это не решило, судя по реакции программы, которая работает на компе...

                    • Dmytro

                      Из общих рекомендаций могу только предложить попробовать снизить скорость и убедиться что терминаторы есть)

                      • Anton

                        Терминаторы точно есть, это первое что я проверил. Скорость сейчас мегабит да, но расстояния, все лежит на столе, максимум несколько десятков сантиметров. А по стандарту мегабитный кан должен работать до 40 метров.

                        • Dmytro

                          А, так в STM же ошибка должна вроде аппаратно распознаться, не? На что она там жалуется?

  3. Igor

    посмотрите осцилографом форму сигналов. Может помеха большая или линия не согласована.

    • Anton

      Это что - то с самой платой, она почему - то "не дружит" с усбкан преобразователем. При этом если я запускаю обмен между самими модулями не используя усбкан, то все работает. Так же помогла замена девайса на такое же точно. Насколько я понял, усбкан некорректно принимает пакет с конкретно этой платы и выставляет error frame на шине.

Не нашли ответ?

Вам также может быть интересно