DEENESPTFRRUARHIKOZHNL

CAN Driver (Can)

ModulCan (CAN Driver)
BSW-Modul-ID80
Standard-Header#include "Can.h"
SWS-SpezifikationAUTOSAR_SWS_CANDriver.pdf
ClusterCAN

Руководство по модулюСОЗДАНО ИИ

Управляет аппаратными CAN-контроллерами и обеспечивает передачу данных при отправке, приеме и смене состояний в CAN Interface.
СОЗДАНО ИИ не проверено Модель: claude-opus-5-5 · Усилие: high · Температура: не регулируется · Промпт: b6833c934a77 Происхождение Открытые вопросы (2)
Причинный якорь: R20-11 Действует с R20-11 Заново синтезировано для этой версии спецификации.
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Управляет аппаратными CAN-контроллерами и обеспечивает передачу данных при отправке, приеме и смене состояний в CAN Interface.

Драйвер CAN управляет CAN-контроллерами аппаратного блока (Hardware Unit) и является аппаратным уровнем под CAN Interface. Ему он сообщает о приеме, подтверждении отправки, состоянии bus-off и смене режима через callback-вызовы [SWS_Can_00234]. Согласно Can_Init, все контроллеры находятся в состоянии STOPPED. Каждый контроллер запускается индивидуально и асинхронно с помощью Can_SetControllerMode; об успешном выполнении сообщается лишь впоследствии [SWS_Can_00230]. Отправка осуществляется с помощью Can_Write через аппаратные дескрипторы передачи (Hardware Transmit Handles). Если нет свободного объекта передачи, драйвер возвращает CAN_BUSY, и CanIf буферизует запрос.

Драйвер CAN инкапсулирует любой доступ к CAN-контроллерам аппаратного блока (Hardware Unit). Он обслуживает CAN Interface в качестве единственного пользователя и сообщает о приеме, подтверждении отправки, состоянии bus-off и смене режима через жестко заданные callback-вызовы CanIf [SWS_Can_00234]. ECU State Manager инициализирует его с помощью Can_Init и аппаратно-зависимого Can_ConfigType [SWS_Can_00223]. После этого драйвер находится в состоянии CAN_READY, а все контроллеры — в STOPPED SWS CANDriver с. 29.

kontext EcuM EcuM Can Can (CAN-Treiber) EcuM->Can Can_Init / Can_DeInit SchM BSW Scheduler SchM->Can Can_MainFunction_* CanSM CanSM CanIf CanIf CanSM->CanIf Запросы режимов CanIf->CanSM Сообщения о режиме и Bus-off CanIf->Can Can_Write, Can_SetControllerMode, Can_CheckWakeup, Abfragen Can->EcuM EcuM_CheckWakeup, EcuM_SetWakeupEvent Can->CanIf CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff, CanIf_ControllerModeIndication HW CAN-Controller (Hardware) Can->HW Registerzugriff Det Det Can->Det Det_ReportError / Det_ReportRuntimeError Os Os Can->Os GetCounterValue HW->Can Interrupts / Statusflags

Контекстная диаграмма: встраивание Can между EcuM, BSW Scheduler, CanIf, DET, Os и аппаратной частью контроллеров. Источники: [SWS_Can_00234], SWS CANDriver с. 78

Каждый контроллер проходит через состояния UNINIT, STOPPED, STARTED и SLEEP [SWS_Can_91013]. Запускается он отдельно и асинхронно с помощью Can_SetControllerMode: E_OK означает лишь «принято» [SWS_Can_00230]. О достигнутом состоянии драйвер сообщает позже через CanIf_ControllerModeIndication SWS CANDriver с. 33. Событие bus-off переводит контроллер в STOPPED без аппаратного восстановления; пробуждение по шине (bus wakeup) переводит его из SLEEP в STOPPED SWS CANDriver с. 35.

controllerzustand reset Power-on-Reset UNINIT CAN_CS_UNINIT reset->UNINIT STOPPED CAN_CS_STOPPED UNINIT->STOPPED Can_Init STOPPED->UNINIT Can_DeInit STOPPED->STOPPED Can_SetBaudrate STARTED CAN_CS_STARTED STOPPED->STARTED Can_SetControllerMode(CAN_CS_STARTED) SLEEP CAN_CS_SLEEP STOPPED->SLEEP Can_SetControllerMode(CAN_CS_SLEEP) STARTED->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) или Bus-off (аппаратный) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) или пробуждение от шины SLEEP->SLEEP Can_SetBaudrate

Диаграмма состояний: переходы контроллера под действием программных вызовов, а также событий bus-off и wakeup. Источники: [SWS_Can_91010], SWS CANDriver с. 38

Отправка выполняется с помощью Can_Write(Hth, PduInfo). Два старших бита Can_IdType различают CAN 2.0 и CAN FD, а также стандартный и расширенный ID [SWS_Can_00233] [SWS_Can_00416]. Если нет свободного объекта передачи, драйвер возвращает CAN_BUSY, и CanIf буферизует запрос [SWS_Can_00039] SWS CANDriver с. 47. События распознаются по прерыванию или путем опроса (polling). Для опроса предусмотрены циклические основные функции SWS CANDriver с. 41:

  • Write и Read: подтверждения отправки и прием
  • BusOff и Wakeup: события bus-off и пробуждения
  • Mode: переходы между режимами

Основные функции определены в [SWS_Can_00225]–[SWS_Can_00228] и [SWS_Can_00368].

В случае ошибки драйвер сообщает об ошибках разработки, таких как CAN_E_UNINIT или CAN_E_TRANSITION, в DET [SWS_Can_91019]. Функции с возвращаемым значением возвращают в этом случае E_NOT_OK SWS CANDriver с. 48. Восстановление после bus-off берет на себя CanSM через CanIf. Перезапуск, вероятно, снова осуществляется через Can_SetControllerMode(CAN_CS_STARTED) SWS CANInterface с. 138. Состояние ошибки и счетчики ошибок доступны для опроса; однако значения счетчиков не считаются надежным показателем состояния шины [SWS_Can_91004] [SWS_Can_00516]. Вопрос (открытый)

Роль: низкоуровневый драйвер между CanIf и CAN-контроллерами

Драйвер CAN инкапсулирует любой доступ к аппаратуре CAN конкретного аппаратного блока (Hardware Unit). Изменения состояния контроллеров происходят только через Can_Init, Can_SetBaudrate и Can_SetControllerMode. При этом драйвер сам не сохраняет переходы состояний SWS CANDriver с. 30. Его партнером на верхнем уровне выступает CAN Interface. Все callback-функции, вызываемые драйвером, реализованы в CanIf и не подлежат конфигурированию: CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff и CanIf_ControllerModeIndication. Дополнительно ему требуются Det_ReportRuntimeError и служба Os GetCounterValue [SWS_Can_00234] SWS CANDriver с. 73. Импортируемые типы берутся, среди прочего, из ComStack_Types, EcuM и Os [SWS_Can_00222].

ECU State Manager инициализирует драйвер через Can_Init. Согласно указанию по реализации, он вызывает эту функцию не более одного раза за время работы [SWS_Can_00223] SWS CANDriver с. 29. Циклические основные функции BSW Scheduler вызывает напрямую. Они не имеют ни параметров, ни возвращаемого значения и не являются реэнтерабельными; порядок их выполнения не регламентируется SWS CANDriver с. 78. Вниз по стеку драйвер не предоставляет callback-вызовов. Обращение к внешним CAN-контроллерам разрешено только через синхронные API MCAL, такие как SPI SWS CANDriver с. 76.

kontext EcuM EcuM Can Can (CAN-Treiber) EcuM->Can Can_Init / Can_DeInit SchM BSW Scheduler SchM->Can Can_MainFunction_* CanSM CanSM CanIf CanIf CanSM->CanIf Запросы режимов CanIf->CanSM Сообщения о режиме и Bus-off CanIf->Can Can_Write, Can_SetControllerMode, Can_CheckWakeup, Abfragen Can->EcuM EcuM_CheckWakeup, EcuM_SetWakeupEvent Can->CanIf CanIf_RxIndication, CanIf_TxConfirmation, CanIf_ControllerBusOff, CanIf_ControllerModeIndication HW CAN-Controller (Hardware) Can->HW Registerzugriff Det Det Can->Det Det_ReportError / Det_ReportRuntimeError Os Os Can->Os GetCounterValue HW->Can Interrupts / Statusflags

Контекстная диаграмма: Can инициализируется EcuM, циклически вызывается BSW Scheduler и используется CanIf. Он отправляет сообщения в CanIf, EcuM и DET, а также использует Os для таймаутов. Источники: [SWS_Can_00234], SWS CANDriver с. 45, SWS CANDriver с. 78

От включения питания до STARTED: состояния драйвера и контроллера

Драйвер в целом поддерживает только состояния CAN_UNINIT и CAN_READY. После сброса он находится в CAN_UNINIT. Can_Init инициализирует все контроллеры в соответствии с конфигурацией и затем переходит в CAN_READY. Can_DeInit переводит состояние модуля в CAN_UNINIT перед деинициализацией контроллеров [SWS_Can_00223] [SWS_Can_91002] SWS CANDriver с. 29.

Отдельно от этого каждый контроллер имеет четыре состояния из Can_ControllerStateType: CAN_CS_UNINIT, CAN_CS_STOPPED, CAN_CS_STARTED и CAN_CS_SLEEP [SWS_Can_91013].

  • В состоянии STOPPED контроллер инициализирован, но не участвует в работе шины и не отправляет ни кадров ошибок (Error Frames), ни подтверждений (Acknowledges).
  • STARTED — это нормальный рабочий режим.
  • SLEEP отличается от STOPPED только на аппаратном обеспечении с поддержкой спящего режима SWS CANDriver с. 31.

Can_Init переводит все контроллеры в состояние STOPPED SWS CANDriver с. 32. Can_DeInit переводит их из STOPPED или SLEEP в UNINIT [SWS_Can_91010] SWS CANDriver с. 38. Из состояния STARTED прямого перехода в UNINIT не существует SWS CANDriver с. 38.

controllerzustand reset Power-on-Reset UNINIT CAN_CS_UNINIT reset->UNINIT STOPPED CAN_CS_STOPPED UNINIT->STOPPED Can_Init STOPPED->UNINIT Can_DeInit STOPPED->STOPPED Can_SetBaudrate STARTED CAN_CS_STARTED STOPPED->STARTED Can_SetControllerMode(CAN_CS_STARTED) SLEEP CAN_CS_SLEEP STOPPED->SLEEP Can_SetControllerMode(CAN_CS_SLEEP) STARTED->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) или Bus-off (аппаратный) SLEEP->UNINIT Can_DeInit SLEEP->STOPPED Can_SetControllerMode(CAN_CS_STOPPED) или пробуждение от шины SLEEP->SLEEP Can_SetBaudrate

Диаграмма состояний: жизненный цикл CAN-контроллера. Программные вызовы и события на шине инициируют переходы; возврат в UNINIT выполняет только Can_DeInit из состояний STOPPED или SLEEP. Источники: [SWS_Can_91013], [SWS_Can_91010], SWS CANDriver с. 38, SWS CANDriver с. 34, SWS CANDriver с. 35

Каждый контроллер запускается отдельно с помощью Can_SetControllerMode(CAN_CS_STARTED) SWS CANDriver с. 29. Служба работает асинхронно: E_OK означает лишь то, что запрос был принят [SWS_Can_00230]. При каждом переходе в STARTED контроллер инициализируется заново, причем с конфигурацией, которая в последний раз использовалась Can_Init или Can_SetBaudrate SWS CANDriver с. 59. Аппаратное обеспечение может применить переключение с задержкой. Поэтому драйвер сообщает о достигнутом состоянии лишь впоследствии через CanIf_ControllerModeIndication; факт достижения целевого состояния контролируется вышележащим уровнем SWS CANDriver с. 33. Опрашиваемые смены режимов распознает Can_MainFunction_Mode [SWS_Can_00368]. Can_GetControllerMode синхронно запрашивает текущий режим [SWS_Can_91014].

Инициализация и запуск CAN-контроллераEcuMCanIf-Nutzer (z. B. CanSM)CanIfCanBSW SchedulerCAN-ControllerUse Case: InitialisierungCan_Init(Config)сконфигурировать все контроллерыController: CAN_CS_STOPPEDModul: CAN_READYUse Case: Controller einzeln startenCanIf_SetControllerMode(STARTED)Can_SetControllerMode(Controller, CAN_CS_STARTED)Neuinitialisierung,Start anfordernE_OK (Anforderung angenommen)E_OKloopпока переход не вступит в силуCan_MainFunction_Mode()Statusflag lesenCanIf_ControllerModeIndication(ControllerId, CAN_CS_STARTED)<User_ControllerModeIndication>

Диаграмма последовательности: инициализация с помощью EcuM и асинхронный запуск контроллера. Сообщение об успешном выполнении следует только после опроса в Can_MainFunction_Mode. Источники: [SWS_Can_00230], [SWS_Can_00368], SWS CANInterface с. 156, SWS CANDriver с. 29

Отправка через аппаратные дескрипторы передачи

CanIf передает запросы на отправку с помощью Can_Write(Hth, PduInfo). Hth указывает на аппаратный объект передачи и тем самым также на контроллер, поскольку номера HTH уникальны в пределах аппаратного блока (Hardware Unit) [SWS_Can_00233]. Can_HwHandleType по умолчанию охватывает диапазон 0..0x0FF, а при наличии более 255 аппаратных объектов — расширенный диапазон до 0xFFFF [SWS_Can_00429]. Can_PduType объединяет поля swPduHandle, length, id и sdu [SWS_Can_00415].

В Can_IdType два старших бита кодируют тип кадра [SWS_Can_00416]:

  • 00: CAN со стандартным ID
  • 01: CAN FD со стандартным ID
  • 10: CAN с расширенным ID
  • 11: CAN FD с расширенным ID

Таким образом можно смешивать кадры CAN 2.0 и CAN FD на уровне отдельных кадров, если для контроллера активна конфигурация скорости передачи FD SWS CANDriver с. 49 SWS CANInterface с. 71.

Can_Write должна быть потокобезопасной, так как CanIf_Transmit является реэнтерабельной. Драйвер возвращает CAN_BUSY, если нет свободного объекта передачи или если прерывающий вызов не может быть выполнен реэнтерабельно [SWS_Can_00039] SWS CANDriver с. 47. В этом случае CanIf буферизует запрос. Когда объект освобождается, CanIf снова вызывает Can_Write в порядке приоритета SWS CANInterface с. 48. swPduHandle драйвер удерживает до соответствующего CanIf_TxConfirmation SWS CANDriver с. 35. Для защиты от инверсии приоритетов можно статически сконфигурировать мультиплексированную передачу (Multiplexed Transmission); при этом несколько аппаратных объектов образуют один HTH SWS CANDriver с. 40.

Отправка L-PDU с подтверждениемCanIfCanCAN-ControllerBSW SchedulerCan_Write(Hth, PduInfo)altHardware-Sendeobjekt freiswPduHandle je HTH merkenL-PDU ins Hardwareobjekt,Запустить отправкуE_OKнет свободного объекта или исполнение не реентерабельноCAN_BUSYБуферизовать L-PDU в CanIfTxBufferКадр отправлен и подтвержден шинойaltInterrupt-BetriebTX-InterruptPolling-BetriebCan_MainFunction_Write()проверить ожидающие подтвержденияCanIf_TxConfirmation(swPduHandle)optбуферизованный L-PDU для этого HTHCan_Write(Hth, L-PDU с наивысшим приоритетом)

Диаграмма последовательности: запрос на отправку с путями E_OK и CAN_BUSY, затем подтверждение по прерыванию или опросу. После этого CanIf может передать буферизованный L-PDU. Источники: [SWS_Can_00233], [SWS_Can_00039], SWS CANInterface с. 142, SWS CANInterface с. 48

Прием и циклические основные функции

При приеме драйвер вызывает CanIf_RxIndication. Он передает ID, аппаратный объект и абстрактный CanIf-ControllerId, а также длину и указатель на L-SDU. Для расширенных кадров он устанавливает MSB в ID, чтобы CanIf распознал тип кадра SWS CANDriver с. 43. Опционально перед этим подключается конфигурируемый callout для L-PDU <LPDU_CalloutName> [SWS_Can_00443]. Если он возвращает false, то, согласно фрагменту документации (R25-11), L-PDU дальше не обрабатывается SWS CANDriver с. 77.

События распознаются по прерыванию или путем опроса флагов состояния. Чистый режим опроса вообще без прерываний должен быть конфигурируемым. При опросе основные функции вызывают те же callback-функции, только из контекста задачи, а не ISR SWS CANDriver с. 41. Каждая основная функция опрашивает один тип событий:

  • Can_MainFunction_Write: подтверждения передачи (TX) [SWS_Can_00225]
  • Can_MainFunction_Read: индикации приема (RX) [SWS_Can_00226]
  • Can_MainFunction_BusOff: события bus-off [SWS_Can_00227]
  • Can_MainFunction_Wakeup: события пробуждения (wakeup) [SWS_Can_00228]
  • Can_MainFunction_Mode: переходы между режимами [SWS_Can_00368]

Описания Read и Write в R20-11 упоминают только случай POLLING [SWS_Can_00225] [SWS_Can_00226]. Фрагменты документации более поздних релизов дополняют это значением MIXED; в этом случае опрашиваются только объекты с CanHardwareObjectUsesPolling = TRUE SWS CANDriver с. 81 SWS CANDriver с. 79. Требования R20-11 это расширение не подтверждают. Если через CanMainFunctionRWPeriods сконфигурировано несколько периодов, имена функций получают суффикс _<ShortName> [SWS_Can_00441] SWS CANDriver с. 122. При полном отсутствии опроса основная функция может быть реализована как пустой define SWS CANDriver с. 81.

Прием L-PDU в режиме опросаBSW SchedulerCanCAN-ControllerL-PDU-CalloutCanIfCanIf-NutzerloopzyklischCan_MainFunction_Read()проверить наличие новых L-PDUaltneue L-PDU vorhandenID normieren (Extended: MSB = 1),Daten ggf. in angepassten PufferoptL-PDU-Callout konfiguriert<LPDU_CalloutName>(Hrh, CanId, CanDataLegth, CanSduPtr)true / falseпри false: отбросить L-PDUCanIf_RxIndication(Mailbox, PduInfoPtr)Индикация приема пользователюнет нового L-PDU

Диаграмма последовательности: прием в режиме опроса с нормализацией ID, опциональным callout для L-PDU и передачей в CanIf. Источники: [SWS_Can_00226], [SWS_Can_00443], SWS CANInterface с. 153, SWS CANDriver с. 43

Sleep, Wakeup и управление прерываниями

Драйвер обрабатывает только те события пробуждения, которые контроллер распознает самостоятельно, но не события через трансивер SWS CANDriver с. 45. При аппаратном пробуждении контроллер переходит из SLEEP в STOPPED. Вызвавший пробуждение L-PDU дальше не обрабатывается. EcuM_CheckWakeup вызывается в прерывании или в Can_MainFunction_Wakeup с источником, сконфигурированным через CanWakeupSourceRef SWS CANDriver с. 35. Затем EcuM вызывает через CanIf Can_CheckWakeup. Эта функция сообщает о распознанном пробуждении через EcuM_SetWakeupEvent [SWS_Can_00360] SWS CANDriver с. 63. Валидацию для защиты от ложных пробуждений EcuM и CanIf выполняют без участия драйвера SWS CANDriver с. 45.

Can_DisableControllerInterrupts и Can_EnableControllerInterrupts являются реэнтерабельными и действуют вложенно. После n вызовов отключения требуется n вызовов включения. Вызов включения без предшествующего отключения не имеет эффекта [SWS_Can_00231] [SWS_Can_00232] SWS CANDriver с. 61 SWS CANDriver с. 62.

Пробуждение от шины CANCAN-ControllerCanEcuMCanIfUse Case: Controller in CAN_CS_SLEEPСобытие пробуждения от шиныaltInterrupt-BetriebWakeup-ISRPolling-BetriebCan_MainFunction_Wakeup()Controller SLEEP -> STOPPED,не обрабатывать вызвавший пробуждение L-PDUEcuM_CheckWakeup(источник из CanWakeupSourceRef)Проверить источник пробуждения через CanIfCan_CheckWakeup(Controller)optWakeup erkanntEcuM_SetWakeupEventE_OKValidierung gegen Fehlwakeupsмодулями EcuM и CanIf, без Can

Диаграмма последовательности: пробуждение по шине из состояния SLEEP, уведомление EcuM и обратный запрос через CanIf с помощью Can_CheckWakeup. Источники: [SWS_Can_00360], [SWS_Can_00228], SWS CANDriver с. 45, SWS CANDriver с. 35.

Наборы конфигурации, разделы и привязка к экземпляру

Can_Init получает указатель на Can_ConfigType. Эта аппаратно-зависимая структура содержит настройки для всех контроллеров и ссылки на отдельные конфигурации контроллеров [SWS_Can_00223] [SWS_Can_00413]. Модуль поддерживает VARIANT-PRE-COMPILE и VARIANT-POST-BUILD SWS CANDriver с. 96. В примере Post-build при вызове Can_Init выбирается один из нескольких наборов конфигурации EXP LayeredSoftwareArchitecture с. 120. Для каждого контроллера CanController определяет, помимо прочего, CanRxProcessing, CanTxProcessing, CanBusoffProcessing, CanWakeupProcessing и как минимум одну CanControllerBaudrateConfig SWS CANDriver с. 101.

В многораздельных системах (Multi-Partition) модуль работает в каждом разделе как независимый экземпляр. Вызов API действует только в пределах своего раздела [SWS_Can_CONSTR_00508]. Для назначения разделов действуют три правила:

  • Разделы в CanControllerEcucPartitionRef должны быть подмножеством разделов в CanEcucPartitionRef [SWS_Can_CONSTR_00509].
  • Контроллер и приемопередающий канал коммуникационного канала ссылаются на один и тот же раздел [SWS_Can_CONSTR_00510].
  • Неподдерживаемые назначения драйвер отклоняет [SWS_Can_00507].

Несколько модулей Can в одном электронном блоке управления (ECU) различаются измененным функциональным префиксом SWS CANDriver с. 51.

Поведение при ошибке

При активной Development Error Detection драйвер сообщает об ошибках разработки в DET. Коды варьируются от CAN_E_PARAM_POINTER (0x01) через CAN_E_UNINIT (0x05) и CAN_E_TRANSITION (0x06) до CAN_E_INIT_FAILED (0x09) [SWS_Can_91019]. После возврата из DET функция немедленно завершает работу; функции с возвращаемым значением при этом возвращают E_NOT_OK SWS CANDriver с. 48. Несколько примеров:

  • Can_DeInit сообщает CAN_E_TRANSITION, пока контроллер находится в состоянии STARTED [SWS_Can_91012] SWS CANDriver с. 59.
  • Для недопустимых переходов в Can_SetControllerMode предусмотрен CAN_E_TRANSITION. В серийном коде их поведение не определено SWS CANDriver с. 30 SWS CANDriver с. 32.

В качестве ошибки времени выполнения определен CAN_E_DATALOST для потерянных принятых сообщений [SWS_Can_91020]. Предположительно, о ней сообщается через требуемый Det_ReportRuntimeError [SWS_Can_00234]. Вопрос Q-50225b25430c9660 (открытый)

Если контроллер переходит в Bus-off, он переключается из STARTED в STOPPED. Драйвер не выполняет аппаратного восстановления. Он сообщает о событии через прерывание или в Can_MainFunction_BusOff через CanIf_ControllerBusOff [SWS_Can_00227] SWS CANDriver с. 35. Восстановление берет на себя CanSM, которого CanIf информирует с помощью CanSM_ControllerBusOff SWS CANInterface с. 138. Интерпретация: перезапуск, предположительно, снова выполняется через Can_SetControllerMode(CAN_CS_STARTED), который при этом заново загружает конфигурацию SWS CANDriver с. 59. Вопрос Q-83e484ab9f8b1aac (открытый)

Обнаружение и оповещение о Bus-offCAN-ControllerCanBSW SchedulerCanIfCanSMController erreicht Bus-offaltInterrupt-BetriebBus-off-InterruptPolling-BetriebCan_MainFunction_BusOff()Statusbit lesenSTARTED -> STOPPED,без аппаратного восстановленияCanIf_ControllerBusOff(ControllerId)CanSM_ControllerBusOffВосстановление после Bus-off возложено на CanSMUse Case: Neustart (Interpretation)Neustart anfordern (Interpretation)Can_SetControllerMode(Controller, CAN_CS_STARTED)Повторная инициализация сzuletzt verwendeter Konfiguration

Диаграмма последовательности: обнаружение и передача сообщения о Bus-off вплоть до CanSM. Перезапуск, помеченный как интерпретация, явным образом не подтвержден. Источники: [SWS_Can_00227], [SWS_Can_00234], SWS CANDriver с. 35, SWS CANInterface с. 138

Для диагностики Can_GetControllerErrorState возвращает состояние ошибки: ACTIVE, PASSIVE или BUSOFF [SWS_Can_91004] [SWS_Can_91003]. Счетчики ошибок Rx и Tx также могут быть запрошены. Если контроллер их не предоставляет, функции возвращают E_NOT_OK. Поскольку аппаратура ведет счетчики асинхронно, эти значения не подходят для предположений о состоянии шины [SWS_Can_00511] [SWS_Can_00516] SWS CANDriver с. 67. Can_ErrorType описывает надмножество типичных типов аппаратных ошибок, от битовых ошибок до Bus-Lock [SWS_Can_91021].

Для защиты от неотвечающего аппаратного обеспечения драйвер использует OsCounter для тайм-аутов SWS CANDriver с. 23. Если смена режима не вступает в силу в течение CanTimeoutDuration, Can_SetControllerMode выходит из функции вместо блокировки SWS CANDriver с. 33. Если во время перехода в режим Sleep происходит пробуждение по шине (Bus-Wakeup), Can_SetControllerMode(CAN_CS_STOPPED) возвращает E_NOT_OK SWS CANDriver с. 35.

Дальнейшие подробные доказательства

Многие фрагменты документов взяты из версий с R23-11 по R25-11. Нормативными для R20-11 являются цитируемые требования. Непосредственно из R20-11 взята схема состояний SWS CANDriver с. 38.

Руководство, сгенерированное ИИ на основе требований и фрагментов документов для R20-11, предоставленных в полезной нагрузке. Допущения отмечены как интерпретация; определяющей остается спецификация.

CAN Driver (Can)

The CAN driver provides hardware-dependent access to the internal and external CAN controllers (CAN 2.0B, CAN FD, CAN XL).

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

функция Can_Init [SWS_Can_00223] 📄 PDF

void Can_Init (const Can_ConfigType* Config);

This function initializes the module.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 8afbe47dbadd Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Синхронная, нереентерабельная функция Can_Init инициализирует весь модуль драйвера CAN, а также соответствующие аппаратные блоки в соответствии с переданной конфигурацией [SWS_Can_00223].

Использование и контекст вызова

Вызов Can_Init обязательно выполняется менеджером состояния ECU (ECU State Manager) во время фазы запуска блока управления, еще до того, как будет разрешено вызвать любую другую функцию драйвера CAN [SWS_Can_91012]. В качестве параметра функция принимает через Config указатель на конфигурацию драйвера (const Can_ConfigType*) и не возвращает значения [SWS_Can_00223].

Объем инициализации и переходы состояний

В рамках инициализации функция устанавливает все необходимые аппаратные регистры и инициализирует все CAN-контроллеры AUTOSAR_SWS_CANDriver с. 33:

  • инициализация статических переменных и внутренних флагов [SWS_Can_91012],
  • конфигурация общих настроек для всего аппаратного блока CAN [SWS_Can_91012],
  • специфичные для контроллера настройки для каждого отдельного CAN-контроллера [SWS_Can_91012].

Вызов функции запускает переходы состояний аппаратного обеспечения CAN AUTOSAR_SWS_CANDriver с. 10, при этом Can_Init выполняет конфигурацию регистров для перевода контроллеров в предусмотренное базовое состояние [SWS_Can_91010] AUTOSAR_SWS_CANDriver с. 36.

Параллелизм и ограничения

Поскольку Can_Init специфицирована как нереентерабельная, параллельный или повторный вызов во время выполняющейся инициализации недопустим [SWS_Can_00223]. Кроме того, определенные глобальные настройки аппаратного блока могут быть заданы исключительно внутри Can_Init AUTOSAR_SWS_CANDriver с. 33.

Это указание по использованию было сгенерировано автоматически на основе данных спецификации AUTOSAR Classic R20-11.

Руководство разработчика реализации в подготовке (сложность I1)

функция Can_DeInit [SWS_Can_91002] 📄 PDF

void Can_DeInit (void);

This function de - initializes the module.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 982976925c7a Происхождение Открытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Функция Can_DeInit служит для деинициализации модуля драйвера CAN ([SWS_Can_91002]). Она имеет сигнатуру void Can_DeInit(void), не принимает параметров, не возвращает значения и выполняется синхронно, а также нереентерабельно ([SWS_Can_91002]). Интерфейс доступен через заголовок Can.h ([SWS_Can_91002]).

Вызов инициирует программно управляемый переход состояния (AUTOSAR_SWS_CANDriver с. 10; AUTOSAR_SWS_CANDriver с. 41). При этом Can_DeInit меняет состояние модуля (AUTOSAR_SWS_CANDriver с. 33) и сбрасывает все CAN-контроллеры (AUTOSAR_SWS_CANDriver с. 41).

Параллелизм и ограничения

Для выполнения действуют строгие предусловия и требования к последовательности относительно состояний аппаратного обеспечения и модуля:

  • Вызывающая сторона должна убедиться, что ни один CAN-контроллер не находится в недопустимом состоянии (AUTOSAR_SWS_CANDriver с. 61); предположительно, активные процессы коммуникации должны быть предварительно завершены. Вопрос Q-311343fa42add3a3 (открытый)
  • Если модуль CAN при вызове не находится в требуемом исходном состоянии (AUTOSAR_SWS_CANDriver с. 41), функция сообщает об ошибке CAN_E_TRANSITION (AUTOSAR_SWS_CANDriver с. 61).
  • Аналогично ошибка CAN_E_TRANSITION генерируется, если CAN-контроллер остается в состоянии, препятствующем деинициализации (AUTOSAR_SWS_CANDriver с. 61). Интерпретация: драйвер, вероятно, требует остановленного состояния всех контроллеров перед переходом. Вопрос Q-435095949dafba5c (открытый)

Взаимодействие

Поведение при ошибках и переходах отражает скорректированные процессы драйвера, согласно которым недействительные переходы состояний единообразно перехватываются ([SWS_Can_00441]).

Этот текст был сгенерирован ИИ на основе спецификации AUTOSAR CP R20-11.

функция Can_SetBaudrate [SWS_CAN_00491] 📄 PDF

Std_ReturnType Can_SetBaudrate (uint8 Controller, uint16 BaudRateConfig ID); ⚠️

This service shall set the baud rate configuration of the CAN controller. Depending on necessary baud rate modifications the controller might have to reset.

функция Can_SetControllerMode [SWS_Can_00230] 📄 PDF

Std_ReturnType Can_SetControllerMode (uint8 Controller, Can_ControllerStateType Transition);

This function performs software triggered state transitions of the CAN controller State machine.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: a4b356b48b8a Происхождение Открытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Функция Can_SetControllerMode (предоставляемая через Can.h с Service-ID 0x03) выполняет программно инициированные переходы состояний конечного автомата CAN-контроллера ([SWS_Can_00230], AUTOSAR_SWS_CANDriver с. 35). Она выполняет аппаратные настройки регистров, чтобы вызвать переходы между базовыми состояниями контроллера UNINIT, STOPPED, STARTED и SLEEP ([SWS_Can_91010], AUTOSAR_SWS_CANDriver §7.3 «CAN Controller State Machine»).

Использование и семантика

Вызов осуществляется с параметром Controller для идентификации CAN-контроллера, а также с Transition типа Can_ControllerStateType для задания желаемого перехода состояния ([SWS_Can_00230]). Служба определена как асинхронная и нереентерабельная (Non Reentrant) ([SWS_Can_00230]). Возвращаемое значение E_OK подтверждает, что запрос был принят; E_NOT_OK указывает на то, что запрос был отклонен и имеет место ошибка разработки ([SWS_Can_00230], [SWS_Can_00441]).

Порядок выполнения и взаимодействие

После установки конфигурации регистров происходит выход из Can_SetControllerMode (AUTOSAR_SWS_CANDriver с. 38). Поскольку модуль Can сам не сохраняет смену состояний аппаратного обеспечения ([SWS_Can_91010]), циклическая функция Can_Mainfunction_Mode, вероятно, берет на себя асинхронное завершение или проверку перехода, инициированного Can_SetControllerMode (AUTOSAR_SWS_CANDriver с. 38). Вопрос Q-03edb1b665a1624b (открытый)

Этот текст был сгенерирован ИИ на основе данных спецификации AUTOSAR R20-11.

Руководство разработчика реализации в подготовке (сложность I1)

функция Can_DisableControllerInterrupts [SWS_Can_00231] 📄 PDF

void Can_DisableControllerInterrupts (uint8 Controller);

This function disables all interrupts for this CAN controller.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 9d72b1d46d5d Происхождение Открытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Синхронная и реентерабельная функция Can_DisableControllerInterrupts деактивирует все прерывания для указанного CAN-контроллера ([SWS_Can_00231]). Передача осуществляется через параметр Controller без возвращаемого значения ([SWS_Can_00231]).

Что касается контекста вызова и параллелизма, функция спроектирована как реентерабельная и поддерживает многократные вызовы (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»). Интерпретация: многократный вызов, вероятно, увеличивает внутренний счетчик вложенности, так что прерывания снова активируются только после соответствующего количества разрешающих вызовов (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts», AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»). Вопрос Q-61be56207aa92ee0 (открытый)

В области обработки ошибок спецификация требует генерации ошибки CAN_E_UNINIT, если модуль драйвера при вызове еще не инициализирован (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»). Кроме того, спецификация требует генерации еще одной ошибки (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»); вероятно, это служит для проверки на недействительный идентификатор контроллера. Вопрос (открытый)

Во взаимодействии внутри драйвера CAN вызов служит для защиты связанных с контроллером критических секций, в то время как контроллер остается активным (AUTOSAR_SWS_CANDriver §7.5 «Interrupt handling»). Формальные очистки и исторические изменения интерфейса драйвера задокументированы в примечаниях к релизу ([SWS_Can_00441]).

Этот текст был создан ИИ и служит дополнительным указанием по использованию к спецификации.

функция Can_EnableControllerInterrupts [SWS_Can_00232] 📄 PDF

void Can_EnableControllerInterrupts (uint8 Controller);

This function enables all allowed interrupts.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 374e141963cb Происхождение Открытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Синхронная и реентерабельная функция Can_EnableControllerInterrupts повторно активирует все допустимые прерывания для CAN-контроллера, указанного через параметр Controller ([SWS_Can_00232]). Она не имеет возвращаемого значения и предоставляется через заголовочный файл Can.h ([SWS_Can_00232]).

Что касается процесса, функция считывает программные управляющие флаги (AUTOSAR_SWS_CANDriver с. 65). Если прерывания контроллера ранее были деактивированы многократно, Can_EnableControllerInterrupts перед фактической активацией должна быть вызвана столько же раз (AUTOSAR_SWS_CANDriver с. 65). Интерпретация: драйвер, вероятно, управляет вложенными участками блокировки через внутренние счетчики или флаги, так что аппаратные прерывания активируются только после полной компенсации всех вызовов деактивации. Вопрос Q-6781f0fc9ad7d221 (открытый)

Если функция вызывается до того, как драйвер CAN был надлежащим образом инициализирован, она сообщает об ошибке CAN_E_UNINIT (AUTOSAR_SWS_CANDriver с. 66). В контексте драйвера это, вероятно, обрабатывается как Development Error ([SWS_Can_00441]). Вопрос Q-efbbcf03a2589e4e (открытый) В неинициализированном состоянии функция не выполняет никаких дальнейших действий над контроллером (AUTOSAR_SWS_CANDriver с. 66).

Это указание по использованию было сгенерировано автоматически на основе спецификации.

функция Can_CheckWakeup [SWS_Can_00360] 📄 PDF

Std_ReturnType Can_CheckWakeup (uint8 Controller);

This function checks if a wakeup has occurred for the given controller.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 720a4fc64f2a Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Использование и поведение

Синхронная функция Can_CheckWakeup проверяет для определенного CAN-контроллера, было ли обнаружено событие Wake-up ([SWS_Can_00360], AUTOSAR_SWS_CANDriver с. 48, AUTOSAR_SWS_CANDriver с. 67). Она доступна через заголовочный файл Can.h и имеет Service-ID 0x0b ([SWS_Can_00360]).

  • Параметр: Controller (in) обозначает идентификатор CAN-контроллера, состояние которого должно быть проверено на наличие Wake-up ([SWS_Can_00360]).
  • Возвращаемое значение: возвращает Std_ReturnType. Возвращаемое значение E_OK сигнализирует о том, что вызов API был принят, тогда как E_NOT_OK указывает на отклонение ([SWS_Can_00360]).
  • Параллелизм: функция определена как нереентерабельная (Non Reentrant) ([SWS_Can_00360]).

Конфигурация и обработка ошибок

Доступность функции конфигурируется во время предварительной компиляции; служба Can_CheckWakeup с помощью этого может быть включена в код или удалена из него (AUTOSAR_SWS_CANDriver с. 67, AUTOSAR_SWS_CANDriver с. 97). Если функция вызывается до того, как был инициализирован драйвер CAN, она сообщает об ошибке CAN_E_UNINIT (AUTOSAR_SWS_CANDriver с. 67).

Взаимодействие

Вызов Can_CheckWakeup обычно инициируется интерфейсом CAN-Interface (AUTOSAR_SWS_CANDriver с. 48). В случае события Wake-up на шине CanIf_CheckWakeup может вызываться во время обработки EcuM_CheckWakeup (AUTOSAR_SWS_CANInterface §7.18.4.1 «Wake-up detection»). Согласно [SWS_CANIF_00395], CanIf при этом опрашивает через Can_CheckWakeup() или CanTrcv_CheckWakeup(), какое конкретное аппаратное устройство вызвало Bus-Wake-up (AUTOSAR_SWS_CANInterface с. 55).

Это указание по использованию было создано автоматически и основано исключительно на спецификациях релиза AUTOSAR R20-11.

функция Can_GetControllerRxErrorCounter [SWS_Can_00511] 📄 PDF

Std_ReturnType Can_GetControllerRxErrorCounter (uint8 ControllerId, uint8* RxErrorCounterPtr);

Returns the Rx error counter for a CAN controller. This value might not be available for all CAN controllers, in which cas e E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Rx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.

функция Can_GetControllerTxErrorCounter [SWS_Can_00516] 📄 PDF

Std_ReturnType Can_GetControllerTxErrorCounter (uint8 ControllerId, uint8* TxErrorCounterPtr);

Returns the Tx error counter for a CAN controller. This value might not be available for all CAN controllers, in which case E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Tx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.

функция Can_Write [SWS_Can_00233] 📄 PDF

Std_ReturnType Can_Write (Can_HwHandleType Hth, const Can_PduType* PduInfo);

This function is called by Can If to pass a CAN message to Can Drv for transmission.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: f2d4ad3f2f32 Происхождение Открытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Использование и семантика

Функция Can_Write вызывается синхронно модулем CanIf, чтобы передать CAN-сообщение для передачи в драйвер CAN (CanDrv) ([SWS_Can_00233]). При этом вызывающая сторона передает два параметра:

  • Hth: аппаратный дескриптор отправки, определяющий используемый объект отправки и неявно определяющий контроллер, поскольку номера дескрипторов уникальны в пределах аппаратного блока ([SWS_Can_00233]).
  • PduInfo: указатель на структуру с полезными данными SDU, длиной данных и CAN-идентификатором ([SWS_Can_00233]).

Перед отправкой функция проверяет адресованный аппаратный объект отправки (SWS_CANDriver с. 73) и сохраняет переданный swPduHandle (SWS_CANDriver с. 43). Через возвращаемое значение типа Std_ReturnType (SRS_BSWGeneral §5.2.3.6 «Types and keywords») E_OK сигнализирует о принятии задания, тогда как CAN_BUSY указывает на то, что аппаратный буфер отправки недоступен ([SWS_Can_00233], SWS_CANDriver с. 51).

Обработка ошибок

Если во время выполнения возникает ошибка разработки, функция возвращает E_NOT_OK ([SWS_Can_00233], [SWS_Can_00441]). Интерпретация: специфические коды ошибок DET в доступном фрагменте явно не названы; однако ошибочные дескрипторы или недействительные указатели, вероятно, приводят к возврату E_NOT_OK. Вопрос Q-ca947a7e0e4fd7d6 (открытый)

Параллелизм и ограничения

Can_Write специфицирована как реентерабельная или потокобезопасная (thread-safe) ([SWS_Can_00233], SWS_CANDriver с. 49). Если вытесняющий вызов со стороны драйвера не может быть выполнен реентерабельно, об этом CanIf также сообщается через возвращаемое значение CAN_BUSY ([SWS_Can_00233]). Вызывающая сторона должна гарантировать, что память PDU остается неизменной и валидной до возврата из вызова функции (SWS_CANDriver с. 45).

Взаимодействие

Через [SWS_Can_00416] при вызове передается, о каком типе PDU идет речь (SWS_CANDriver с. 51), причем драйвер поддерживает передачу вплоть до максимальной длины PDU (SWS_CANDriver с. 52).

Это указание по использованию было сгенерировано автоматически на основе документов спецификации AUTOSAR R20-11.

функция <LPDU_CalloutName> [SWS_Can_00443] 📄 PDF

boolean <LPDU_CalloutName> (uint8 Hrh, Can_IdType CanId, uint8 CanDataLegth, const uint8* CanSduPtr);

-

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 3538baa0cf7b Происхождение Открытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Использование и контекст вызова

Конфигурируемый интерфейс call-out <LPDU_CalloutName> опционально вызывается CAN-модулем AUTOSAR при каждом приёме L-PDU (SWS_CANDriver §8.4.1 «Call-out function»). Объявление функции предоставляется через заголовочный файл Can_Externals.h ([SWS_Can_00443]). Фактическое имя функции конфигурируется для конкретного проекта ([SWS_Can_00443]).

В качестве входных параметров передаются аппаратный дескриптор приёма Hrh, идентификатор CanId, длина данных CanDataLegth, а также указатель на полезные данные CanSduPtr ([SWS_Can_00443]).

Фильтрация и возвращаемое значение

Функция возвращает значение типа boolean. Если call-out возвращает false, принятый L-PDU не подлежит дальнейшей обработке ([SWS_Can_00444]). Интерпретация: если вызов возвращает true, вероятно, происходит штатная передача L-PDU вышележащим уровням. Вопрос Q-e96e75e93881c3af (открытый)

Параллелизм и ограничения

Функция снабжена Service-ID 0x20 и специфицирована как асинхронная (Asynchronous), а также нереентерабельная (Non Reentrant) ([SWS_Can_00443]). Поскольку она не является реентерабельной, параллельные вызовы в одном и том же контексте не допускаются.

Этот текст сгенерирован ИИ и служит в качестве справочного руководства. Обязательную силу имеют требования спецификации AUTOSAR.

функция Can_MainFunction_Write [SWS_Can_00225] 📄 PDF

void Can_MainFunction_Write (void);

This function performs the polling of TX confirmation when CAN_ TX_ PROCESSING is set to POLLING.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: a6cd22a9e2b1 Происхождение Открытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Функция Can_MainFunction_Write выполняет циклический опрос подтверждений отправки (TX-Confirmation), если параметр CAN_TX_PROCESSING сконфигурирован на POLLING [SWS_Can_00225], AUTOSAR SWS CAN Driver §7 «Scheduled functions». Она не имеет параметров (void Can_MainFunction_Write(void)), имеет Service-ID 0x01 и предоставляется планировщику через заголовочный файл SchM_Can.h [SWS_Can_00225]. С помощью конфигурационных переключателей функция может быть активирована или деактивирована для обработки передачи PDU AUTOSAR SWS CAN Driver §10 «CanMainFunctionWrite».

Если опрос для процессов отправки вообще не используется в системе, Can_MainFunction_Write, согласно спецификации, должна быть реализована как пустой define AUTOSAR SWS CAN Driver §7 «Scheduled functions». Это, вероятно, позволяет избежать ненужных накладных расходов планировщика в системах, управляемых исключительно прерываниями. Вопрос Q-2152a35397130945 (открытый)

Во взаимодействии с Can_MainFunction_Read и Can_MainFunction_BusOff процедура формирует циклический интерфейс драйвера к SchM AUTOSAR SWS CAN Driver §7 «Scheduled functions». Обработка подтверждений происходит в зависимости от режима непосредственно на аппаратном ресурсе или в контексте Can_MainFunction_Write AUTOSAR SWS CAN Driver §7 «Hardware Resources». Конкретный вызов и сопоставление определяются соответствующими элементами, на которые даны ссылки AUTOSAR SWS CAN Driver §10 «CanMainFunctionWrite», AUTOSAR SWS CAN Driver §10 «Call Context», при поддержке обработки Tx, ориентированной на контроллер [SWS_Can_00441].

Это указание по использованию было автоматически сгенерировано на основе спецификации AUTOSAR R20-11.

функция Can_MainFunction_Read [SWS_Can_00226] 📄 PDF

void Can_MainFunction_Read (void);

This function performs the polling of RX indications when CAN_ RX_ PROCESSING is set to POLLING.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 2c7a6a6247b4 Происхождение Открытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Функция Can_MainFunction_Read служит для циклического опроса (polling) сообщений приема CAN ([SWS_Can_00226]). Она имеет сигнатуру void Can_MainFunction_Read (void) с Service-ID 0x08 и предоставляется через заголовочный файл SchM_Can.h для управления выполнением ([SWS_Can_00226]).

Использование и конфигурация

Функция выполняет опрос индикаций RX, если параметр конфигурации CAN_RX_PROCESSING установлен в POLLING ([SWS_Can_00226]). В системе эта обработка может быть сконфигурирована по контроллерам ([SWS_Can_00441]). Если в драйвере CAN опрос вообще не используется, Can_MainFunction_Read может быть определена как пустой макрос (AUTOSAR_SWS_CANDriver с. 77).

Параллелизм и ограничения

Вызов происходит периодически в контексте планировщика в соответствии с параметризованным периодом триггера (AUTOSAR_SWS_CANDriver с. 22). Для выполнения действуют строгие условия:

  • Функция не должна прерываться самой собой (AUTOSAR_SWS_CANDriver с. 47).
  • В целом основные функции CAN, такие как Can_MainFunction_Read, не должны прерываться (AUTOSAR_SWS_CANDriver с. 49), чтобы обеспечить согласованный доступ к ресурсам драйвера и аппаратного обеспечения в режиме опроса (AUTOSAR_SWS_CANDriver с. 46).

Интерпретация: сконфигурированный интервал вызова задачи, вероятно, должен быть рассчитан таким образом, чтобы фаза обработки всегда завершалась до начала следующего цикла, поскольку реентерабельность недопустима (AUTOSAR_SWS_CANDriver с. 47). Вопрос Q-1f2fa9db14970b12 (открытый)

Этот текст был сгенерирован ИИ на основе спецификации AUTOSAR R20-11.

функция Can_MainFunction_BusOff [SWS_Can_00227] 📄 PDF

void Can_MainFunction_BusOff (void);

This function performs the polling of bus - off events that are configured statically as 'to be polled'.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: d6a62aee0c17 Происхождение Открытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Запланированная основная функция Can_MainFunction_BusOff служит для циклического опроса событий Bus-Off CAN-контроллеров, если они статически сконфигурированы для опроса [SWS_Can_00227], [SWS_Can_00109]. Она имеет сигнатуру void Can_MainFunction_BusOff(void), не принимает параметров, не возвращает значения и предоставляется через заголовок SchM_Can.h для управления выполнением [SWS_Can_00227].

Использование и взаимодействие

Аппаратные события могут фиксироваться в драйвере CAN либо по прерыванию, либо путем опроса соответствующих флагов состояния, при этом конфигурация опроса зависит от аппаратного обеспечения [SWS_Can_00099]. Драйвер также может быть сконфигурирован таким образом, чтобы полностью отказаться от прерываний [SWS_Can_00007]. Если опрос не применяется во всей системе вообще, модулю Can разрешается реализовать функцию как пустой макрос [SWS_Can_00183].

Если в Can_MainFunction_BusOff событие Bus-Off обнаруживается через биты состояния, модуль выполняет необходимые настройки регистров — например, во избежание автоматического аппаратного восстановления SWS_CANDriver §7.3 «CAN Controller State Machine», [SWS_Can_91010]. Затем модуль уведомляет вышележащий уровень CanIf через соответствующий callback, в котором происходит программное изменение состояния контроллера SWS_CANDriver §7.3 «CAN Controller State Machine».

Контекст вызова и ограничения

При работе методом опроса контекстом вызова уведомления обратного вызова является не ISR, а исполняющая задача Can_MainFunction_BusOff; тем не менее все функции обратного вызова должны быть реализованы так, как если бы они вызывались из контекста ISR SWS_CANDriver §7.9 «Notification concept». Относительно реентерабельности payload не содержит явных указаний; вероятно, функция является нереентерабельной, поскольку она обращается к глобальным регистрам и состояниям контроллера. Вопрос Q-38fcd72c40ce3e66 (открытый)

Это указание по использованию было сгенерировано ИИ и основано исключительно на фрагментах спецификации версии AUTOSAR R20-11.

функция Can_MainFunction_Wakeup [SWS_Can_00228] 📄 PDF

void Can_MainFunction_Wakeup (void);

This function performs the polling of wake - up events that are configured statically as 'to be polled'.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: ce643213c50c Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Основная функция Can_MainFunction_Wakeup выполняет циклический опрос событий Wake-up, которые статически сконфигурированы как подлежащие опросу ([SWS_Can_00228]). Функция имеет сигнатуру void Can_MainFunction_Wakeup(void), не принимает параметров, не возвращает значения и предоставляется через заголовок SchM_Can.h для Schedule Manager (AUTOSAR_SWS_CANDriver с. 79). Период выполнения функции конфигурируется в секундах (AUTOSAR_SWS_CANDriver с. 92).

В рамках конечного автомата CAN-контроллера (SWS_CANDriver §7.3 «CAN Controller State Machine») внешние аппаратные события Wakeup вместо прерываний могут сигнализироваться через бит состояния, опрашиваемый в Can_MainFunction_Wakeup ([SWS_Can_91010]). Кроме того, функция при переходах состояний опрашивает соответствующий флаг регистра состояния CAN до тех пор, пока он не просигнализирует о вступлении изменения в силу ([SWS_Can_00370]). После успешной смены состояния драйвер CAN сообщает о новом состоянии с помощью функции обратного вызова CanIf_ControllerModeIndication интерфейсу CAN-Interface применительно к абстрактному CanIf ControllerId ([SWS_Can_00370]).

Что касается конфигурации и использования ресурсов, API Can_MainFunction_Wakeup() для обработки событий Wakeup может быть активирован или деактивирован (AUTOSAR_SWS_CANDriver с. 97). Если в блоке управления опрос для событий Wakeup вообще не используется, Can_MainFunction_Wakeup может быть определен как пустой макрос (AUTOSAR_SWS_CANDriver с. 79).

Это указание по использованию было сгенерировано автоматически на основе спецификации AUTOSAR CP R20-11.

функция Can_MainFunction_Mode [SWS_Can_00368] 📄 PDF

void Can_MainFunction_Mode (void);

This function performs the polling of CAN controller mode transitions.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: feee99301166 Происхождение Открытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Использование и принцип работы

Запланированная основная функция Can_MainFunction_Mode ([SWS_Can_00368]) выполняет опрос переходов состояний CAN-контроллеров. Она не имеет ни входных параметров, ни возвращаемого значения (void Can_MainFunction_Mode(void), Service-ID 0x0c) и объявляется через заголовок SchM_Can.h SWS_CANDriver §8.5.1.5 «Can_MainFunction_Mode».

Функция непрерывно вызывается циклически (AUTOSAR_SWS_CANInterface с. 143). Она проверяет аппаратное обеспечение на предмет изменения режима CAN-контроллера. При обнаружении изменения интерфейс CAN-Interface уведомляется через вызов CanIf_ControllerModeIndication(Controller, ControllerMode).

Асинхронный мониторинг режима

Если ранее через Can_SetControllerMode() было запрошено изменение режима и этот вызов успешно возвращается в CanIf, Can_MainFunction_Mode распознает совершенный переход состояния аппаратного обеспечения контроллера. Затем она асинхронно информирует CanIf с помощью CanIf_ControllerModeIndication о новом состоянии, таком как CAN_CS_STARTED AUTOSAR_SWS_CANInterface с. 144.

Контекст вызова и граничные условия

Вследствие предоставления через SchM_Can.h и определения в качестве Scheduled Function периодический вызов, вероятно, осуществляется планировщиком BSW. Вопрос Q-42edbc2aa591e8d7 (открытый) Специфические коды ошибок или этапы разработки для этой функции в payload не определены.

Этот текст был создан ИИ на основе спецификаций AUTOSAR.

Руководство разработчика реализации в подготовке (сложность I1)

тип Can_ConfigType [SWS_Can_00413] 📄 PDF

This is the type of the external data structure containing the overall initialization data for the CAN driver and SFR settings affecting all controllers. Furthermore it contains pointers to controller configuration structures. The contents of the initializ ation data structure are CAN hardware specific.

тип Can_PduType [SWS_Can_00415] 📄 PDF

This type unites Pdu Id (sw Pdu Handle), Sdu Length (length), Sdu Data (sdu), and Can Id (id) for any CAN L - SDU.

тип Can_IdType [SWS_Can_00416] 📄 PDF

Represents the Identifier of an L - PDU. The two most significant bits specify the frame type: 00 CAN message with Standard CAN ID 01 CAN FD frame with Standard CAN ID 10 CAN message with Extended CAN ID 11 CAN FD frame with Extended CAN ID

тип Can_HwHandleType [SWS_Can_00429] 📄 PDF

Represents the hardware object handles of a CAN hardware unit. For CAN hardware units with more than 255 HW objects use extended range.

тип Can_HwType [SWS_CAN_00496] 📄 PDF

This type defines a data structure which clearly provides an Hardware Object Handle including its corresponding CAN Controller and therefore Can Drv as well as the specific Can Id.

тип Can_ErrorStateType [SWS_Can_91003] 📄 PDF

Error states of a CAN controller.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 0cb922d28e06 Происхождение Открытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Тип перечисления Can_ErrorStateType из Can_GeneralTypes.h описывает состояния ошибок и рабочие состояния CAN-контроллера [SWS_Can_91003]. Он отображает поведение контроллера на шине CAN через три состояния SWS_CANDriver §8.2.7 «Can_ErrorStateType»:

  • CAN_ERRORSTATE_ACTIVE: CAN-контроллер в полном объеме участвует в коммуникации по шине [SWS_Can_91003].
  • CAN_ERRORSTATE_PASSIVE: CAN-контроллер участвует в коммуникации, но больше не отправляет активных кадров ошибок (Error Frames) [SWS_Can_91003].
  • CAN_ERRORSTATE_BUSOFF: CAN-контроллер изолирован от шины вследствие серьезных ошибок передачи и больше не участвует в коммуникации [SWS_Can_91003].

Во время выполнения состояние опрашивается через синхронную службу драйвера Can_GetControllerErrorState [SWS_Can_91004]. Ее выходной параметр ErrorStatePtr принимает определенное значение. Ту же сигнатуру использует и вышележащая функция CanIf_GetControllerErrorState в CAN-Interface AUTOSAR_SWS_CANInterface с. 78 «CanIf_GetControllerErrorState». В отношении параллелизма действует правило: Can_GetControllerErrorState для одного и того же ControllerId специфицирована как нереентерабельная [SWS_Can_91004].

В случае ошибки Can_GetControllerErrorState возвращает значение E_NOT_OK, при успешном опросе — E_OK [SWS_Can_91004]. При активированном обнаружении ошибок разработки (DET) вызов до инициализации драйвера приводит к ошибке CAN_E_UNINIT [SWS_Can_91005]. Недопустимый ControllerId вызывает ошибку разработки CAN_E_PARAM_CONTROLLER [SWS_Can_91006], а передача нулевого указателя для ErrorStatePtr отклоняется ошибкой разработки [SWS_Can_91007].

Интерпретация: вызывающей стороне, вероятно, необходимо самостоятельно выделять область памяти для ErrorStatePtr, поскольку интерфейс обрабатывает указатель как чисто выходной параметр и исключает нулевые указатели через ошибку разработки. Вопрос Q-5c907c21bcb50893 (открытый)

Этот текст был сгенерирован ИИ на основе спецификации AUTOSAR R20-11.

Руководство разработчика реализации в подготовке (сложность I1)

тип Can_ControllerStateType [SWS_Can_91013] 📄 PDF

States that are used by the several Controller Mode functions.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 5eb69ce0444e Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Тип перечисления Can_ControllerStateType определяет базовые рабочие состояния CAN-контроллера: CAN_CS_UNINIT, CAN_CS_STARTED, CAN_CS_STOPPED и CAN_CS_SLEEP [SWS_Can_91013]. Этот тип используется между модулями для программно управляемого ведения состояний конечного автомата CAN-контроллера [SWS_Can_00017].

Значения применяются в следующих контекстах:

  • Запрос состояния: в Can_SetControllerMode тип служит значением перехода (параметр Transition) для асинхронного запроса нового рабочего состояния [SWS_Can_00230]; соответственно ему существует CanIf_SetControllerMode AUTOSAR_SWS_CANInterface §- «CanIf_SetControllerMode». Драйвер передает запрос аппаратному обеспечению контроллера, при этом фактическое изменение состояния вступает в силу немедленно или через несколько миллисекунд AUTOSAR_SWS_CANInterface §- «Can_SetControllerMode». Переход в CAN_CS_STARTED дополнительно инициирует реинициализацию контроллера [SWS_Can_00384].
  • Опрос состояния: с помощью Can_GetControllerMode текущее состояние можно запросить синхронно через выходной указатель ControllerModePtr [SWS_Can_91014], [SWS_Can_91015] (аналогично в CanIf_GetControllerMode AUTOSAR_SWS_CANInterface §- «CanIf_GetControllerMode»).
  • Индикация состояния: после завершения переключения функции обратного вызова, такие как CanSM_ControllerModeIndication [SWS_CanSM_00396], CanIf_ControllerModeIndication AUTOSAR_SWS_CANInterface §- «CanIf_ControllerModeIndication», а также пользовательские функции обратного вызова AUTOSAR_SWS_CANInterface §- «User_ControllerModeIndication» синхронно уведомляют вышележащие уровни о новом режиме контроллера.

В отношении параллелизма и обработки ошибок действует следующее: функции драйвера Can_SetControllerMode и Can_GetControllerMode не являются реентерабельными [SWS_Can_00230], [SWS_Can_91014]. При вызове Can_GetControllerMode до инициализации драйвера сообщается об ошибке разработки CAN_E_UNINIT и возвращается E_NOT_OK [SWS_Can_91016]. Функция обратного вызова CanSM_ControllerModeIndication реентерабельна для различных контроллеров и сообщает о несконфигурированном ID контроллера с CANSM_E_PARAM_CONTROLLER в DET [SWS_CanSM_00396], [SWS_CanSM_00397].

Это указание по использованию основано на положениях спецификаций драйвера CAN, интерфейса CAN и менеджера состояний CAN в AUTOSAR Classic R20-11.

Руководство разработчика реализации в подготовке (сложность I1)

тип Can_ErrorType [SWS_Can_91021] 📄 PDF

The enumeration represents a superset of CAN Error Types which typical CAN HW is able to report. That means not all CAN HW will be able to support the complete set.

СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: e538be0a65be Происхождение Открытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Перечислимый тип Can_ErrorType определяет стандартизированное надмножество причин ошибок CAN, которые типичное аппаратное обеспечение CAN может фиксировать и сообщать вышележащим уровням [SWS_Can_91021]. Он предоставляется через заголовочный файл Can_GeneralTypes.h SWS_CANDriver §8.2.9 «Can_ErrorType».

Поскольку перечисление спроектировано как надмножество, не каждый CAN-контроллер обязательно поддерживает все специфицированные значения [SWS_Can_91021]. К определенным состояниям ошибок относятся:

  • битовые ошибки при мониторинге шины (CAN_ERROR_BIT_MONITORING1, CAN_ERROR_BIT_MONITORING0 или обобщённо CAN_ERROR_BIT),
  • ошибки подтверждения приёма (CAN_ERROR_CHECK_ACK_FAILED, CAN_ERROR_ACK_DELIMITER),
  • потеря арбитража передатчиком (CAN_ERROR_ARBITRATION_LOST),
  • состояния перегрузки из-за переполнения приёмных буферов (CAN_ERROR_OVERLOAD),
  • нарушения формата и бит-стаффинга (CAN_ERROR_CHECK_FORM_FAILED, CAN_ERROR_CHECK_STUFFING_FAILED),
  • ошибки CRC (CAN_ERROR_CHECK_CRC_FAILED), а также
  • постоянная блокировка шины на доминантном уровне (CAN_ERROR_BUS_LOCK) SWS_CANDriver §8.2.9 «Can_ErrorType».

Во взаимодействии BSW-модулей данный тип служит параметром функции обратного вызова CanIf_ErrorNotification для пересылки ошибок контроллера в CAN-интерфейс AUTOSAR_SWS_CANInterface §8.x «CanIf_ErrorNotification». Передаваемое значение при этом, вероятно, соответствует состоянию ошибки, обнаруженному базовым аппаратным обеспечением AUTOSAR_SWS_CANDriver §7.x «Error Notification». Вопрос Q-d23c45dd3b23ec71 (открытый)

Этот текст был сгенерирован ИИ и служит для технической ориентации.

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/CP_MOD_Can
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_Can@rel:R20-11#ef9341e2
Content hash
ef9341e2
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CANDriver.pdf#nameddest=SWS_Can_00223

Инициализация и состояние

Can_DeInit функция

This function de - initializes the module.

void Can_DeInit (void);
Can_GetVersionInfo функция

This function returns the version information of this module.

void Can_GetVersionInfo (Std_VersionInfoType* versioninfo);
Can_Init функция

This function initializes the module.

void Can_Init (const Can_ConfigType* Config);

Сервисы

Can_CheckWakeup функция

This function checks if a wakeup has occurred for the given controller.

Std_ReturnType Can_CheckWakeup (uint8 Controller);

This function disables all interrupts for this CAN controller.

void Can_DisableControllerInterrupts (uint8 Controller);

This function enables all allowed interrupts.

void Can_EnableControllerInterrupts (uint8 Controller);

This service obtains the error state of the CAN controller.

Std_ReturnType Can_GetControllerErrorState (uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr);
Can_GetControllerMode функция

This service reports about the current status of the requested CAN controller.

Std_ReturnType Can_GetControllerMode (uint8 Controller, Can_ControllerStateType* ControllerModePtr);

Returns the Rx error counter for a CAN controller. This value might not be available for all CAN controllers, in which cas e E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Rx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.

Std_ReturnType Can_GetControllerRxErrorCounter (uint8 ControllerId, uint8* RxErrorCounterPtr);

Returns the Tx error counter for a CAN controller. This value might not be available for all CAN controllers, in which case E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Tx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.

Std_ReturnType Can_GetControllerTxErrorCounter (uint8 ControllerId, uint8* TxErrorCounterPtr);
Can_SetBaudrate функция

This service shall set the baud rate configuration of the CAN controller. Depending on necessary baud rate modifications the controller might have to reset.

Std_ReturnType Can_SetBaudrate (uint8 Controller, uint16 BaudRateConfig ID); ⚠️
Can_SetControllerMode функция

This function performs software triggered state transitions of the CAN controller State machine.

Std_ReturnType Can_SetControllerMode (uint8 Controller, Can_ControllerStateType Transition);
Can_Write функция

This function is called by Can If to pass a CAN message to Can Drv for transmission.

Std_ReturnType Can_Write (Can_HwHandleType Hth, const Can_PduType* PduInfo);

Callout-функции и ожидаемые интерфейсы

<LPDU_CalloutName> функция

-

boolean <LPDU_CalloutName> (uint8 Hrh, Can_IdType CanId, uint8 CanDataLegth, const uint8* CanSduPtr);

Циклические

This function performs the polling of bus - off events that are configured statically as 'to be polled'.

void Can_MainFunction_BusOff (void);
Can_MainFunction_Mode функция

This function performs the polling of CAN controller mode transitions.

void Can_MainFunction_Mode (void);
Can_MainFunction_Read функция

This function performs the polling of RX indications when CAN_ RX_ PROCESSING is set to POLLING.

void Can_MainFunction_Read (void);

This function performs the polling of wake - up events that are configured statically as 'to be polled'.

void Can_MainFunction_Wakeup (void);
Can_MainFunction_Write функция

This function performs the polling of TX confirmation when CAN_ TX_ PROCESSING is set to POLLING.

void Can_MainFunction_Write (void);

Типы

This is the type of the external data structure containing the overall initialization data for the CAN driver and SFR settings affecting all controllers. Furthermore it contains pointers to controller configuration structures. The contents of the initializ ation data structure are CAN hardware specific.

States that are used by the several Controller Mode functions.

Error states of a CAN controller.

The enumeration represents a superset of CAN Error Types which typical CAN HW is able to report. That means not all CAN HW will be able to support the complete set.

Represents the hardware object handles of a CAN hardware unit. For CAN hardware units with more than 255 HW objects use extended range.

Can_HwType тип

This type defines a data structure which clearly provides an Hardware Object Handle including its corresponding CAN Controller and therefore Can Drv as well as the specific Can Id.

Can_IdType тип

Represents the Identifier of an L - PDU. The two most significant bits specify the frame type: 00 CAN message with Standard CAN ID 01 CAN FD frame with Standard CAN ID 10 CAN message with Extended CAN ID 11 CAN FD frame with Extended CAN ID

This type unites Pdu Id (sw Pdu Handle), Sdu Length (length), Sdu Data (sdu), and Can Id (id) for any CAN L - SDU.