27423
[i] Задание скорости CAN
Как задавать скорость работы шины CAN?
Все устройства CAN должны работать на одной скорости.
Стандарт сети CAN не регламентирует физический уровень, поэтому сигнал от устройств на шине может приходить в разные моменты времени, в связи с чем в каждом CAN-контроллере имеется блок цифровой фазовой автоподстройки. Этот блок разбивает битовый интервал на сегменты, которые состоят из квантов времени TQ (битовый интервал - сумма всех сегментов, по стандарту от 8 TQ до 25 TQ). Регистр CAN_BITTMNG как раз и позволяет задать значения этим сегментам в квантах времени, помимо задания делителя и режима выборки, и позволяет не только синхронизировать все устройства на шине, но и внести необходимые данные для задания определенной скорости работы.
Исходя из того, что длительность битового интервала определяется суммой квантов всех сегментов, а скорость передачи обратно пропорциональна значению битового интервала, общая формула для скорости работы CAN:
Сумма всех сегментов равна 10 TQ и удовлетворяет требованиям стандарта, а делитель задан равным 7. Тогда S = 80 МГц/(10*(7+1)) = 1 Мб/с. Значения делителя и сегментов необходимо подбирать согласно частоте микроконтроллера, на которой планируется работать.
Стандарт сети CAN не регламентирует физический уровень, поэтому сигнал от устройств на шине может приходить в разные моменты времени, в связи с чем в каждом CAN-контроллере имеется блок цифровой фазовой автоподстройки. Этот блок разбивает битовый интервал на сегменты, которые состоят из квантов времени TQ (битовый интервал - сумма всех сегментов, по стандарту от 8 TQ до 25 TQ). Регистр CAN_BITTMNG как раз и позволяет задать значения этим сегментам в квантах времени, помимо задания делителя и режима выборки, и позволяет не только синхронизировать все устройства на шине, но и внести необходимые данные для задания определенной скорости работы.
Исходя из того, что длительность битового интервала определяется суммой квантов всех сегментов, а скорость передачи обратно пропорциональна значению битового интервала, общая формула для скорости работы CAN:
S = CANx_CLK/(N*(DIV+1)),
где CANx_CLK - частота работы микроконтроллера с CAN-шиной, по умолчанию равна частоте работы микроконтроллера HCLK, N - сумма всех сегментов в квантах времени, DIV - делитель, задающийся также в регистре CAN_BITTMNG.
Соответственно, если необходимо установить скорость работы в 1 Мб/с, то нужно внести следующие значения в регистр CAN_BITTMNG для частоты CAN (микроконтроллера) в 80 МГц (как пример):MDR_CANx->BITTMNG = (7 << 0) // Делитель тактовой частоты (16 – 1)
| (1 << 16) // Длительность сегмента распространения (2 TQ)
| (3 << 19) // Длительность первого фазового сегмента (4 TQ)
| (2 << 22) // Длительность второго фазового сегмента (3 TQ)
| (0 << 25) // Допустимый интервал подстройки сегментов (1 TQ)
| (0 << 27); // Режим выборки (однократная)
Фрагмент кода 1Сумма всех сегментов равна 10 TQ и удовлетворяет требованиям стандарта, а делитель задан равным 7. Тогда S = 80 МГц/(10*(7+1)) = 1 Мб/с. Значения делителя и сегментов необходимо подбирать согласно частоте микроконтроллера, на которой планируется работать.