Моя шина CAN работает со скоростью 125 кбит/с и использует исключительно расширенный формат кадра. Я хотел бы знать, какова максимальная скорость кадра CAN, которую я могу отправить. Предположим, что длина данных всегда составляет восемь байтов.
Согласно этой странице Википедии , каждый кадр имеет максимальную длину кадра в (1+11+1+1+18+1+2+4+64+15+1+1+1+7) = 128
битах:
Принимая во внимание минимальное межкадровое расстояние в три бита , максимальная скорость передачи пакетов до 125 кбит/с должна составлять: 125000 / ( 128 + 3) = 954
кадров в секунду.
Но в моем тесте я не смог подняться так высоко. Максимальная частота кадров, которую я могу достичь (со всеми восемью байтами данных), составляет около 850 кадров в секунду.
Что здесь не так - мой расчет или мой метод испытаний?
По предложению Олина Латропа я расширю битовую начинку.
CAN использует кодирование NRZ и поэтому не устраивает длинные серии единиц или нулей (он теряет отслеживание того, где должны быть фронты тактовых импульсов). Он решает эту потенциальную проблему путем вставки битов. При передаче, если он встречает серию из 5 последовательных единиц или нулей, он вставляет бит другой полярности, а при приеме, если он встречает 5 последовательных единиц или нулей, следующий бит игнорируется (если только этот бит не совпадает с предыдущим). бит, и в этом случае он выдает флаг ошибки).
Если вы отправляете все нули или все единицы для своих тестовых данных, строка из 64 идентичных битов приведет к вставке 12 заполненных битов. Это увеличит общую длину кадра до 140 бит с максимальной частотой кадров 874 кадра в секунду. Если биты данных совпадают со старшим битом CRC, вы получите еще один заполненный бит, и частота кадров упадет до 868 кадров/с. Если CRC имеет длинные серии единиц или нулей, это еще больше снизит частоту кадров. То же самое относится и к вашим идентификаторам.
В общей сложности 16 заполненных битов дадут идеальную частоту кадров 850,3 кадра в секунду, так что вам следует это учитывать. Быстрым тестом будет использование тестовых данных с чередующимися битами и просмотр, что происходит с вашей частотой кадров.
Наименьший фрейм 2.0a (стандартный), который вы можете построить, составляет 47 бит ... Наименьший фрейм 2.0b (расширенный), который вы можете построить, составляет 67 бит ... Это включает 3 бита межкадрового интервала и ИСКЛЮЧАЕТ битовое наполнение ... Теоретически мы можем построить каркас, который никогда не наполнится; На самом деле, вставки битов будет происходить довольно много!
Максимальная скорость передачи для CANBus 2.0a/b составляет 1 Мбит.
При скорости 1 Мбит/с один (доминантный/рецессивный) бит имеет длину 1 мкс, т.е. 0,000'001 S
Таким образом, для передачи 67-битного кадра [наименьший теоретический кадр 2.0b] потребуется 67 мкс, прежде чем можно будет передать другой (67-битный) кадр.
1 000 000 / 67 дает 14 925 полных кадров (+ 25 бит следующего кадра)
Поскольку вы работаете на 1/8 этой скорости, вы можете получить не более 1/8 пакетов
14 925 / 8 = 1 865 кадров в секунду при 125 КБ.
К тому времени, когда вы используете все 64 бита (8 байтов) данных и ПРЕДПОЛАГАЕТЕ, что вы не вызвали «ошибки» заполнения битов, имея строки последовательных 1 или 0 1
000 000 / (67 + 64) = 7 633
7 ' 633/8 = 954
И это также при условии, что ваша проводка идеальна. Ваша шина can сделана из кабеля UTP 120 Ом и имеет емкостную развязку на обоих концах? Или какой-то случайный провод с резистором 120 Ом на одном конце?
В целом я бы сказал, что у вас неплохо получается, чтобы получить 90% теоретической максимальной пропускной способности.
Олин прав в своем описании заполнения битов и того, как это может неблагоприятно повлиять на теоретическую пропускную способность CAN. Еще одна вещь, которая может еще больше снизить фактическую пропускную способность по сравнению с теоретической, — это задержка. Даже если ваш CAN-контроллер может достичь 100%-го использования шины, хост-процессор может не справиться с Tx и/или Rx с такой скоростью. Это может быть результатом медленного процессора и/или неэффективной прошивки, реализующей стек CAN.
Еще один интересный вопрос с точки зрения получателя:
Какова максимальная частота передачи кадров в худшем случае?
В этом случае биты заполнения, вероятно, можно игнорировать, поскольку они снижают частоту.
.
Глядя только на стандартные кадры идентификатора:
Для длины данных 1 вам нужно будет рассчитать с помощью
55 бит (минимальные служебные данные + 8 бит данных + 3 межфамильного пространства)
--> максимальная частота кадров для 1 Мбит составляет около 18181,8/с (1/0,000055)
Для длины данных 0 (может быть также информация) вам придется рассчитывать с
47 бит (минимальные служебные данные + 3 межфамильного пространства)
--> максимальная частота кадров для 1 Мбит составляет около 21276,6/с (1/0,000047)
Олин Латроп
Тристан
ЧтоГрубый Зверь
Пэнхэ Гэн
Пэнхэ Гэн
ЧтоГрубый Зверь
Олин Латроп
Олин Латроп
пользователь4574
ЧтоГрубый Зверь