CAN-шина сложна? CAN-шину невозможно не понять!

CAN (Controller Area Network) - это сеть контроллеров, которая представляет собой сеть последовательной связи, которая может реализовать распределенное управление в реальном времени.

Думая о CAN, следует вспомнить немецкую компанию Bosch, потому что CAN разработан этой компанией (и Intel). CAN имеет множество отличных функций, которые делают его широко используемым. Например: скорость передачи до 1 Мбит / с, расстояние связи до 10 км, механизм битового арбитража без потерь, структура с несколькими мастерами.

В последние годы цены на контроллеры CAN становились все ниже и ниже, и многие микроконтроллеры также интегрировали контроллеры CAN. Теперь каждая машина оснащена шиной CAN.

Типичный сценарий приложения CAN:

Стандарт CAN-шины

Стандарт шины CAN определяет только физический уровень и уровень канала передачи данных, а уровень приложения, определяемый пользователем, является обязательным. Различные стандарты CAN различаются только на физическом уровне.

Трансивер CAN отвечает за преобразование логических уровней в физические сигналы.

Преобразуйте логический сигнал в физический сигнал (разностный уровень) или преобразуйте физический сигнал в логический уровень.

Существует два стандарта CAN, а именно IOS11898 и IOS11519, которые имеют разные характеристики дифференциального уровня.

Амплитуда высокого и низкого уровня низкая, а соответствующая скорость передачи высокая;

* Общий режим витой пары устраняет помехи, потому что уровень изменяется одновременно, а разница напряжений остается неизменной.

Физический слой

CAN имеет три интерфейсных устройства

Когда подключено несколько узлов, пока у одного из них низкий уровень, на шине низкий уровень, и только когда все узлы выводят высокий уровень, он высокий. Так называемая «линия и».

После того, как на шине CAN будет 5 последовательных одинаковых битов, вставьте противоположный бит, чтобы сгенерировать фронт перехода для синхронизации. Тем самым устраняются накопленные ошибки.

Как и 485 и 232, скорость передачи CAN обратно пропорциональна расстоянию.

CAN-шина, подключение сопротивления клеммы:

Почему это 120 Ом, потому что характеристическое сопротивление кабеля составляет 120 Ом, чтобы имитировать бесконечную линию передачи

уровень канала передачи данных

Передача по шине CAN - это кадр CAN, кадр связи CAN делится на пять видов, а именно кадр данных, удаленный кадр, кадр ошибки, кадр перегрузки и интервал кадра.

Кадры данных используются для отправки и получения данных между узлами и являются наиболее часто используемым типом кадров; удаленные кадры используются для получения данных от принимающего узла к отправляющему узлу; кадры ошибок - это кадры, используемые для уведомления других узлов, когда узел обнаруживает ошибка кадра; кадры перегрузки - это кадр, используемый принимающим узлом для информирования отправляющего узла о его возможностях приема; кадр, используемый для изоляции кадров данных и удаленных кадров от предыдущих кадров.

Кадр данных делится на стандартный кадр (2.0A) и расширенный кадр (2.0B) в зависимости от длины арбитражного участка.

Начало кадра


Начало кадра состоит из доминирующего бита (низкого уровня), отправляющий узел отправляет начало кадра, а другие узлы синхронизируются с началом кадра;

Конец кадра состоит из 7 невидимых битов (высокий уровень).

Раздел арбитража

Как CAN-шина решает проблему многоточечной конкуренции?

Ответ дает арбитражная секция.

Контроллер шины CAN контролирует уровень шины при отправке данных. Если уровни разные, он прекращает отправку и выполняет другую обработку. Если бит находится в разделе арбитража, он выйдет из соревнования шины; если он находится в других разделах, будет сгенерировано событие ошибки.

Чем меньше идентификатор кадра, тем выше приоритет. Поскольку бит RTR кадра данных находится на доминирующем уровне, а удаленный кадр находится на рецессивном уровне, если формат кадра и идентификатор кадра совпадают, кадр данных имеет приоритет над удаленным кадром; поскольку бит IDE стандартный кадр находится на доминирующем уровне, бит IDE расширенного кадра невидим.Для стандартных кадров и расширенных кадров с одинаковым идентификатором в первых 11 битах приоритет стандартного кадра выше, чем у расширенного кадра.

Секция управления

Всего битов 6. Секция управления стандартного кадра состоит из IDE бита флага расширенного кадра, зарезервированного бита r0 и кода длины данных DLC; секция управления расширенным кадром состоит из IDE, r1, r0 и DLC.

Сегмент данных

0-8 байт, короткая структура кадра, хорошая производительность в реальном времени, подходит для автомобильных и промышленных систем управления;

Стадия CRC

Сегмент проверки CRC состоит из 15-битового значения CRC и разделителя CRC.

Этап ACK

Когда нет ошибки от начала кадра, полученного принимающим узлом до сегмента CRC, он отправит доминирующий уровень в сегменте ACK, отправляющий узел отправит рецессивный уровень, а строка и результат будут доминирующими. уровень.

Удаленная рамка

Удаленный кадр разделен на 6 сегментов, которые также делятся на стандартные кадры и расширенные кадры, а бит RTR равен 1 (рецессивный уровень).

CAN - очень надежная шина, но она также имеет пять ошибок.

Ошибка CRC: эта ошибка возникает, когда отправленные и полученные значения CRC различны;

Ошибка формата: ошибка возникает, если формат кадра недопустим;

Ошибка ответа: эта ошибка возникает, когда отправляющий узел не получает ответное сообщение в фазе ACK;

Ошибка отправки бита: отправляющий узел обнаруживает, что уровень шины не соответствует уровню отправки при отправке информации, и возникает эта ошибка;

Ошибка вставки битов: эта ошибка возникает при нарушении правил связи на кабеле связи.

Когда возникает одна из этих пяти ошибок, отправляющий узел или принимающий узел отправляет кадр ошибки.

Чтобы некоторые узлы не совершали ошибок и постоянно отправляли кадры ошибок, мешая связи других узлов, протокол CAN предусматривает 3 состояния и поведения узлов.

Рамка перегрузки

Когда узел не готов к приему, он отправляет кадр перегрузки, чтобы уведомить отправляющий узел.

Кадровый интервал

Он используется для изоляции фреймов данных, удаленных фреймов и фреймов перед ними, и интервал фрейма не добавляется перед фреймами ошибок и фреймами перегрузки.

Создать узел CAN

Создайте узел для реализации соответствующего управления.Он разделен снизу вверх на четыре части: схема узла CAN, драйвер контроллера CAN, протокол прикладного уровня CAN, прикладная программа узла CAN.

Хотя функции, выполняемые разными узлами, различны, все они имеют одинаковую аппаратную и программную структуру.

 

Приемопередатчик CAN и контроллер соответствуют физическому уровню и уровню канала передачи данных CAN соответственно для завершения отправки и получения сообщений CAN; функциональная схема выполняет определенные функции, такие как получение сигнала или периферийные устройства управления; основной контроллер и прикладное программное обеспечение следуют Формат сообщения анализирует сообщение и выполняет соответствующий контроль.

Драйвер оборудования CAN - это программа, работающая на главном контроллере (например, P89V51) .Она в основном выполняет следующие задачи: операции на основе регистров, инициализацию контроллера CAN, отправку сообщений CAN и получение сообщений CAN;

Если вы используете драйвер оборудования CAN напрямую, вам необходимо изменить верхнюю прикладную программу при смене контроллера, что плохо переносимо. Добавление уровня виртуального диска к уровню приложения и уровню аппаратного диска может скрыть различия между различными контроллерами CAN.

В дополнение к выполнению функции связи узел CAN также включает в себя некоторые специальные схемы функций аппаратного обеспечения: функциональная схема управляет нисходящей схемой функции прямого управления, а восходящая цепь обеспечивает функциональный интерфейс схемы функции управления для прикладного уровня. Конкретные функции включают прием сигналов, отображение человек-машина и т. Д.

Приемопередатчик CAN должен реализовывать обмен логического уровня контроллера CAN и дифференциального уровня на шине CAN. Существует две схемы реализации приемопередатчиков CAN: одна - использовать IC приемопередатчика CAN (необходимо добавить изоляцию источника питания и электрическую изоляцию), а другая - использовать модуль приемопередатчика изоляции CAN. Рекомендуется второй тип.

Контроллер CAN является основным компонентом CAN. Он реализует все функции уровня канала передачи данных в протоколе CAN и может автоматически выполнять анализ протокола CAN. Обычно существует два типа контроллеров CAN: один - это контроллер IC (SJA1000), а другой - это MCU (LPC11C00), интегрированный с контроллером CAN.

MCU отвечает за управление функциональной схемой и контроллером CAN: при запуске узла он инициализирует параметры контроллера CAN; считывает и отправляет кадры CAN через контроллер CAN; когда контроллер CAN прерывается, обрабатывает исключение прерывания. контроллера CAN; Вывести управляющие сигналы в соответствии с полученными данными;

 

Логика управления интерфейсом: интерпретировать инструкции MCU, адресовать блоки регистров каждого функционального модуля в контроллере CAN и предоставлять информацию о прерываниях и информацию о состоянии главному контроллеру.

Буфер отправки и буфер приема могут хранить полную информацию о сети CAN-шины.

Приемная фильтрация заключается в сравнении сохраненного проверочного кода с идентификационным кодом сообщения CAN, и только кадр CAN, который соответствует проверочному коду, будет сохранен в приемном буфере.

Ядро CAN реализует все протоколы канала передачи данных.

Обзор прикладного уровня протокола CAN

Шина CAN предоставляет только надежные услуги передачи, поэтому, когда узел получает сообщение, он должен использовать протокол прикладного уровня, чтобы определить, кто отправил данные и каково их значение. Общие протоколы прикладного уровня CAN: CANOpen, DeviceNet, J1939, iCAN и т. Д.

Драйвер протокола прикладного уровня CAN - это программа, работающая на главном контроллере (например, P89V51). Она определяет сообщение CAN в соответствии с протоколом прикладного уровня и завершает анализ и сборку сообщения CAN. Например, мы используем идентификатор кадра для указания адреса узла. Когда полученный идентификатор кадра не передает собственный идентификатор узла, он напрямую отбрасывается, в противном случае он передается на верхний уровень для обработки; при отправке идентификатор кадра равен установить на адрес принимающего узла.

CAN-трансивер

SJA1000 имеет много режимов вывода, наиболее часто используемым является нормальный режим вывода, режим ввода обычно не выбирает режим компаратора, что может увеличить расстояние связи и уменьшить ток в спящем режиме.

По скорости передачи данных трансивер делится на высокоскоростной CAN-трансивер и отказоустойчивый CAN-трансивер.

Один и тот же трансивер CAN должен использоваться в одной сети.

На линии подключения CAN будет много сигналов помех, и необходимо добавить в оборудование фильтры и схемы защиты от помех.

 

Также можно использовать развязывающий трансивер CAN (встроенный фильтр и цепь защиты от помех).

Режим подключения CAN контроллера и MCU


SJA1000 можно рассматривать как внешнее ОЗУ, ширина адреса составляет 8 бит, и он поддерживает до 256 регистров.

#define REG_BASE_ADDR 0xA000 // 寄存器基址
unsigned char *SJA_CS_Point = (unsigned char *) REG_BASE_ADDR ;

// 写SJA1000寄存器
void WriteSJAReg(unsigned char RegAddr, unsigned char Value) {
*(SJA_CS_Point + RegAddr) = Value;
return;
}

// 读SJA1000寄存器
unsigned char ReadSJAReg(unsigned char RegAddr) {
 return (*(SJA_CS_Point + RegAddr));
}

 

 

 

Постоянно записывать данные из буфера в регистр

…… for (i=0;i<len;i++) { WriteSJAReg(RegAdr+i,ValueBuf[i]);  }……

Непрерывно считывать несколько регистров в буфер

……for (i=0;i<len;i++) {  ReadSJAReg(RegAdr+i,ValueBuf[i]);   }……

 

 

Заголовочный файл содержит схему:

  1. Каждая программа содержит используемые файлы заголовков

  2. Каждая программа содержит общий файл заголовка, который включает все остальные файлы заголовков.

#ifndef __CONFIG_H__ // 防止头文件被重复包含
#define __CONFIG_H__
#include <8051.h>         // 包含80C51寄存器定义头文件
#include "SJA1000REG.h"         // 包含SJA1000寄存器定义头文件

// 定义取字节运算
#define LOW_BYTE(x)  (unsigned char)(x)
#define HIGH_BYTE(x)  (unsigned char)((unsigned int)(x) >> 8)

// 定义振荡器时钟和处理器时钟频率(用户可以根据实际情况作出调整)
#define OSCCLK 11059200UL
// 宏定义MCU的时钟频率
#define CPUCLK (OSCCLK / 12)
#endif // __CONFIG_H__

SJA1000 находится в состоянии сброса после включения и должен быть инициализирован, прежде чем он сможет работать.

(1) Установите бит 0 регистра режима, чтобы войти в режим сброса;

(2) Установите регистр деления тактовой частоты для выбора тактовой частоты и режима CAN;

(3) Установите фильтр приема, установите проверочный код и защитный код;

(4) Установите регистры таймера шины 0 и 1, чтобы установить скорость передачи данных CAN;

(5) Установите режим вывода;

(6) Очистите бит 0 регистра режима, чтобы выйти из режима сброса;

Регистр режима


 

Режим «Только обнаружение»: SJA1000 не проверяет бит ответа при отправке кадров CAN;

Режим только прослушивания: в этом режиме SJA1000 не будет отправлять кадры ошибок для автоматического определения скорости передачи; SJA1000 принимает кадры CAN с разными скоростями передачи. При получении кадров CAN он указывает текущую скорость передачи и скорость передачи данных по шине одинаково.

Настройка скорости передачи

Шина CAN не имеет часов и использует асинхронную последовательную передачу; скорость передачи - это биты данных, отправленные за 1 секунду;

 

Передача кадра CAN:

Шаги для отправки кадра CAN: 1. Проверьте регистр состояния и дождитесь, пока будет доступен буфер отправки;

2. Заполнить сообщение в буфер отправки;

3. Начать отправку.

 

SJA1000 имеет 12-байтовый буфер, сообщение, которое должно быть отправлено, может быть записано через регистр 16-28, либо записано или прочитано через регистр 96-108.

 

 

 

Установить режим отправки

char SetSJASendCmd(unsigned char cmd) {
unsigned char ret;
switch (cmd) {
default:
case 0:
        ret = SetBitMask(REG_CAN_CMR, TR_BIT); //正常发送
break;
case 1:
        ret = SetBitMask(REG_CAN_CMR, TR_BIT|AT_BIT); //单次发送
break;
case 2:
        ret = SetBitMask(REG_CAN_CMR, TR_BIT|SRR_BIT);//自收自发
break;
case 0xff:
        ret = SetBitMask(REG_CAN_CMR, AT_BIT);//终止发送
break;
    }
return ret;
}

 Функция отправки

unsigned char SJA_CAN_Filter[8] = {    // 定义验收滤波器的参数,接收所有帧       
0x00, 0x00, 0x00, 0x00,                                                
// ACR0~ACR3       
0xff, 0xff, 0xff, 0xff                                                         
// AMR0~AMR3
};
unsigned char STD_SEND_BUFFER[11] = {   // CAN 发送报文缓冲区       
0x08,   // 帧信息,标准数据帧,数据长度 = 8       
0xEA, 0x60, // 帧ID = 0x753
0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa  // 帧数据
};
void main(void) // 主函数,程序入口{       
    timerInit();// 初始化
    D1 = 0;       
    SJA1000_RST = 1; // 硬件复位SJA1000       
    timerDelay(50); // 延时500ms       
    SJA1000_RST = 0;       
    SJA1000_Init(0x00, 0x14, SJA_CAN_Filter);   // 初始化SJA1000,设置波特率为1Mbps       
    // 无限循环,main()函数不允许返回      
    for(;;) {           
        SJASendData(STD_SEND_BUFFER, 0x0);           
        timerDelay(100);         // 延时1000ms      
    }    
}

Почему идентификатор кадра равен 0x753? Это связано с форматом хранения кадра CAN в буфере.

 

 

Сопротивление клемм очень важно.Когда скорость передачи высока и сопротивление клемм не добавлено, выброс сигнала очень серьезен.

 

SJA1000 имеет 64-байтовый буфер приема (FIFO), который может снизить требования к MCU. MCU может подтвердить, что SJA1000 читает сообщение после получения сообщения по запросу или прерыванию.

1. Альтернативы отечественного производства нематериальны? Вернитесь на интерактивный урок инноваций Zhaoyi!

2. Может ли RISC-V с открытым исходным кодом стать противоядием от «нехватки ядра» в Китае?

3. Raspberry Pi Pico: MCU всего за 4 доллара

4. Есть много причин, по которым MCU поддерживает функцию AI ~

5. В 2020 году я изучил 20 принципов разработки программного обеспечения ~

6. Применение идей конечного автомата во встроенной разработке ~

Отказ от ответственности: эта статья воспроизводится в Интернете, и авторские права принадлежат первоначальному автору. Если вы вовлечены в вопросы авторского права, свяжитесь с нами, мы подтвердим авторские права на основе предоставленных вами материалов сертификации авторских прав и выплатим авторское вознаграждение или удалим контент.

рекомендация

отblog.csdn.net/DP29syM41zyGndVF/article/details/113749928