Отладка сниффера CAN-шины на базе LPC23XX

Я пытаюсь заставить работать сниффер шины CAN на основе LPC2368 . Я продолжаю получать прерывание по ошибке шины типа «ошибка формы». Я подозреваю, что мои настройки времени. Я убедился, что отправляющая сторона передает на скорости 125 кбит/с (длительность бита 8 мкс). Вот мои настройки для тактовой частоты процессора 72 МГц и скорости шины 125 кбит/с:

#define PULSE_BEFORE_SAMPLE 8
#define PULSE_AFTER_SAMPLE 3
#define PULSE_PER_BIT (PULSE_BEFORE_SAMPLE + PULSE_AFTER_SAMPLE + 1) 
#define TSEG1 (PULSE_BEFORE_SAMPLE - 1)
#define TSEG2 (PULSE_AFTER_SAMPLE - 1)
#define SJW 3 //sync jump width
#define SAM 0 //sampling 0=single sample 1=triple sample

#define CAN_PRESCALER 7 //((CPU_CLK_HZ / PCLK_DIVIDER / CAN1_BAUDRATE / PULSE_PER_BIT) - 1 )
...
PCLKSEL0 |= PCLK_CAN1 << 26; //clock source = CCLK/6
...
CAN1BTR = (CAN_PRESCALER | (SJW << 14) | (TSEG1 << 16) | (TSEG2 << 20) | (SAM << 23));

Я делаю очевидную ошибку здесь? Контроллер работает в режиме «только прослушивание», все остальные биты режима установлены на 0.

Итак, у вас это получилось?

Ответы (2)

Я работал с CAN-контроллером Microchip с интерфейсом шины SPI , MCP2515 . Одна из самых сложных частей настройки CAN — убедиться, что все регистры скорости передачи установлены правильно для всех устройств на шине. Я не уверен, есть ли у вас доступ к регистрам на отправляющем устройстве, но возможность прочитать точные значения регистров скорости передачи от отправителя может дать вам представление о том, какой регистр вы настроили неправильно. Кроме того, знание типа ошибки, если она обнаружена отправителем, может помочь вам решить проблему с шиной CAN.

У Microchip есть примечания по применению AN754 , в которых содержится руководство по настройке синхронизации шины CAN. Это не относится к Microchip. Есть несколько основных параметров синхронизации, которые необходимо правильно установить, чтобы связь по шине CAN работала. Они есть:

  • Tq = кванты времени
  • Номинальное битовое время
  • Ширина сегмента синхронизации
  • Ширина сегмента распространения
  • Ширина сегмента фазы 1
  • Ширина сегмента фазы 2

Убедитесь, что все эти значения совпадают в отправителе и получателе.

Спасибо за мудрость, но в данной конкретной ситуации она бесполезна. Устройства разные (LPC2368 и AVR-что-то), поэтому их нужно настраивать отдельно.

Проблема заключалась в выборе неправильных пинов. Дело закрыто.

Ну так бы и получилось! +1 за признание своей ошибки.