DEENESPTFRRUARHIKOZHNL

AUTOSAR Classic LIN

Das LIN-Cluster umfasst Low-Cost-Subbus-Kommunikation für Karosserie- und Komfortfunktionen inklusive Treiber, LinIf-Schedule-Tabellen-Handling, Transceiver-Steuerung und State-Management.

Карта тем

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

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

Lin

Lin_CheckWakeup функция

This function checks if a wakeup has occurred on the addressed LIN channel.

Std_ReturnType Lin_CheckWakeup (uint8 Channel);
Lin_GetStatus функция

Service Lin_GetStatus.

Lin_StatusType Lin_GetStatus (uint8 Channel, const uint8* * Lin_SduPtr);
Lin_GetVersionInfo функция

Returns the version information of this module.

void Lin_GetVersionInfo (Std_VersionInfoType* versioninfo);
Lin_GoToSleep функция

The service instructs the driver to transmit a go - to - sleep - command on the addressed LIN channel. Only used for LIN master nodes.

Std_ReturnType Lin_GoToSleep (uint8 Channel);
Lin_GoToSleepInternal функция

Sets the channel state to LIN_ CH_ SLEEP, enables the wake - up detection and optionally sets the LIN hardware unit to reduced power operation mode (if supported by HW).

Std_ReturnType Lin_GoToSleepInternal (uint8 Channel);
Lin_Init функция

Initializes the LIN module.

void Lin_Init (const Lin_ConfigType* Config);
Lin_SendFrame функция

Sends a LIN header and a LIN response, if necessary. The direction of the frame response (master response, slave response, slave - to - slave communication) is provided by the Pdu Info Ptr. Only used for LIN master nodes.

Std_ReturnType Lin_SendFrame (uint8 Channel, const Lin_PduType* PduInfoPtr);
Lin_Wakeup функция

Generates a wake up pulse and sets the channel state to LIN_ CH_ OPERATIONAL.

Std_ReturnType Lin_Wakeup (uint8 Channel);
Lin_WakeupInternal функция

Sets the channel state to LIN_ CH_ OPERATIONAL without generating a wake up pulse.

Std_ReturnType Lin_WakeupInternal (uint8 Channel);

This is the type of the external data structure containing the overall initialization data for the LIN driver and the SFR settings affecting the LIN channels. A pointe r to such a structure is provided to the LIN driver initialization routine for configuration of the driver, LIN hardware unit and LIN hardware channels.

This type is used to specify the Checksum model to be used for the LIN Frame.

This type is used to specify the number of SDU data bytes to copy.

Represents all valid protected identifier used by Lin_ Send Frame().

Thi s type is used to specify whether the frame processor is required to transmit the response part of the LIN frame.

This Type is used to provide PID, checksum model, data length and SDU pointer from the LIN Interface to the LIN driver.

This type represents the slave error types that are detected during header reception and response transmission / reception.

LIN operation states for a LIN channel or frame, as returned by the API service Lin_ Get Status().

LinIf

Notifies the change of the response error signal with the new value. Only applicable for LIN slave nodes. AUTOSAR CP R20 - of Document ID : AUTOSAR_ SWS_ LINInterface

void <User_ResponseErrorSignalChanged> (NetworkHandleType Channel, boolean RespErrSigValue);
<User_RxIndication> функция

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

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

Notifies the reception of a Save Configuration request. Only applicable for LIN slave nodes.

boolean <User_SaveConfigurationRequest> (NetworkHandleType Channel);
<User_TriggerTransmit> функция

Within this API, the upper layer module (called module) shall check whether the available data fits into the b uffer size reported by Pdu Info Ptr - >Sdu Length. If it fits, it shall copy its data into the buffer provided by Pdu Info Ptr - >Sdu Data Ptr and update the length of the actual copied data in Pdu Info Ptr - >Sdu Length. If not, it returns E_ NOT_ OK without ch anging Pdu Info Ptr.

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);
LinIf_CheckWakeup функция

Will be called when the Ecu M has been notified about a wakeup on a specific LIN channel.

Std_ReturnType LinIf_CheckWakeup (EcuM_WakeupSourceType WakeupSource);

Enables or disables mirroring for a LIN channel.

Std_ReturnType LinIf_EnableBusMirroring (NetworkHandleType Channel, boolean MirroringActive);
LinIf_GetConfiguredNAD функция

Reports the current configured NAD. Only applicable for LIN slave nodes.

Std_ReturnType LinIf_GetConfiguredNAD (NetworkHandleType Channel, uint8* Nad);
LinIf_GetPIDTable функция

Retrieves all assigned PID values. The order is congruent to the LIN frame index. Only applicable for LIN slave nodes.

Std_ReturnType LinIf_GetPIDTable (NetworkHandleType Channel, Lin_FramePidType* PidBuffer, uint8* PidBufferLength);
LinIf_GetTrcvMode функция

Returns the actual sta te of a LIN Transceiver Driver.

Std_ReturnType LinIf_GetTrcvMode (NetworkHandleType Channel, LinTrcv_TrcvModeType* TransceiverModePtr);

Returns the reason for the wake up that has been detected by the LIN Transceiver Driver.

Std_ReturnType LinIf_GetTrcvWakeupReason (NetworkHandleType Channel, LinTrcv_TrcvWakeupReasonType* TrcvWuReasonPtr);
LinIf_GetVersionInfo функция

Returns the version information of this module.

void LinIf_GetVersionInfo (Std_VersionInfoType* versioninfo);
LinIf_GotoSleep функция

Initiates a transition into the Sleep Mode on the selected channel.

Std_ReturnType LinIf_GotoSleep (NetworkHandleType Channel);
LinIf_HeaderIndication функция

The LIN Driver will call this function to report a received LIN header. This function is only applicable for LIN slave nodes (available only if the ECU has any LIN slave channel).

Std_ReturnType LinIf_HeaderIndication (NetworkHandleType Channel, Lin_PduType* PduPtr);
LinIf_Init функция

Initializes the LIN Interface.

void LinIf_Init (const LinIf_ConfigType* ConfigPtr);

The LIN Driver will call this function to report a detected error event during header or response processing. This function is only applicable for LIN slave nodes (available only if the ECU has any LIN slave channel).

void LinIf_LinErrorIndication (NetworkHandleType Channel, Lin_SlaveErrorType ErrorStatus);
LinIf_RxIndication функция

The LIN Driver will call this function to report a successfully received response and provides the reception data to the LIN Interface. This function is only applicable for LIN slave nodes (available only if the ECU has any LIN slave channel).

void LinIf_RxIndication (NetworkHandleType Channel, uint8* Lin_SduPtr);
LinIf_ScheduleRequest функция

Requests a schedule table to be executed. Only used for LIN master nodes.

Std_ReturnType LinIf_ScheduleRequest (NetworkHandleType Channel, LinIf_SchHandleType Schedule);
LinIf_SetConfiguredNAD функция

Sets the current configured NAD. Only applicable for LIN slave nodes.

Std_ReturnType LinIf_SetConfiguredNAD (NetworkHandleType Channel, uint8 Nad);
LinIf_SetPIDTable функция

Sets all assigned PID values. The order is congruent to the LIN frame index. Only applicable for LIN slave nodes.

Std_ReturnType LinIf_SetPIDTable (NetworkHandleType Channel, Lin_FramePidType* PidBuffer, uint8 PidBufferLength);
LinIf_SetTrcvMode функция

Set the given LIN transceiver to the given mode.

Std_ReturnType LinIf_SetTrcvMode (NetworkHandleType Channel, LinTrcv_TrcvModeType TransceiverMode);

This API enables, disables and cl ears the notification for wakeup events on the addressed network

Std_ReturnType LinIf_SetTrcvWakeupMode (NetworkHandleType Channel, LinTrcv_TrcvWakeupModeType LinTrcvWakeupMode);
LinIf_Transmit функция

Re quests transmission of a PDU.

Std_ReturnType LinIf_Transmit (PduIdType TxPduId, const PduInfoType* PduInfoPtr);
LinIf_TxConfirmation функция

The LIN Driver will call this function to report a successfully transmitted response. This function is only applicable for LIN slave nodes (available only if the ECU has any LIN slave channel).

void LinIf_TxConfirmation (NetworkHandleType Channel);
LinIf_Wakeup функция

Initiates the wake up process.

Std_ReturnType LinIf_Wakeup (NetworkHandleType Channel);

The LIN Driver or LIN Transceiver Driver will call this function to report the wake up source after the successful wakeup detection during Check Wakeup or after power on by bus.

void LinIf_WakeupConfirmation (EcuM_WakeupSourceType WakeupSource);
LinTp_ChangeParameter функция

Request to change a specific transport protocol parameter (e.g. block size).

Std_ReturnType LinTp_ChangeParameter (PduIdType id, TPParameterType parameter, uint16 value);
LinTp_GetVersionInfo функция

Returns the version information of this module.

void LinTp_GetVersionInfo (Std_VersionInfoType* versioninfo);
LinTp_Init функция

Initializes the LIN Transport Layer.

void LinTp_Init (const LinTp_ConfigType* ConfigPtr);
LinTp_Shutdown функция

Shutdowns the LIN TP.

void LinTp_Shutdown (void);
LinTp_Transmit функция

Requests transmission of a PDU.

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

A pointer to an instance of this structure will be used in the initialization of the LIN Interface. The outline of the structure is defined in chapter 10 Configuration Specification.

Index of the schedule table that is selectable and followed by LIN Interface. Value is unique per LIN c hannel/ controller, but not per ECU. The number of schedule tables is limited to 255

This is the base type for the configuration of the LIN Transport Protocol A pointer to an instance of this structure will be used in the initialization of the LIN Transport Protocol. The outline of the structure is defined in chapter 10 Configuration Specification

LinTp_Mode тип

This type denotes which Schedule table can be requested by LIN TP during diagnostic session

LinSM

Function to query the current communication mode.

Std_ReturnType LinSM_GetCurrentComMode (NetworkHandleType network, ComM_ModeType* mode);
LinSM_GetVersionInfo функция

-

void LinSM_GetVersionInfo (Std_VersionInfoType* versioninfo);

The Lin If will call this callback when the go to sleep command is sent successfully or not sent successfully on the network.

void LinSM_GotoSleepConfirmation (NetworkHandleType network, boolean success);

The Lin If will call this callback when the go to sleep command is received on the network or a bus idle timeout occurs. Only applicable for LIN slave nodes.

void LinSM_GotoSleepIndication (NetworkHandleType Channel);
LinSM_Init функция

This function initializes the Lin SM.

void LinSM_Init (const LinSM_ConfigType* ConfigPtr);
LinSM_MainFunction функция

Periodic function that runs the timers of different request timeouts

void LinSM_MainFunction (void);
LinSM_RequestComMode функция

Requesting of a communication mode. The mode switch will not be made instant. The Lin SM will notify the caller when mode transition is made.

Std_ReturnType LinSM_RequestComMode (NetworkHandleType network, ComM_ModeType mode);
LinSM_ScheduleRequest функция

The upper layer requests a schedule table to be changed on one LIN network.

Std_ReturnType LinSM_ScheduleRequest (NetworkHandleType network, LinIf_SchHandleType schedule);

The Lin If module will call this callback when the new requested schedule table is active.

void LinSM_ScheduleRequestConfirmation (NetworkHandleType network, LinIf_SchHandleType schedule);

The Lin If will call this callback when the wake up signal command is sent not successfully/ successfully on the network.

void LinSM_WakeupConfirmation (NetworkHandleType network, boolean success);

Data structure type for the post - build configuration parameters.

Type used to report the current mode to the Bsw M

LinTrcv

LinTrcv_CheckWakeup функция

Service LinTrcv_CheckWakeup.

Std_ReturnType LinTrcv_CheckWakeup (uint8 LinNetwork);
LinTrcv_GetBusWuReason функция

This API provides the reason for the wakeup that the LIN transceiver has detected in the parameter "Reason". The ability to dete ct and differentiate the possible wakeup reasons depends strongly on the LIN transceiver hardware.

Std_ReturnType LinTrcv_GetBusWuReason (uint8 LinNetwork, LinTrcv_TrcvWakeupReasonType* Reason);
LinTrcv_GetOpMode функция

API detects the actual software state of LIN transceiver driv er.

Std_ReturnType LinTrcv_GetOpMode (uint8 LinNetwork, LinTrcv_TrcvModeType* OpMode);
LinTrcv_GetVersionInfo функция

This service provides the version information of this module through the parameter "versioninfo".

void LinTrcv_GetVersionInfo (Std_VersionInfoType* versioninfo);
LinTrcv_Init функция

Initializes the Lin Transceiver Driver module.

void LinTrcv_Init (const LinTrcv_ConfigType* ConfigPtr);
LinTrcv_SetOpMode функция

The internal state of the LIN transceiver driver is switched to mode given in the parameter Op Mode.

Std_ReturnType LinTrcv_SetOpMode (uint8 LinNetwork, LinTrcv_TrcvModeType OpMode);
LinTrcv_SetWakeupMode функция

This API enables, disables and clears the notification for wakeup events on the addressed network. A vailable via Lin Trcv.h

Std_ReturnType LinTrcv_SetWakeupMode (uint8 LINNetwork, LinTrcv_TrcvWakeupModeType TrcvWakupMode);

Configuration data structure of the Lin Trcv module. AUTOSAR CP R20 - of Document ID : AUTOSAR_SWS_LINTransceiverDriver

Operating modes of the LIN Transceiver Driver

Wake up operating modes of the LIN Transceiver Driver.

This type denotes the wake up reason detected by the LIN transceiver in detail.

Руководство по кластеруСОЗДАНО ИИ

Обеспечивает экономически эффективное объединение датчиков и исполнительных механизмов в сеть через Local Interconnect Network в автомобиле.
СОЗДАНО ИИ не проверено Модель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 01a9cd8d631b Происхождение Открытые вопросы (2)
Причинный якорь: R20-11 Действует с R20-11 Заново синтезировано для этой версии спецификации.
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Обеспечивает экономически эффективное объединение датчиков и исполнительных механизмов в сеть через Local Interconnect Network в автомобиле.

Кластер модулей LIN Communication реализует стандартизированное подключение подсистем шины LIN через модули LinSM, LinIf, LinTrcv и Lin (SWS COMManager с. 19). Он управляет передачей кадров на основе расписания у master-узлов, а также реактивной обработкой заголовков и пересылкой данных у slave-узлов ([SWS_LinIf_91004], [SWS_Lin_00168]). Одновременно кластер координирует упорядоченный переход между режимом полной коммуникации и спящим режимом, а также автономную обработку ошибок через сигнал response_error ([SWS_LinIf_00763]).

Кластер модулей LIN Communication предоставляет полную реализацию протокола LIN для AUTOSAR и включает в себя менеджер состояний LinSM, интерфейс LinIf (включая транспортный протокол LinTp), драйвер трансивера LinTrcv и драйвер MCAL Lin (SWS COMManager с. 19). Он подключает подсети, датчики и исполнительные механизмы к коммуникационной матрице AUTOSAR и строго разделяет master-узлы с автономным выполнением расписания и чисто реактивно отвечающие slave-узлы ([SWS_LinIf_00197], [SWS_Lin_00272]).

Архитектурная диаграмма: послойная архитектура и взаимосвязи интерфейсов кластера LIN между службами связи, уровнем абстракции и MCAL. Источники: SWS COMManager с. 19, AUTOSAR SWS LINInterface с. 133.

Передача данных на master-ECU осуществляется путем периодического управления драйвером через Lin_SendFrame с последующим опросом статуса через Lin_GetStatus ([SWS_Lin_00168]). На slave-узле, напротив, распознавание заголовка в драйвере приводит к синхронному callback-вызову LinIf_HeaderIndication ([SWS_LinIf_91004]). Интерфейс принимает решение о приеме, ответе или игнорировании на основе PID и подтверждает завершение через LinIf_RxIndication или LinIf_TxConfirmation ([SWS_LinIf_91005], [SWS_LinIf_91006]). Диагностические сообщения обрабатываются встроенным LinTp путем автоматического переключения таблицы расписания ([SWS_LinIf_00641]).

В рабочем цикле LinSM координирует переходы между состояниями LINSM_NO_COM и LINSM_FULL_COM ([SWS_LinSM_00026], [SWS_LinSM_00032]). Пробуждение осуществляется импульсом на шине через Lin_Wakeup ([SWS_Lin_00169]). Переход в спящий режим происходит у master-узла путем активной отправки sleep-кадра, а у slave-узла — после приема команды перехода в сон или при неактивности шины (Bus-Idle) через LinIf_GotoSleep, Lin_GoToSleepInternal и управление переводом трансивера в спящий режим ([SWS_LinSM_00231], [SWS_LinIf_00757]).

Процесс Go-to-Sleep на ведомом узле LINComMLinSMLinIfLin DriverLinTrcvBswMLinSM_RequestComMode(COMM_NO_COMMUNICATION)E_OK (Modus vorgemerkt)Use Case: Событие Bus-Sleep (фрейм Sleep или Bus-Idle)LinSM_GotoSleepIndication(Channel)LinIf_GotoSleep(Channel)Lin_GoToSleepInternal(Channel)E_OK (LIN_CH_SLEEP aktiv)optTransceiver Driver konfiguriertLinTrcv_SetOpMode(LINTRCV_TRCV_MODE_SLEEP)E_OKLinSM_GotoSleepConfirmation(Channel, success=TRUE)State = LINSM_NO_COMComM_BusSM_ModeIndication(COMM_NO_COMMUNICATION)BswM_LinSM_CurrentState(LINSM_NO_COM)

Диаграмма последовательности: взаимодействие модулей BSW при переходе slave-узла LIN в спящее состояние после сигнала Bus-Sleep. Источники: [SWS_LinSM_91000], [SWS_LinSM_00231], [SWS_LinIf_00757], AUTOSAR SWS LINStateManager с. 48.

Ошибки коммуникации фиксируются на slave-узлах через LinIf_LinErrorIndication и автономно передаются ведущему узлу в сигнале response_error ([SWS_LinIf_91007], [SWS_LinIf_00763]). Межканальные области синхронизации и строгое разделение между циклическими задачами (LinIf_MainFunction) и ISR драйвера обеспечивают стабильность системы ([SWS_LinIf_00384]).

Системная архитектура & роль кластера модулей

Модульный кластер LIN Communication предоставляет в стеке Basic Software AUTOSAR Classic стандартизированную связь через Local Interconnect Network (LIN) согласно ISO 17987. Он функционирует преимущественно как экономичная подсистемная шина для подключения датчиков и актуаторов в автомобильной сети (AUTOSAR FO Features с. 58). Кластер охватывает несколько уровней архитектуры AUTOSAR: LIN State Manager (LinSM) работает на уровне Communication Services, LIN Interface (LinIf), включая встроенный транспортный протокол (LinTp), формирует Communication Abstraction, LIN Transceiver Driver (LinTrcv) входит в состав ECU Abstraction, а LIN Driver (Lin) располагается как низкоуровневый модуль в Microcontroller Abstraction Layer (MCAL) (SWS COMManager с. 19).

С точки зрения архитектуры кластер строго разграничивает ведущие (Master) и ведомые (Slave) узлы. LIN-Master автономно управляет шинным трафиком с помощью таблиц расписания и генерирует все заголовки (Header), тогда как LIN-Slave сугубо реактивно отвечают на принятые заголовки или анализируют сигналы ([SWS_LinIf_00197], [SWS_Lin_00272]). Для задач диагностики и транспортировки согласно ISO 14229 модуль LIN Interface инкапсулирует функциональность TP, которая обрабатывает сегментированные диагностические сообщения (Master Request Frame MRF и Slave Response Frame SRF) через PduR и DCM ([SWS_LinIf_00351], [SWS_LinIf_00629]). Внешне кластер активно взаимодействует с Communication Manager (ComM), Basic Software Mode Manager (BswM), PDU Router (PduR) и ECU State Manager (EcuM) (SWS COMManager с. 19).

Архитектурная диаграмма: послойная архитектура и взаимосвязи интерфейсов кластера LIN между службами связи, уровнем абстракции и MCAL. Источники: SWS COMManager с. 19, AUTOSAR SWS LINInterface с. 133.

Взаимодействие и пути взаимодействия между модулями

Пути взаимодействия в кластере принципиально различаются в зависимости от роли узла. В LIN-Master модуль LIN Interface через свою периодическую задачу инициирует обработку активной таблицы расписания. Для наступивших кадров передачи LinIf запрашивает полезные данные с помощью механизмов Trigger-Transmit верхнего уровня и передает структуру Lin_PduType в LIN-драйвер через Lin_SendFrame ([SWS_Lin_00232], SWS LINInterface с. 37). Драйвер передает заголовок и данные в неблокирующем режиме ([SWS_Lin_00027]). По истечении максимального времени передачи кадра LinIf определяет результат передачи через Lin_GetStatus ([SWS_Lin_00168], SWS LINInterface с. 35). В слотах приема LinIf считывает данные, помещенные драйвером в буфер, и перенаправляет их на верхние уровни ([SWS_Lin_00233]).

На узле LIN-Slave тракт данных выполняется по событиям: если MCAL-драйвер Lin распознает на аппаратном уровне валидный заголовок с полями Break, Synch и PID, он синхронно вызывает функцию обратного вызова LinIf_HeaderIndication ([SWS_Lin_00280], [SWS_LinIf_91004]). Интерфейс проверяет защищенный идентификатор (PID) по внутренней таблице PID ([SWS_LinIf_00816], [SWS_LinIf_00823]). Если кадр предназначен для отправки, LinIf запрашивает полезные данные, настраивает тип ответа на LIN_FRAMERESPONSE_TX и предоставляет данные драйверу в буфере ([SWS_Lin_00230]). Если кадр сконфигурирован на прием, драйвер после полного приема байтов сообщает об успехе через LinIf_RxIndication ([SWS_LinIf_91005]), после чего LinIf передает данные в PDU Router. Подтверждения отправленных ответов ведомого узла (Slave Response) поступают через LinIf_TxConfirmation ([SWS_LinIf_91006]).

Кроме того, через LIN Interface прозрачно инкапсулируется управление трансивером: запросы режима, такие как LinIf_SetTrcvMode, интерфейс синхронно передает в LinTrcv_SetOpMode ([SWS_LinIf_00544], [SWS_LinTrcv_00002]). При транзакциях транспортного протокола LinTp управляет через BswM_LinTp_RequestMode целенаправленным переключением таблицы расписания ведущего узла между прикладным режимом (LINTP_APPLICATIVE_SCHEDULE), диагностическим запросом (LINTP_DIAG_REQUEST) и диагностическим ответом (LINTP_DIAG_RESPONSE) ([SWS_LinIf_00641], [SWS_LinIf_00642], [SWS_LinIf_00643]).

LIN-Slave Frame-Verarbeitung (Rx / Tx)LinController UARTLin DriverLinIfPduR LSduRInterrupt (Header empfangen)LinIf_HeaderIndication(Channel, PduPtr)EvaluatePID(PduPtr->Pid)altОтвет представляет собой данные для отправки (TX)LSduR_LinIfTriggerTransmit(PduInfoPtr)E_OK (Sendedaten bereitgestellt)PduPtr->Drc = LIN_FRAMERESPONSE_TXE_OK (PduPtr konfiguriert)Transmit Response BytesInterrupt (Tx Complete)LinIf_TxConfirmation(Channel)Ответ представляет собой данные для приема (RX)PduPtr->Drc = LIN_FRAMERESPONSE_RXE_OK (готов к приему)Interrupt (Rx Complete)LinIf_RxIndication(Channel, SduPtr)LSduR_LinIfRxIndication(Channel, PduInfoPtr)

Диаграмма последовательности: динамический поток управления и данных при индикации заголовка, триггеринге передачи и квитировании приема на узле LIN-Slave. Источники: [SWS_Lin_00280], [SWS_LinIf_91004], [SWS_LinIf_91005], AUTOSAR SWS LINInterface с. 133.

Синхронизация, реентерабельность и контексты задач

Выполнение задач внутри модульного кластера разделено между контекстами циклических задач и низкоуровневыми уровнями прерываний. Ядром циклического управления выполнением в LIN Interface является диспетчеризуемая функция LinIf_MainFunction_<LinIfChannel.ShortName>, которая в обязательном порядке инстанциируется отдельно для каждого сконфигурированного LIN-канала ([SWS_LinIf_00384], [SWS_LinIf_00725]). Она берет на себя переключение слотов расписания, опрос состояния драйвера и обработку таймаутов транспортного протокола ([SWS_LinIf_00800], SWS LINInterface с. 119). Параллельно с этим LinSM_MainFunction управляет таймерами обратного отсчета и подтверждения для асинхронных запросов каналов и пробуждения ([SWS_LinSM_00162], [SWS_LinSM_00159]).

В отличие от уровня задач, подпрограммы MCAL-модуля драйвера Lin при наличии контроллера с управлением по прерываниям или интерфейса UART выполняются в контексте прерывания (ISR) (AUTOSAR CP SWS LINDriver с. 53). Функции обратного вызова LinIf_HeaderIndication, LinIf_RxIndication и LinIf_TxConfirmation синхронно инициируются непосредственно из этого контекста ISR ([SWS_Lin_00280], [SWS_LinIf_91005], [SWS_LinIf_91006]). Это требует строгой защиты критических секций (Exclusive Areas) в LIN Interface: управляющие вызовы, такие как LinIf_Transmit, LinIf_GotoSleep, LinIf_ScheduleRequest или LinIf_Wakeup, могут изменять внутренние структуры каналов только с защитой от параллельного доступа из LinIf_MainFunction или обратных вызовов ISR (SWS LINInterface с. 119).

С точки зрения реентерабельности функции API модулей LinIf и LinSM преимущественно разработаны как реентерабельные для разных каналов или сетей, но нереентерабельные для одного и того же канала ([SWS_LinSM_00126], [SWS_LinIf_00201], [SWS_LinIf_00204]). Аналогично ведут себя службы драйвера в Lin (например, Lin_Wakeup, Lin_GoToSleepInternal), которые должны строго синхронизироваться для каждого физического канала ([SWS_Lin_00167], [SWS_Lin_00169]). В случае простого оборудования UART без многобайтового FIFO LIN-драйвер временно буферизует байты программно ([SWS_Lin_00026]), что, по всей видимости (Interpretation:), при высокой нагрузке на шину приводит к увеличению числа прерываний CPU на ведомых узлах. Вопрос Q-0d07d89d1ade6a01 (открытый)

Типичные жизненные циклы и режимы работы

При запуске системы BswM инициализирует модули BSW в заданной последовательности: сначала инициализируются базовые драйверы Lin_Init и LinTrcv_Init, затем LinIf_Init, LinTp_Init и, наконец, LinSM_Init (ModemanagementGuide с. 54). LinIf_Init по умолчанию устанавливает расписание всех каналов Master в NULL_SCHEDULE ([SWS_LinIf_00233]) и загружает на ведомых узлах предварительно сконфигурированные таблицы NAD и PID ([SWS_LinIf_00767], [SWS_LinIf_00768]). LinSM запускается в состоянии LINSM_NO_COM, не отправляя при инициализации обратных вызовов в ComM или BswM ([SWS_LinSM_00026], [SWS_LinSM_00166]).

Если ComM запрашивает разрешение связи через LinSM_RequestComMode(COMM_FULL_COMMUNICATION), LinSM напрямую инициирует LinIf_Wakeup и запускает таймер контроля ([SWS_LinSM_00047], [SWS_LinSM_00100]). LinIf передает через Lin_Wakeup физический импульс пробуждения в шину ([SWS_LinIf_00205], [SWS_Lin_00043]). Если LinIf сообщает об успешном процессе пробуждения через LinSM_WakeupConfirmation(success=TRUE), состояние переходит в LINSM_FULL_COM ([SWS_LinSM_00049], [SWS_LinSM_00132]). Об этом сигнализируется в ComM через ComM_BusSM_ModeIndication и в BswM через BswM_LinSM_CurrentState ([SWS_LinSM_00033], [SWS_LinSM_00192]). На ведомых узлах шина считается успешно пробужденной только тогда, когда ведущий узел отправляет первый LIN-заголовок и он принимается ([SWS_LinIf_00761], SWS LINStateManager с. 28).

Переход в спящий режим (Go-to-Sleep) имеет принципиальные различия: на ведущем узле запрос COMM_NO_COMMUNICATION приводит к вызову LinIf_GotoSleep ([SWS_LinSM_00036], [SWS_LinSM_10208]). LinIf дает указание драйверу через Lin_GoToSleep отправить стандартизированный кадр Go-to-Sleep в шину ([SWS_Lin_00166], [SWS_Lin_00089]). На ведомом узле, напротив, интерфейс принимает команду Go-to-Sleep или фиксирует таймаут простоя шины (Bus-Idle-Timeout) и информирует LinSM через LinSM_GotoSleepIndication ([SWS_LinSM_91000]). Затем LinSM синхронно вызывает LinIf_GotoSleep ([SWS_LinSM_00231]). Интерфейс локально переключает драйвер через Lin_GoToSleepInternal в состояние LIN_CH_SLEEP ([SWS_LinIf_00757], [SWS_Lin_00095]) и переводит трансивер через LinIf_SetTrcvMode(LINTRCV_TRCV_MODE_SLEEP) в спящее состояние ([SWS_LinIf_00544], AUTOSAR CP SWS LINInterface с. 137). После подтверждения LinSM_GotoSleepConfirmation модуль LinSM окончательно переходит в LINSM_NO_COM ([SWS_LinSM_00046], [SWS_LinSM_00233]).

Процесс Go-to-Sleep на ведомом узле LINComMLinSMLinIfLin DriverLinTrcvBswMLinSM_RequestComMode(COMM_NO_COMMUNICATION)E_OK (Modus vorgemerkt)Use Case: Событие Bus-Sleep (фрейм Sleep или Bus-Idle)LinSM_GotoSleepIndication(Channel)LinIf_GotoSleep(Channel)Lin_GoToSleepInternal(Channel)E_OK (LIN_CH_SLEEP aktiv)optTransceiver Driver konfiguriertLinTrcv_SetOpMode(LINTRCV_TRCV_MODE_SLEEP)E_OKLinSM_GotoSleepConfirmation(Channel, success=TRUE)State = LINSM_NO_COMComM_BusSM_ModeIndication(COMM_NO_COMMUNICATION)BswM_LinSM_CurrentState(LINSM_NO_COM)

Диаграмма последовательности: взаимодействие модулей BSW при переходе slave-узла LIN в спящее состояние после сигнала Bus-Sleep. Источники: [SWS_LinSM_91000], [SWS_LinSM_00231], [SWS_LinIf_00757], AUTOSAR SWS LINStateManager с. 48.

Обработка ошибок, трассировка DET и деградация

Кластер имеет многоуровневую концепцию обнаружения ошибок и диагностики. Ошибки разработки фиксируются через Default Error Tracer (Det): о недопустимых параметрах канала или сети сообщают LIN_E_INVALID_CHANNEL ([SWS_Lin_00259]), LINIF_E_NONEXISTENT_CHANNEL ([SWS_LinIf_00539]) или LINSM_E_NONEXISTENT_NETWORK ([SWS_LinSM_00127]). Вызовы неинициализированных модулей влекут за собой LIN_E_UNINIT, LINIF_E_UNINIT или LINSM_E_UNINIT ([SWS_Lin_00258], [SWS_LinSM_00128]). Ошибки трансивера, такие как недопустимые номера сетей, передаются модулем LINTRCV_E_INVALID_LIN_NETWORK в DET ([SWS_LinTrcv_00145]).

Сбои связи, возникающие в процессе работы, классифицируются как ошибки времени выполнения: интерфейс определяет LINIF_E_RESPONSE при ошибочных кадрах, а также LINIF_E_NC_NO_RESPONSE при отсутствии ответов на запросы Node-Configuration ([SWS_LinIf_00729]). О физических ошибках шины и протокола (ошибки кадрирования, ошибки контрольной суммы, ошибки побитового мониторинга) MCAL-драйвер на ведомом узле сообщает через LinIf_LinErrorIndication со статусом Lin_SlaveErrorType ([SWS_LinIf_91007], [SWS_Lin_91140]). На ведущих узлах Lin_GetStatus возвращает подробные коды ошибок, такие как LIN_TX_HEADER_ERROR, LIN_TX_ERROR или LIN_RX_ERROR, в интерфейс ([SWS_Lin_00168], [SWS_Lin_00233]).

Центральным механизмом обработки ошибок для LIN-Slave является стандартизированный сигнал response_error. LIN Interface управляет этим 1-битным сигналом автономно: при возникновении ошибки передачи LinIf устанавливает бит, который передается ведущему узлу в следующем безусловном кадре передачи ([SWS_LinIf_00763], SWS LINInterface с. 58). После успешной передачи кадра LinIf автоматически сбрасывает флаг ([SWS_LinIf_00747]). В диагностическом канале LinTp контролирует строгие временные окна протокола: при отсутствии N-PDU таймеры $N_{As}$ и $N_{Cr}$ штатно прерывают транзакцию и сообщают об E_NOT_OK в PDU Router ([SWS_LinIf_00799], [SWS_LinIf_00804], [SWS_LinIf_00806]). Если в PDU Router не хватает емкости буфера, интерфейс прерывает прием и переключает таблицу расписания ведущего узла обратно в прикладной режим ([SWS_LinIf_00676], [SWS_LinIf_00792]).

Настоящее руководство основано на спецификациях AUTOSAR для релиза R20-11 модулей Lin, LinIf, LinSM и LinTrcv. Все нормативные ссылки взяты из указанных документов и записей требований.

Module im Cluster

LIN Driver (Lin)

Controls hardware LIN controllers on the ECU.

BSW ID 82 17 APIs (9 Funktionen, 8 Typen) #include "Lin.h"

LIN Interface (LinIf)

Abstracts LIN hardware and manages schedule tables and frame transmission.

BSW ID 62 35 APIs (31 Funktionen, 4 Typen) #include "LinIf.h"

LIN Network Management (LinNm)

AUTOSAR Classic Communication Services-Modul LIN Network Management (LinNm, Spezifikation: AUTOSAR_SWS_LINNetworkManagement.pdf).

BSW ID 63 Keine C-API · 0 Records #include "LinNm.h"

LIN State Manager (LinSM)

Manages state transitions of LIN networks.

BSW ID 141 12 APIs (10 Funktionen, 2 Typen) #include "LinSM.h"

LIN Transceiver Driver (LinTrcv)

Controls physical bus transceiver states and wakeup on LIN lines.

BSW ID 64 11 APIs (7 Funktionen, 4 Typen) #include "LinTrcv.h"