DEENESPTFRRUARHIKOZHNL

CAN Interface (CanIf)

ModulCanIf (CAN Interface)
BSW-Modul-ID60
Standard-Header#include "CanIf.h"
SWS-SpezifikationAUTOSAR_SWS_CANInterface.pdf
ClusterCAN

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

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

Аппаратно-независимо передает CAN-сообщения и сигналы управления режимом между драйверами CAN и коммуникационным стеком.

CanIf представляет собой аппаратно-независимый уровень между CAN-драйверами или трансиверами и вышележащими коммуникационными модулями. Он сопоставляет запросы на передачу с Can_Write(), выполняет буферизацию при занятом оборудовании и перенаправляет подтверждения, а также отфильтрованные входящие сообщения сконфигурированным обратным вызовам [SWS_CANIF_00318]. Он управляет режимами контроллеров и трансиверов по запросу CanSm и сообщает обратно о BusOff и смене режима. Режимы PDU-каналов раздельно переключают пути передачи и приема. Передача осуществляется только в том случае, если контроллер находится в CAN_CS_STARTED и путь передачи разрешен [SWS_CANIF_00317].

CAN Interface (CanIf) берет на себя все аппаратно-независимые задачи CAN-коммуникации. К ним относятся запросы на передачу, подтверждения, индикации приема, сообщения об ошибках, а также запуск и остановка CAN-контроллеров SWS CanIf с. 13. Доступ к аппаратным буферам CanIf осуществляет только через службы CanDrv [SWS_CANIF_00023]. К контроллерам и трансиверам нескольких драйверов он обращается через абстрактные идентификаторы [SWS_CANIF_00653]. То, какие обратные вызовы вызываются в PduR, CanNm, CanTp, CanSm или EcuM, определяется конфигурацией [SWS_CANIF_00011] [SWS_CANIF_00724].

kontext ul Obere Schichten PduR, CanNm, CanTp, J1939Tp, J1939Nm, CanTSyn, Xcp, CDD canif CanIf ul->canif CanIf_Transmit() CanIf_SetPduMode() CanIf_ReadRxPduData() cansm CanSm / CDD cansm->canif CanIf_SetControllerMode() CanIf_SetTrcvMode() ecum EcuM / Integrationscode ecum->canif CanIf_Init() CanIf_CheckWakeup() CanIf_CheckValidation() canif->ul <User_RxIndication> <User_TxConfirmation> <User_TriggerTransmit> canif->cansm <User_ControllerBusOff> <User_ControllerModeIndication> <User_TrcvModeIndication> canif->ecum <User_ValidateWakeupEvent> can CAN-драйвер (Can) один или несколько экземпляров canif->can Can_Write() Can_SetControllerMode() Can_CheckWakeup() trcv CAN-Transceiver-Treiber (CanTrcv) canif->trcv CanTrcv_SetOpMode() CanTrcv_CheckWakeup() det Det canif->det Det_ReportError() Det_ReportRuntimeError() idsm IdsM canif->idsm Sicherheitsereignisse mirror Bus Mirroring canif->mirror Mirror_ReportCanFrame() can->canif CanIf_RxIndication() CanIf_TxConfirmation() CanIf_ControllerBusOff() CanIf_ControllerModeIndication() trcv->canif CanIf_TrcvModeIndication()

Контекстная диаграмма: CanIf между вышележащими коммуникационными модулями, управлением режимами и драйверами контроллеров и трансиверов. Источники: [SWS_CANIF_00012], [SWS_CANIF_00358], SWS CanIf с. 21

EcuM инициализирует CanIf с помощью CanIf_Init(). После этого каждый канал находится в CANIF_OFFLINE [SWS_CANIF_00864], а до этого службы отклоняют вызовы с E_NOT_OK [SWS_CANIF_00661]. Запуск контроллера через CanIf_SetControllerMode() выполняется асинхронно. О завершении сообщает CanIf_ControllerModeIndication(), которое CanIf передает в CanSm [SWS_CANIF_00003] [SWS_CANIF_00711]. Только после этого CanIf_SetPduMode() принимает запросы [SWS_CANIF_00874]. Режимы PDU-каналов раздельно переключают пути передачи и приема. События контроллера, такие как SLEEP, STOPPED или BusOff, принудительно задают их [SWS_CANIF_00865] [SWS_CANIF_00866].

pdumodi cluster_offline OFFLINE (Oberzustand) start off CANIF_OFFLINE kein Senden, kein Empfang start->off CanIf_Init() txoff CANIF_TX_OFFLINE только прием off->txoff CAN_CS_STOPPED / BusOff on CANIF_ONLINE отправка и прием off->on CanIf_SetPduMode(CANIF_ONLINE) txoff->off CAN_CS_SLEEP txoff->on CanIf_SetPduMode(CANIF_ONLINE) txact CANIF_TX_OFFLINE_ACTIVE прием, отправка подтверждается немедленно txact->off CAN_CS_SLEEP txact->txoff CAN_CS_STOPPED / BusOff txact->on CanIf_SetPduMode(CANIF_ONLINE) on->off CanIf_SetPduMode(CANIF_OFFLINE) или CAN_CS_SLEEP on->txoff CanIf_SetPduMode(CANIF_TX_OFFLINE) или CAN_CS_STOPPED / BusOff on->txact CanIf_SetPduMode(CANIF_TX_OFFLINE_ACTIVE) hinweis CanIf_SetPduMode() принимается только при контроллере в CAN_CS_STARTED; показана выборка переходов

Диаграмма состояний: четыре режима PDU-каналов и их переходы под действием CanIf_SetPduMode() и событий контроллера. Источники: [SWS_CANIF_00137], [SWS_CANIF_00866], SWS CanIf Рис. 7.8 с. 61

При передаче CanIf_Transmit() вызывает Can_Write() [SWS_CANIF_00318]. Если оборудование занято, CanIf буферизует L-PDU, если сконфигурирован буфер [SWS_CANIF_00381]. При следующем подтверждении он отправляет запись с наивысшим приоритетом [SWS_CANIF_00668]. Принятые L-PDU проходят программную фильтрацию и проверку длины перед тем, как CanIf перенаправит их в <User_RxIndication> [SWS_CANIF_00389] [SWS_CANIF_00056].

В случае сбоя событие BusOff переводит канал в CANIF_TX_OFFLINE и передается в CanSm [SWS_CANIF_00724]. При остановке контроллера CanIf подтверждает все ожидающие запросы на передачу с помощью E_NOT_OK [SWS_CANIF_00739]. Ошибки параметров и времени выполнения передаются в DET [SWS_CANIF_91006] [SWS_CANIF_91007].

Роль: аппаратно-независимый связующий узел между CAN-драйверами и коммуникационным стеком

CAN Interface (CanIf) выполняет все аппаратно-независимые задачи CAN-коммуникации в ECU. Нижележащие драйверы CAN работают исключительно со своим конкретным оборудованием. CanIf обрабатывает запросы на передачу, подтверждения отправки, индикации приема и сообщения об ошибках, а также запускает и останавливает CAN-контроллеры SWS CanIf с. 13. Доступ к аппаратным буферам он осуществляет исключительно через службы CanDrv [SWS_CANIF_00023]. Службы управления работают с абстрактным ControllerId, который нумерует контроллеры всех экземпляров CanDrv, начиная с 0 [SWS_CANIF_00653]. Для трансиверов действует то же самое с TransceiverId [SWS_CANIF_00655].

На нижнем уровне CanIf объединяет API нескольких драйверов CanTrcv в единый интерфейс, однако сам не содержит логики управления трансиверами SWS CanIf с. 21. Даже при наличии нескольких CanDrv каждый обратный вызов существует только в одном экземпляре. CanIf распознает вызывающий драйвер по ControllerId в Can_HwType SWS CanIf с. 68.

На верхнем уровне CanIf вызывает конфигурируемые функции обратного вызова, такие как <User_TxConfirmation> и <User_RxIndication> [SWS_CANIF_00011] [SWS_CANIF_00012]. Конфигурация определяет конкретного получателя, например PduR_CanIfRxIndication [SWS_CANIF_00442] или CanTp_TxConfirmation [SWS_CANIF_00550]. О BusOff и смене режима CanIf сообщает в CanSm или в CDD [SWS_CANIF_00724] [SWS_CANIF_00711]. Проверки валидности пробуждения (wake-up) направляются в EcuM [SWS_CANIF_00563].

kontext ul Obere Schichten PduR, CanNm, CanTp, J1939Tp, J1939Nm, CanTSyn, Xcp, CDD canif CanIf ul->canif CanIf_Transmit() CanIf_SetPduMode() CanIf_ReadRxPduData() cansm CanSm / CDD cansm->canif CanIf_SetControllerMode() CanIf_SetTrcvMode() ecum EcuM / Integrationscode ecum->canif CanIf_Init() CanIf_CheckWakeup() CanIf_CheckValidation() canif->ul <User_RxIndication> <User_TxConfirmation> <User_TriggerTransmit> canif->cansm <User_ControllerBusOff> <User_ControllerModeIndication> <User_TrcvModeIndication> canif->ecum <User_ValidateWakeupEvent> can CAN-драйвер (Can) один или несколько экземпляров canif->can Can_Write() Can_SetControllerMode() Can_CheckWakeup() trcv CAN-Transceiver-Treiber (CanTrcv) canif->trcv CanTrcv_SetOpMode() CanTrcv_CheckWakeup() det Det canif->det Det_ReportError() Det_ReportRuntimeError() idsm IdsM canif->idsm Sicherheitsereignisse mirror Bus Mirroring canif->mirror Mirror_ReportCanFrame() can->canif CanIf_RxIndication() CanIf_TxConfirmation() CanIf_ControllerBusOff() CanIf_ControllerModeIndication() trcv->canif CanIf_TrcvModeIndication()

Контекстная диаграмма: CanIf связывает верхние коммуникационные модули, управление режимами (CanSm, EcuM) и драйверы CAN-контроллеров и трансиверов. Сообщения об ошибках, безопасности и зеркалировании направляются в DET, IdsM и Mirror. Источники: [SWS_CANIF_00011], [SWS_CANIF_00724], [SWS_CANIF_00358], [SWS_CANIF_00905], [SWS_CANIF_00913], SWS CanIf с. 13.

Объем функций в значительной степени зависит от конфигурации. CanIf_Init() считывает из конфигурационных контейнеров, помимо прочего, количество контроллеров и сопоставление HTH/HRH SWS CanIf с. 22. HTH и HRH представляют собой дескрипторы логических объектов передачи и приема [SWS_CANIF_00291] [SWS_CANIF_00292]. Многие службы можно отключить с помощью переключателей pre-compile, например CanIf_ReadRxPduData() [SWS_CANIF_00330] или CanIf_SetBaudrate() [SWS_CANIF_00871]. Если для необязательного обратного вызова имя не сконфигурировано, вызов не выполняется SWS CanIf с. 133. <User_ControllerBusOff>, напротив, должен быть сконфигурирован всегда [SWS_CANIF_00524].

От инициализации к запущенному контроллеру

EcuM вызывает CanIf_Init() [SWS_CANIF_00001]. При этом CanIf инициализирует переменные, флаги и буферы [SWS_CANIF_00085], а также все буферы передаваемых L-PDU [SWS_CANIF_00387]. Каждый канал запускается в CANIF_OFFLINE [SWS_CANIF_00864]. После этого контроллеры остаются в режиме STOPPED, в котором не выполняется ни передача, ни прием. CanDrv и CanTrcv модуль EcuM инициализирует отдельно SWS CanIf с. 40. До инициализации все службы, кроме CanIf_Init() и CanIf_GetVersionInfo(), возвращают E_NOT_OK [SWS_CANIF_00661]. Тот, кто вызывает CanIf_DeInit() [SWS_CANIF_91002], должен убедиться, что передачи больше не выполняются SWS CanIf с. 81.

Запуск контроллера выполняется асинхронно. CanIf_SetControllerMode() [SWS_CANIF_00003] вызывает Can_SetControllerMode() [SWS_CANIF_00308]. О завершённом переходе драйвер сообщает позже с помощью CanIf_ControllerModeIndication() [SWS_CANIF_00699], а CanIf передаёт это сообщение в CanSm [SWS_CANIF_00711]. В режиме опроса (polling) Can_MainFunction_Mode() распознаёт переход SWS CanIf с. 152. Только в CAN_CS_STARTED CanIf_SetPduMode() принимает запросы [SWS_CANIF_00874].

Запустить контроллер и активировать PDU-каналCanSm / obere SchichtCanIfCanCanControllerCanIf_SetControllerMode(ControllerId,CAN_CS_STARTED)Can_SetControllerMode(Controller, Transition)Запросить переход в STARTE_OKE_OK (Anforderung angenommen)Асинхронно: смена ещене завершенаloopCan_MainFunction_Mode() bis Moduswechsel erkanntПроверить аппаратное состояниеCanIf_ControllerModeIndication(ControllerId,CAN_CS_STARTED)<User_ControllerModeIndication>(CanSM_ControllerModeIndication)Use Case: PDU-Pfade freischaltenCanIf_SetPduMode(ControllerId, CANIF_ONLINE)допустимо только в CAN_CS_STARTEDE_OK

Диаграмма последовательности: запрос на запуск подтверждается немедленно, однако смена режима индицируется лишь позже. После этого пути PDU могут быть активированы. Источники: [SWS_CANIF_00308], [SWS_CANIF_00711], [SWS_CANIF_00874], SWS CanIf с. 156

Режимы каналов PDU: раздельное переключение трактов передачи и приёма

Каждый канал контроллера имеет режим типа CanIf_PduModeType [SWS_CANIF_00137]. Вышележащие уровни устанавливают его с помощью CanIf_SetPduMode() и считывают с помощью CanIf_GetPduMode() [SWS_CANIF_00008] [SWS_CANIF_00009]. Режимы подробно SWS CanIf с. 58:

  • CANIF_OFFLINE: запросы на передачу отклоняются с E_NOT_OK, а буферы очищаются. Индикации и подтверждения подавляются [SWS_CANIF_00073].
  • CANIF_TX_OFFLINE: заблокирован только тракт передачи, приём остаётся активным [SWS_CANIF_00489].
  • CANIF_TX_OFFLINE_ACTIVE: запросы на передачу подтверждаются немедленно без передачи в CanDrv [SWS_CANIF_00072].
  • CANIF_ONLINE: передача и приём полностью активны [SWS_CANIF_00075].

События контроллера принудительно задают режим канала. CAN_CS_SLEEP приводит к CANIF_OFFLINE [SWS_CANIF_00865]. CAN_CS_STOPPED и BusOff приводят к CANIF_TX_OFFLINE [SWS_CANIF_00866].

pdumodi cluster_offline OFFLINE (Oberzustand) start off CANIF_OFFLINE kein Senden, kein Empfang start->off CanIf_Init() txoff CANIF_TX_OFFLINE только прием off->txoff CAN_CS_STOPPED / BusOff on CANIF_ONLINE отправка и прием off->on CanIf_SetPduMode(CANIF_ONLINE) txoff->off CAN_CS_SLEEP txoff->on CanIf_SetPduMode(CANIF_ONLINE) txact CANIF_TX_OFFLINE_ACTIVE прием, отправка подтверждается немедленно txact->off CAN_CS_SLEEP txact->txoff CAN_CS_STOPPED / BusOff txact->on CanIf_SetPduMode(CANIF_ONLINE) on->off CanIf_SetPduMode(CANIF_OFFLINE) или CAN_CS_SLEEP on->txoff CanIf_SetPduMode(CANIF_TX_OFFLINE) или CAN_CS_STOPPED / BusOff on->txact CanIf_SetPduMode(CANIF_TX_OFFLINE_ACTIVE) hinweis CanIf_SetPduMode() принимается только при контроллере в CAN_CS_STARTED; показана выборка переходов

Диаграмма состояний: четыре режима каналов PDU с переходами по CanIf_SetPduMode() и по событиям контроллера. Три ограниченных режима объединены в суперсостояние, как в спецификации. Источники: [SWS_CANIF_00864], [SWS_CANIF_00865], [SWS_CANIF_00866], [SWS_CANIF_00874], SWS CanIf Рис. 7.8 с. 61

Тракт передачи: CanIf_Transmit, буферизация и Trigger Transmit

CanIf_Transmit() [SWS_CANIF_00005] определяет HTH и вызывает Can_Write(). Переданный swPduHandle возвращается позже в CanIf_TxConfirmation() [SWS_CANIF_00318]. Перед этим CanIf устанавливает два старших бита CanId [SWS_CANIF_00243]. Если Can_Write() возвращает E_OK, это распространяется и на запрос на передачу [SWS_CANIF_00162].

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

  • Контроллер запущен, а тракт передачи находится в режиме online или offline active [SWS_CANIF_00317].
  • При активном PnTxFilter проходят только CanIfTxPduPnFilterPdu [SWS_CANIF_00750].
  • Данные чрезмерной длины усекаются с помощью CanIfTxPduTruncation [SWS_CANIF_00894], в противном случае отклоняются [SWS_CANIF_00900].

В более новых местах документа дополнительно упоминается CanXL_Write() SWS CanIf с. 87. Для R20-11 нормативным является только Can_Write().

txentscheidung start aufruf CanIf_Transmit(TxPduId, PduInfoPtr) start->aufruf init CanIf initialisiert? aufruf->init modus Контроллер CAN_CS_STARTED и тракт отправки online / offline active? init->modus да nok1 E_NOT_OK init->nok1 нет active Kanal in CANIF_TX_OFFLINE_ACTIVE? modus->active да nok2 E_NOT_OK (при CANIF_OFFLINE дополнительно CANIF_E_STOPPED) modus->nok2 нет pn PnTxFilter активен и не является CanIfTxPduPnFilterPdu? active->pn нет bestaetigen <User_TxConfirmation> sofort, kein Can_Write() active->bestaetigen да laenge SduLength больше глобального PDU? pn->laenge нет nok3 E_NOT_OK pn->nok3 да trunc CanIfTxPduTruncation aktiviert? laenge->trunc да write Can_Write(Hth, PduInfo) laenge->write нет kuerzen Усечь данные до длины глобального PDU trunc->kuerzen да nok4 CANIF_E_TXPDU_LENGTH_EXCEEDED, E_NOT_OK trunc->nok4 нет kuerzen->write rueck Возвращаемое значение Can_Write()? write->rueck puffer Буферизация активна и размер буфера > 0? rueck->puffer CAN_BUSY ok E_OK rueck->ok E_OK gleich тот же L-PDU уже буферизован? puffer->gleich да nok5 E_NOT_OK (L-PDU verloren) puffer->nok5 нет frei freies Pufferelement? gleich->frei нет ueberschreiben перезаписать буферизованный экземпляр gleich->ueberschreiben да ablegen L-PDU in CanIfTxBuffer ablegen frei->ablegen да nok6 E_NOT_OK frei->nok6 нет ueberschreiben->ok ablegen->ok

Диаграмма деятельности: так CanIf_Transmit() выбирает между отклонением, симулированным подтверждением, прямой передачей и буферизацией. Интерпретация: порядок проверок выбран для удобства чтения. Источники: [SWS_CANIF_00317], [SWS_CANIF_00382], [SWS_CANIF_00072], [SWS_CANIF_00381], [SWS_CANIF_00837], SWS CanIf Рис. 7.5 с. 51

Если Can_Write() сообщает CAN_BUSY и активен CanIfPublicTxBuffering [SWS_CANIF_00063], CanIf пытается буферизовать L-PDU [SWS_CANIF_00381]. Для этого требуется размер буфера больше нуля [SWS_CANIF_00835]. Если та же L-PDU уже находится в буфере, она перезаписывается [SWS_CANIF_00068]. Если буфер полон, новая L-PDU отклоняется с E_NOT_OK [SWS_CANIF_00837]. L-PDU всегда находится только в одном месте: в аппаратном объекте или в буфере CanIf SWS CanIf с. 43.

При CanIf_TxConfirmation() [SWS_CANIF_00007] CanIf уведомляет соответствующего пользователя через <User_TxConfirmation> с E_OK [SWS_CANIF_00383]. В том же вызове он проверяет буферы освободившегося HTH [SWS_CANIF_00386]. Ожидающую запись с наивысшим приоритетом он передаёт в Can_Write() [SWS_CANIF_00668] [SWS_CANIF_00070]. При E_OK он немедленно удаляет запись из буфера [SWS_CANIF_00183]. В более новых местах документа этот callback называется LSduR_CanIfTxConfirmation() SWS CanIf с. 157. В R20-11 действует <User_TxConfirmation>.

Передача с буферизацией и повторной отправкой при подтвержденииObere Schicht (z. B. PduR)CanIfCanCanControllerUse Case: Запрос на отправку при занятом оборудованииCanIf_Transmit(TxPduId, PduInfoPtr)Can_Write(Hth, PduInfo)CAN_BUSYL-PDU in CanIfTxBuffer ablegenE_OKUse Case: Подтверждение более раннего запросаTransmit-InterruptCanIf_TxConfirmation(CanTxPduId)Проверить буфер освободившегося HTHaltБуфер заполненCan_Write() для записи снаивысшим приоритетомL-PDU in Hardware schreibenE_OKНемедленно удалить запись из буфераPuffer leerkein weiterer Can_Write()-Aufruf<User_TxConfirmation>(TxPduId, E_OK)

Диаграмма последовательности: при занятом аппаратном обеспечении L-PDU буферизуется. Подтверждение более раннего запроса затем инициирует повторную отправку из буфера. Источники: [SWS_CANIF_00381], [SWS_CANIF_00386], [SWS_CANIF_00668], [SWS_CANIF_00183], SWS CanIf с. 138, SWS CanIf с. 143

При Triggered Transmission пользователь передаёт не данные, а NULL-SduDataPtr [SWS_CANIF_00882]. Если аппаратное обеспечение свободно, драйвер запрашивает данные через CanIf_TriggerTransmit() [SWS_CANIF_00883]. CanIf перенаправляет вызов в <User_TriggerTransmit> и возвращает его результат [SWS_CANIF_00885]. Если аппаратное обеспечение занято, CanIf буферизует только Transmit Request [SWS_CANIF_00881]. CanId динамических L-PDU можно изменить с помощью CanIf_SetDynamicTxId() [SWS_CANIF_00189]. В качестве альтернативы он извлекается из MetaData [SWS_CANIF_00855] SWS CanIf с. 34.

Trigger TransmitObere SchichtCanIfCanCanControllerCanIf_Transmit(TxPduId, PduInfoPtr)SduDataPtr = NULL, только SduLengthCan_Write(Hth, PduInfo)altHardwareobjekt freiCanIf_TriggerTransmit(TxPduId, PduInfoPtr)<User_TriggerTransmit>(TxPduId, PduInfoPtr)Daten in bereitgestelltenPuffer kopierenE_OKE_OK (возвращаемое значение передано дальше)L-PDU in Hardware kopierenE_OKE_OKHardwareobjekt belegtCAN_BUSYбуферизовать в CanIfTxBuffer толькоTransmit Request (если возможно)

Диаграмма последовательности: при Trigger Transmit драйвер запрашивает данные у пользователя только тогда, когда аппаратный объект свободен. Источники: [SWS_CANIF_00882], [SWS_CANIF_00885], [SWS_CANIF_00881], SWS CanIf Рис. 9.6 с. 137

Тракт приёма: фильтрация, проверка длины, пересылка

После приёма драйвер вызывает CanIf_RxIndication() с Mailbox и данными [SWS_CANIF_00006]. Обработка выполняется в три этапа:

  • Программный фильтр: для HRH BasicCAN CanIf выполняет программную фильтрацию [SWS_CANIF_00663] SWS CanIf с. 39. Отклонение завершает обработку [SWS_CANIF_00389].
  • Проверка длины: выполняется, если сконфигурирована [SWS_CANIF_00390], и принимает длину не менее сконфигурированной [SWS_CANIF_00026].
  • Пересылка: принятые L-PDU направляются сконфигурированному <User_RxIndication> [SWS_CANIF_00056] [SWS_CANIF_00135]. Для динамических L-SDU CanId помещается в CAN_ID_32 [SWS_CANIF_00848].
rx start aufruf CanIf_RxIndication(Mailbox, PduInfoPtr) start->aufruf init CanIf initialisiert? aufruf->init keine обработка Rx отсутствует init->keine нет filterkonf Software-Filter konfiguriert (BasicCAN-HRH)? init->filterkonf да filter Software-Filter: CanId akzeptiert? filterkonf->filter да dlckonf Проверка длины активна? filterkonf->dlckonf нет verworfen Завершение без индикации filter->verworfen нет filter->dlckonf да dlc Длина >= сконфигурированная длина? dlckonf->dlc да akzeptiert L-PDU akzeptiert dlckonf->akzeptiert нет dlcfehler Det_ReportRuntimeError() CANIF_E_INVALID_DATA_LENGTH dlc->dlcfehler нет dlc->akzeptiert да neben в зависимости от конфигурации: заполнить буфер приема, установить статус уведомления akzeptiert->neben ziel Ziel-Nutzer konfiguriert? akzeptiert->ziel indikation <User_RxIndication>(RxPduId, PduInfoPtr) ziel->indikation да ende Ende ziel->ende нет indikation->ende

Диаграмма деятельности: программный фильтр и проверка длины определяют, будет ли индицирована принятая L-PDU. Зависящие от конфигурации побочные эффекты показаны параллельно. Источники: [SWS_CANIF_00421], [SWS_CANIF_00389], [SWS_CANIF_00168], [SWS_CANIF_00199], [SWS_CANIF_00392], SWS CanIf Рис. 7.6 с. 51

Дополнительно CanIf предоставляет службы опроса. CanIf_ReadRxPduData() считывает данные из собственного приёмного буфера [SWS_CANIF_00194] [SWS_CANIF_00198], но не предназначен для диапазонного приёма [SWS_CANIF_00329]. CanIf_ReadTxNotifStatus() и CanIf_ReadRxNotifStatus() сбрасывают статус при чтении [SWS_CANIF_00393] [SWS_CANIF_00394]. Этот принцип «read-and-consume» гарантирует, что с момента последнего вызова произошло как минимум одно событие SWS CanIf с. 55. CanIf_GetTxConfirmationState() объединяет подтверждения целого контроллера [SWS_CANIF_00734].

Трансивер, Wake-up и Partial Networking

Службы трансивера CanIf передаёт напрямую в драйвер CanTrcv. CanIf_SetTrcvMode() вызывает CanTrcv_SetOpMode() [SWS_CANIF_00358], CanIf_GetTrcvMode() вызывает CanTrcv_GetOpMode() [SWS_CANIF_00363]. Смену режима трансивера CanIf передаёт в CanSm [SWS_CANIF_00712].

Для Wake-up CanIf_CheckWakeup() опрашивает контроллеры и трансиверы об источнике пробуждения (Wake-up) [SWS_CANIF_00395] SWS CanIf с. 56. Для валидации CanIf сохраняет первый валидный приём запущенного контроллера [SWS_CANIF_00286]. Затем CanIf_CheckValidation() сообщает о нём через <User_ValidateWakeupEvent> [SWS_CANIF_00179].

Если активно Partial Networking, фильтр PnTxFilter накладывает дополнительный уровень поверх режимов каналов для каждого контроллера [SWS_CANIF_00747]. Он активируется при CAN_CS_SLEEP [SWS_CANIF_00749] и вновь деактивируется с первым подтверждением или индикацией [SWS_CANIF_00751] [SWS_CANIF_00896] SWS CanIf с. 70.

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

BusOff: драйвер сообщает об ошибке с помощью CanIf_ControllerBusOff() [SWS_CANIF_00218]. В ответ CanIf переводит канал в CANIF_TX_OFFLINE [SWS_CANIF_00866] и сообщает о BusOff в CanSm [SWS_CANIF_00724] SWS CanIf Рис. 9.11 с. 147. Восстановлением управляет CanSm через CanIf_SetControllerMode() SWS CanIf с. 160.

Сообщение о BusOff и восстановлениеCanSm (<User_ControllerBusOff>)CanIfCanCanControllerBusOff-ErkennungКонтроллер при необходимостиустановить в STOPPEDCanIf_ControllerBusOff(ControllerId)Канал в CANIF_TX_OFFLINE,Sendepuffer leerenпри формировании отчетов о событиях безопасности:CANIF_SEV_ERRORSTATE_BUSOFF<User_ControllerBusOff>(ControllerId)= CanSM_ControllerBusOff()Use Case: WiederherstellungCanIf_SetControllerMode(ControllerId,CAN_CS_STARTED)Can_SetControllerMode(Controller, Transition)E_OKE_OKCanIf_ControllerModeIndication(ControllerId,CAN_CS_STARTED)<User_ControllerModeIndication>

Диаграмма последовательности: процесс от обнаружения BusOff через оповещение CanSm до перезапуска контроллера. Источники: [SWS_CANIF_00218], [SWS_CANIF_00866], [SWS_CANIF_00724], [SWS_CANIF_00918], SWS CanIf с. 154, SWS CanIf с. 160

Контроллер остановлен: при входе в CAN_CS_STOPPED CanIf очищает буферы передачи [SWS_CANIF_00485]. Все ожидающие запросы на передачу он подтверждает с E_NOT_OK [SWS_CANIF_00739]. Таким образом, каждая принятая PDU получает подтверждение — положительное или отрицательное SWS CanIf с. 54.

Сообщения об ошибках: о недопустимых параметрах CanIf сообщает как об ошибках разработки (development errors), например CANIF_E_PARAM_CONTROLLERID [SWS_CANIF_00311] [SWS_CANIF_91006]. Ошибками времени выполнения (runtime errors) являются, в частности, CANIF_E_INVALID_DATA_LENGTH [SWS_CANIF_00168] и CANIF_E_STOPPED [SWS_CANIF_00382] [SWS_CANIF_91007]. Потерянный запрос на передачу проявляется только в возвращаемом значении или в отсутствии подтверждения Error Description с. 22. О событиях безопасности, таких как CANIF_SEV_ERRORSTATE_PASSIVE, CanIf сообщает в IdsM [SWS_CANIF_00913] [SWS_CANIF_00917].

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

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

CAN Interface (CanIf)

The CanIf abstracts CAN hardware details and provides uniform access to multiple CAN controllers and transceivers for higher-layer modules (PduR, CanTp, CanNm, CanSM).

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

функция CanIf_Init [SWS_CANIF_00001] 📄 PDF

void CanIf_Init (const CanIf_ConfigType* ConfigPtr);

This service Initializes internal and external interfaces of the CAN Interface for the further processing.

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

функция CanIf_DeInit [SWS_CANIF_91002] 📄 PDF

void CanIf_DeInit (void);

De-initializes the CanIf module.

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

функция CanIf_SetControllerMode [SWS_CANIF_00003] 📄 PDF

Std_ReturnType CanIf_SetControllerMode (uint8 ControllerId, Can_ControllerStateType ControllerMode);

This service calls the corresponding CAN Driver service for changing of the CAN controller mode.

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

функция CanIf_ReadRxPduData [SWS_CANIF_00194] 📄 PDF

Std_ReturnType CanIf_ReadRxPduData (PduIdType CanIfRxSduId, PduInfoType* CanIfRxInfoPtr);

This service provides the Data Length and the received data of the requested CanIfRxSduId to the calling upper layer.

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

функция CanIf_ReadTxNotifStatus [SWS_CANIF_00202] 📄 PDF

CanIf_NotifStatusType CanIf_ReadTxNotifStatus (PduIdType CanIfTxSduId);

This service returns the confirmation status (confirmation occurred or not) of a specific static or dynamic CAN Tx L-PDU, requested by the CanIfTxSduId.

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

функция CanIf_ReadRxNotifStatus [SWS_CANIF_00230] 📄 PDF

CanIf_NotifStatusType CanIf_ReadRxNotifStatus (PduIdType CanIfRxSduId);

This service returns the indication status (indication occurred or not) of a specific CAN Rx L-PDU, requested by the CanIfRxSduId.

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

функция CanIf_SetPduMode [SWS_CANIF_00008] 📄 PDF

Std_ReturnType CanIf_SetPduMode (uint8 ControllerId, CanIf_PduModeType PduModeRequest);

This service sets the requested mode at the L-PDUs of a predefined logical PDU channel.

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

функция CanIf_SetTrcvMode [SWS_CANIF_00287] 📄 PDF

Std_ReturnType CanIf_SetTrcvMode (uint8 TransceiverId, CanTrcv_TrcvModeType TransceiverMode);

This service changes the operation mode of the tansceiver TransceiverId, via calling the corresponding CAN Transceiver Driver service.

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

функция CanIf_CheckWakeup [SWS_CANIF_00219] 📄 PDF

Std_ReturnType CanIf_CheckWakeup (EcuM_WakeupSourceType WakeupSource);

This service checks, whether an underlying CAN driver or a CAN transceiver driver already signals a wakeup event.

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

функция CanIf_CheckValidation [SWS_CANIF_00178] 📄 PDF

Std_ReturnType CanIf_CheckValidation (EcuM_WakeupSourceType WakeupSource);

This service is performed to validate a previous wakeup event.

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

функция CanIf_GetTxConfirmationState [SWS_CANIF_00734] 📄 PDF

CanIf_NotifStatusType CanIf_GetTxConfirmationState (uint8 ControllerId);

This service reports, if any TX confirmation has been done for the whole CAN controller since the last CAN controller start.

функция CanIf_ClearTrcvWufFlag [SWS_CANIF_00760] 📄 PDF

Std_ReturnType CanIf_ClearTrcvWufFlag (uint8 TransceiverId);

Requests the CanIf module to clear the WUF flag of the designated CAN transceiver.

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

функция CanIf_CheckTrcvWakeFlag [SWS_CANIF_00761] 📄 PDF

Std_ReturnType CanIf_CheckTrcvWakeFlag (uint8 TransceiverId);

Requests the CanIf module to check the Wake flag of the designated CAN transceiver.

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

функция CanIf_SetBaudrate [SWS_CANIF_00867] 📄 PDF

Std_ReturnType CanIf_SetBaudrate (uint8 ControllerId, uint16 BaudRateConfigID);

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

функция CanIf_GetControllerRxErrorCounter [SWS_CANIF_91003] 📄 PDF

Std_ReturnType CanIf_GetControllerRxErrorCounter (uint8 ControllerId, uint8* RxErrorCounterPtr);

This service calls the corresponding CAN Driver service for obtaining the Rx error counter of the CAN controller.

функция CanIf_GetControllerTxErrorCounter [SWS_CANIF_91004] 📄 PDF

Std_ReturnType CanIf_GetControllerTxErrorCounter (uint8 ControllerId, uint8* TxErrorCounterPtr);

This service calls the corresponding CAN Driver service for obtaining the Tx error counter of the CAN controller.

функция CanIf_EnableBusMirroring [SWS_CANIF_91005] 📄 PDF

Std_ReturnType CanIf_EnableBusMirroring (uint8 ControllerId, boolean MirroringActive);

Enables or disables mirroring for a CAN controller.

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

функция CanIf_TriggerTransmit [SWS_CANIF_00883] 📄 PDF

Std_ReturnType CanIf_TriggerTransmit (PduIdType TxPduId, PduInfoType* PduInfoPtr);

Within this API, the upper layer module (called module) shall check whether the available data fits into the buffer size reported by PduInfoPtr->SduLength. If it fits, it shall copy its data into the buffer provided by PduInfoPtr->SduDataPtr and update the length of the actual copied data in PduInfoPtr->SduLength. If not, it returns E_NOT_OK without changing PduInfoPtr.

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

функция CanIf_TxConfirmation [SWS_CANIF_00007] 📄 PDF

void CanIf_TxConfirmation (PduIdType CanTxPduId);

This service confirms a previously successfully processed transmission of a CAN TxPDU.

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

функция CanIf_RxIndication [SWS_CANIF_00006] 📄 PDF

void CanIf_RxIndication (const Can_HwType* Mailbox, const PduInfoType* PduInfoPtr);

This service indicates a successful reception of a received CAN Rx L-PDU to the CanIf after passing all filters and validation checks.

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

функция CanIf_ControllerBusOff [SWS_CANIF_00218] 📄 PDF

void CanIf_ControllerBusOff (uint8 ControllerId);

This service indicates a Controller BusOff event referring to the corresponding CAN Controller with the abstract CanIf ControllerId.

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

функция CanIf_ConfirmPnAvailability [SWS_CANIF_00815] 📄 PDF

void CanIf_ConfirmPnAvailability (uint8 TransceiverId);

This service indicates that the transceiver is running in PN communication mode referring to the corresponding CAN transceiver with the abstract CanIf TransceiverId.

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

функция CanIf_ClearTrcvWufFlagIndication [SWS_CANIF_00762] 📄 PDF

void CanIf_ClearTrcvWufFlagIndication (uint8 TransceiverId);

This service indicates that the transceiver has cleared the WufFlag referring to the corresponding CAN transceiver with the abstract CanIf TransceiverId.

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

функция CanIf_CheckTrcvWakeFlagIndication [SWS_CANIF_00763] 📄 PDF

void CanIf_CheckTrcvWakeFlagIndication (uint8 TransceiverId);

This service indicates that the check of the transceiver's wake-up flag has been finished by the corresponding CAN transceiver with the abstract CanIf TransceiverId. This indication is used to cope with the asynchronous transceiver communication.

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

функция CanIf_ControllerModeIndication [SWS_CANIF_00699] 📄 PDF

void CanIf_ControllerModeIndication (uint8 ControllerId, Can_ControllerStateType ControllerMode);

This service indicates a controller state transition referring to the corresponding CAN controller with the abstract CanIf ControllerId.

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

функция CanIf_TrcvModeIndication [SWS_CANIF_00764] 📄 PDF

void CanIf_TrcvModeIndication (uint8 TransceiverId, CanTrcv_TrcvModeType TransceiverMode);

This service indicates a transceiver state transition referring to the corresponding CAN transceiver with the abstract CanIf TransceiverId.

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

функция CanIf_ControllerErrorStatePassive [SWS_CANIF_91008] 📄 PDF

void CanIf_ControllerErrorStatePassive (uint8 ControllerId, uint16 RxErrorCounter, uint16 TxErrorCounter);

The function derives the ErrorCounterTreshold from RxErrorCounter/ TxErrorCounter values and reports it to the IdsM as security event CANIF_SEV_ERRORSTATE_PASSIVE to the IdsM. It also prepares the context data for the respective security event.

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

функция CanIf_ErrorNotification [SWS_CANIF_91009] 📄 PDF

void CanIf_ErrorNotification (uint8 ControllerId, Can_ErrorType Can_ErrorType);

The function shall derive the bus error source rx or tx from the parameter CanError and report the bus error as security event CANIF_SEV_TX_ERROR_DETECTED or CANIF_SEV_RX_ ERROR_DETECTED. It also prepares the context data for the respective security event.

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

функция <User_TriggerTransmit> [SWS_CANIF_00886] 📄 PDF

Std_ReturnType <User_TriggerTransmit> (PduIdType TxPduId, PduInfoType* PduInfoPtr);

Within this API, the upper layer module (called module) shall check whether the available data fits into the buffer size reported by PduInfoPtr->SduLength. If it fits, it shall copy its data into the buffer provided by PduInfoPtr->SduDataPtr and update the length of the actual copied data in PduInfoPtr->SduLength. If not, it returns E_NOT_OK without changing PduInfoPtr.

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

функция <User_TxConfirmation> [SWS_CANIF_00011] 📄 PDF

void <User_TxConfirmation> (PduIdType TxPduId, Std_ReturnType result);

The lower layer communication interface module confirms the transmission of a PDU, or the failure to transmit a PDU.

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

функция <User_RxIndication> [SWS_CANIF_00012] 📄 PDF

void <User_RxIndication> (PduIdType RxPduId, const PduInfoType* PduInfoPtr);

Indication of a received PDU from a lower layer communication interface module.

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

функция <User_ValidateWakeupEvent> [SWS_CANIF_00532] 📄 PDF

void <User_ValidateWakeupEvent> (EcuM_WakeupSourceType sources);

This service indicates if a wake up event initiated from the wake up source (CAN controller or transceiver) after a former request to the CAN Driver or CAN Transceiver Driver module is valid.

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

функция <User_ControllerBusOff> [SWS_CANIF_00014] 📄 PDF

void <User_ControllerBusOff> (uint8 ControllerId);

This service indicates a bus-off event to the corresponding upper layer module (mainly the CAN State Manager module).

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

функция <User_ConfirmPnAvailability> [SWS_CANIF_00821] 📄 PDF

void <User_ConfirmPnAvailability> (uint8 TransceiverId);

This service indicates that the CAN transceiver is running in PN communication mode.

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

функция <User_ClearTrcvWufFlagIndication> [SWS_CANIF_00788] 📄 PDF

void <User_ClearTrcvWufFlagIndication> (uint8 TransceiverId);

This service indicates that the CAN transceiver has cleared the WufFlag. This function is called in CanIf_ClearTrcvWufFlagIndication.

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

функция <User_CheckTrcvWakeFlagIndication> [SWS_CANIF_00814] 📄 PDF

void <User_CheckTrcvWakeFlagIndication> (uint8 TransceiverId);

This service indicates that the wake up flag in the CAN transceiver is set. This function is called in CanIf_CheckTrcvWakeFlagIndication.

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

функция <User_ControllerModeIndication> [SWS_CANIF_00687] 📄 PDF

void <User_ControllerModeIndication> (uint8 ControllerId, Can_ControllerStateType ControllerMode);

This service indicates a CAN controller state transition to the corresponding upper layer module (mainly the CAN State Manager module).

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

функция <User_TrcvModeIndication> [SWS_CANIF_00693] 📄 PDF

void <User_TrcvModeIndication> (uint8 TransceiverId, CanTrcv_TrcvModeType TransceiverMode);

This service indicates a CAN transceiver state transition to the corresponding upper layer module (mainly the CAN State Manager module).

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

тип CanIf_ConfigType [SWS_CANIF_00144] 📄 PDF

This type defines a data structure for the post build parameters of the CAN interface for all underlying CAN drivers. At initialization the CanIf gets a pointer to a structure of this type to get access to its configuration data, which is necessary for initialization.

тип CanIf_PduModeType [SWS_CANIF_00137] 📄 PDF

The PduMode of a channel defines its transmit or receive activity. Communication direction (transmission and/or reception) of the channel can be controlled separately or together by upper layers.

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

тип CanIf_NotifStatusType [SWS_CANIF_00201] 📄 PDF

Type CanIf_NotifStatusType.

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

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

Record
AUTOSAR/AP/record/CP_MOD_CanIf
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_CanIf@rel:R20-11#a39011fc
Content hash
a39011fc
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CANInterface.pdf#nameddest=SWS_CANIF_00001

Карта тем

Подробный вид

Выберите элемент в оглавлении.

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

CanIf_DeInit функция

De-initializes the CanIf module.

void CanIf_DeInit (void);
CanIf_GetVersionInfo функция

This service returns the version information of the called CAN Interface module.

void CanIf_GetVersionInfo (Std_VersionInfoType* VersionInfo);
CanIf_Init функция

This service Initializes internal and external interfaces of the CAN Interface for the further processing.

void CanIf_Init (const CanIf_ConfigType* ConfigPtr);

Сервисы · Get…

This service calls the corresponding CAN Driver service for obtaining the error state of the CAN controller.

Std_ReturnType CanIf_GetControllerErrorState (uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr);

This service calls the corresponding CAN Driver service for obtaining the current status of the CAN controller.

Std_ReturnType CanIf_GetControllerMode (uint8 ControllerId, Can_ControllerStateType* ControllerModePtr);

This service calls the corresponding CAN Driver service for obtaining the Rx error counter of the CAN controller.

Std_ReturnType CanIf_GetControllerRxErrorCounter (uint8 ControllerId, uint8* RxErrorCounterPtr);

This service calls the corresponding CAN Driver service for obtaining the Tx error counter of the CAN controller.

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

This service reports the current mode of a requested PDU channel.

Std_ReturnType CanIf_GetPduMode (uint8 ControllerId, CanIf_PduModeType* PduModePtr);
CanIf_GetTrcvMode функция

This function invokes CanTrcv_GetOpMode and updates the parameter TransceiverModePtr with the value OpMode provided by CanTrcv.

Std_ReturnType CanIf_GetTrcvMode (uint8 TransceiverId, CanTrcv_TrcvModeType* TransceiverModePtr);

This service returns the reason for the wake up of the transceiver TransceiverId, via calling the corresponding CAN Transceiver Driver service.

Std_ReturnType CanIf_GetTrcvWakeupReason (uint8 TransceiverId, CanTrcv_TrcvWakeupReasonType* TrcvWuReasonPtr);

This service reports, if any TX confirmation has been done for the whole CAN controller since the last CAN controller start.

CanIf_NotifStatusType CanIf_GetTxConfirmationState (uint8 ControllerId);

Сервисы · Set…

CanIf_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 CanIf_SetBaudrate (uint8 ControllerId, uint16 BaudRateConfigID);

This service calls the corresponding CAN Driver service for changing of the CAN controller mode.

Std_ReturnType CanIf_SetControllerMode (uint8 ControllerId, Can_ControllerStateType ControllerMode);
CanIf_SetDynamicTxId функция

This service reconfigures the corresponding CAN identifier of the requested CAN L-PDU.

void CanIf_SetDynamicTxId (PduIdType CanIfTxSduId, Can_IdType CanId);
CanIf_SetPduMode функция

This service sets the requested mode at the L-PDUs of a predefined logical PDU channel.

Std_ReturnType CanIf_SetPduMode (uint8 ControllerId, CanIf_PduModeType PduModeRequest);
CanIf_SetTrcvMode функция

This service changes the operation mode of the tansceiver TransceiverId, via calling the corresponding CAN Transceiver Driver service.

Std_ReturnType CanIf_SetTrcvMode (uint8 TransceiverId, CanTrcv_TrcvModeType TransceiverMode);

This function shall call CanTrcv_SetTrcvWakeupMode.

Std_ReturnType CanIf_SetTrcvWakeupMode (uint8 TransceiverId, CanTrcv_TrcvWakeupModeType TrcvWakeupMode);

Сервисы · Check…

Requests the CanIf module to check the Wake flag of the designated CAN transceiver.

Std_ReturnType CanIf_CheckTrcvWakeFlag (uint8 TransceiverId);

This service indicates that the check of the transceiver's wake-up flag has been finished by the corresponding CAN transceiver with the abstract CanIf TransceiverId. This indication is used to cope with the asynchronous transceiver communication.

void CanIf_CheckTrcvWakeFlagIndication (uint8 TransceiverId);
CanIf_CheckValidation функция

This service is performed to validate a previous wakeup event.

Std_ReturnType CanIf_CheckValidation (EcuM_WakeupSourceType WakeupSource);
CanIf_CheckWakeup функция

This service checks, whether an underlying CAN driver or a CAN transceiver driver already signals a wakeup event.

Std_ReturnType CanIf_CheckWakeup (EcuM_WakeupSourceType WakeupSource);

Сервисы · Controller…

CanIf_ControllerBusOff функция

This service indicates a Controller BusOff event referring to the corresponding CAN Controller with the abstract CanIf ControllerId.

void CanIf_ControllerBusOff (uint8 ControllerId);

The function derives the ErrorCounterTreshold from RxErrorCounter/ TxErrorCounter values and reports it to the IdsM as security event CANIF_SEV_ERRORSTATE_PASSIVE to the IdsM. It also prepares the context data for the respective security event.

void CanIf_ControllerErrorStatePassive (uint8 ControllerId, uint16 RxErrorCounter, uint16 TxErrorCounter);

This service indicates a controller state transition referring to the corresponding CAN controller with the abstract CanIf ControllerId.

void CanIf_ControllerModeIndication (uint8 ControllerId, Can_ControllerStateType ControllerMode);

Сервисы · Read…

This service returns the indication status (indication occurred or not) of a specific CAN Rx L-PDU, requested by the CanIfRxSduId.

CanIf_NotifStatusType CanIf_ReadRxNotifStatus (PduIdType CanIfRxSduId);
CanIf_ReadRxPduData функция

This service provides the Data Length and the received data of the requested CanIfRxSduId to the calling upper layer.

Std_ReturnType CanIf_ReadRxPduData (PduIdType CanIfRxSduId, PduInfoType* CanIfRxInfoPtr);

This service returns the confirmation status (confirmation occurred or not) of a specific static or dynamic CAN Tx L-PDU, requested by the CanIfTxSduId.

CanIf_NotifStatusType CanIf_ReadTxNotifStatus (PduIdType CanIfTxSduId);

Сервисы · Прочее

CanIf_ClearTrcvWufFlag функция

Requests the CanIf module to clear the WUF flag of the designated CAN transceiver.

Std_ReturnType CanIf_ClearTrcvWufFlag (uint8 TransceiverId);

This service indicates that the transceiver has cleared the WufFlag referring to the corresponding CAN transceiver with the abstract CanIf TransceiverId.

void CanIf_ClearTrcvWufFlagIndication (uint8 TransceiverId);

This service indicates that the transceiver is running in PN communication mode referring to the corresponding CAN transceiver with the abstract CanIf TransceiverId.

void CanIf_ConfirmPnAvailability (uint8 TransceiverId);

Enables or disables mirroring for a CAN controller.

Std_ReturnType CanIf_EnableBusMirroring (uint8 ControllerId, boolean MirroringActive);

The function shall derive the bus error source rx or tx from the parameter CanError and report the bus error as security event CANIF_SEV_TX_ERROR_DETECTED or CANIF_SEV_RX_ ERROR_DETECTED. It also prepares the context data for the respective security event.

void CanIf_ErrorNotification (uint8 ControllerId, Can_ErrorType Can_ErrorType);
CanIf_Transmit функция

Requests transmission of a PDU.

Std_ReturnType CanIf_Transmit (PduIdType TxPduId, const PduInfoType* PduInfoPtr);

This service indicates a transceiver state transition referring to the corresponding CAN transceiver with the abstract CanIf TransceiverId.

void CanIf_TrcvModeIndication (uint8 TransceiverId, CanTrcv_TrcvModeType TransceiverMode);

Обратные вызовы

CanIf_RxIndication функция

This service indicates a successful reception of a received CAN Rx L-PDU to the CanIf after passing all filters and validation checks.

void CanIf_RxIndication (const Can_HwType* Mailbox, const PduInfoType* PduInfoPtr);
CanIf_TriggerTransmit функция

Within this API, the upper layer module (called module) shall check whether the available data fits into the buffer size reported by PduInfoPtr->SduLength. If it fits, it shall copy its data into the buffer provided by PduInfoPtr->SduDataPtr and update the length of the actual copied data in PduInfoPtr->SduLength. If not, it returns E_NOT_OK without changing PduInfoPtr.

Std_ReturnType CanIf_TriggerTransmit (PduIdType TxPduId, PduInfoType* PduInfoPtr);
CanIf_TxConfirmation функция

This service confirms a previously successfully processed transmission of a CAN TxPDU.

void CanIf_TxConfirmation (PduIdType CanTxPduId);

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

This service indicates that the wake up flag in the CAN transceiver is set. This function is called in CanIf_CheckTrcvWakeFlagIndication.

void <User_CheckTrcvWakeFlagIndication> (uint8 TransceiverId);

This service indicates that the CAN transceiver has cleared the WufFlag. This function is called in CanIf_ClearTrcvWufFlagIndication.

void <User_ClearTrcvWufFlagIndication> (uint8 TransceiverId);

This service indicates that the CAN transceiver is running in PN communication mode.

void <User_ConfirmPnAvailability> (uint8 TransceiverId);

This service indicates a bus-off event to the corresponding upper layer module (mainly the CAN State Manager module).

void <User_ControllerBusOff> (uint8 ControllerId);

This service indicates a CAN controller state transition to the corresponding upper layer module (mainly the CAN State Manager module).

void <User_ControllerModeIndication> (uint8 ControllerId, Can_ControllerStateType ControllerMode);
<User_RxIndication> функция

Indication of a received PDU from a lower layer communication interface module.

void <User_RxIndication> (PduIdType RxPduId, const PduInfoType* PduInfoPtr);

This service indicates a CAN transceiver state transition to the corresponding upper layer module (mainly the CAN State Manager module).

void <User_TrcvModeIndication> (uint8 TransceiverId, CanTrcv_TrcvModeType TransceiverMode);
<User_TriggerTransmit> функция

Within this API, the upper layer module (called module) shall check whether the available data fits into the buffer size reported by PduInfoPtr->SduLength. If it fits, it shall copy its data into the buffer provided by PduInfoPtr->SduDataPtr and update the length of the actual copied data in PduInfoPtr->SduLength. If not, it returns E_NOT_OK without changing PduInfoPtr.

Std_ReturnType <User_TriggerTransmit> (PduIdType TxPduId, PduInfoType* PduInfoPtr);
<User_TxConfirmation> функция

The lower layer communication interface module confirms the transmission of a PDU, or the failure to transmit a PDU.

void <User_TxConfirmation> (PduIdType TxPduId, Std_ReturnType result);

This service indicates if a wake up event initiated from the wake up source (CAN controller or transceiver) after a former request to the CAN Driver or CAN Transceiver Driver module is valid.

void <User_ValidateWakeupEvent> (EcuM_WakeupSourceType sources);

Типы

This type defines a data structure for the post build parameters of the CAN interface for all underlying CAN drivers. At initialization the CanIf gets a pointer to a structure of this type to get access to its configuration data, which is necessary for initialization.

Type CanIf_NotifStatusType.

The PduMode of a channel defines its transmit or receive activity. Communication direction (transmission and/or reception) of the channel can be controlled separately or together by upper layers.